]> Untitled Git - lemmy.git/commitdiff
usability features
authorRichard <richard@tripaneer.com>
Fri, 31 Jan 2020 20:52:27 +0000 (21:52 +0100)
committerRichard <richard@tripaneer.com>
Fri, 31 Jan 2020 20:52:27 +0000 (21:52 +0100)
This are all the commits from another PR combined into a single commit.

25 files changed:
ui/src/components/communities.tsx
ui/src/components/community-form.tsx
ui/src/components/community.tsx
ui/src/components/create-community.tsx
ui/src/components/create-post.tsx
ui/src/components/footer.tsx
ui/src/components/inbox.tsx
ui/src/components/login.tsx
ui/src/components/main.tsx
ui/src/components/modlog.tsx
ui/src/components/navbar.tsx
ui/src/components/password_change.tsx
ui/src/components/post-form.tsx
ui/src/components/post-listing.tsx
ui/src/components/post-listings.tsx
ui/src/components/post.tsx
ui/src/components/search.tsx
ui/src/components/setup.tsx
ui/src/components/sidebar.tsx
ui/src/components/site-form.tsx
ui/src/components/sort-select.tsx
ui/src/components/sponsors.tsx
ui/src/components/user.tsx
ui/src/translations/de.ts
ui/src/translations/en.ts

index b1da98827ddb193e911dca75b8cbe2d901cb5a22..eef39ccf2a28ff89441e8c9c597c961ae00340cd 100644 (file)
@@ -76,37 +76,37 @@ export class Communities extends Component<any, CommunitiesState> {
     return (
       <div class="container">
         {this.state.loading ? (
-          <h5 class="">
+          <p class="text-center">
             <svg class="icon icon-spinner spin">
               <use xlinkHref="#icon-spinner"></use>
             </svg>
-          </h5>
+          </p>
         ) : (
           <div>
             <h5>
-              <T i18nKey="list_of_communities">#</T>
+              { i18n.t('list_of_communities') }
             </h5>
             <div class="table-responsive">
               <table id="community_table" class="table table-sm table-hover">
                 <thead class="pointer">
                   <tr>
                     <th>
-                      <T i18nKey="name">#</T>
+                      { i18n.t('name') }
                     </th>
                     <th class="d-none d-lg-table-cell">
-                      <T i18nKey="title">#</T>
+                      { i18n.t('title') }
                     </th>
                     <th>
-                      <T i18nKey="category">#</T>
+                      { i18n.t('category') }
                     </th>
                     <th class="text-right">
-                      <T i18nKey="subscribers">#</T>
+                      { i18n.t('subscribers') }
                     </th>
                     <th class="text-right d-none d-lg-table-cell">
-                      <T i18nKey="posts">#</T>
+                      { i18n.t('posts') }
                     </th>
                     <th class="text-right d-none d-lg-table-cell">
-                      <T i18nKey="comments">#</T>
+                      { i18n.t('comments') }
                     </th>
                     <th></th>
                   </tr>
@@ -149,7 +149,7 @@ export class Communities extends Component<any, CommunitiesState> {
                               this.handleSubscribe
                             )}
                           >
-                            <T i18nKey="subscribe">#</T>
+                            { i18n.t('subscribe') }
                           </span>
                         )}
                       </td>
@@ -173,15 +173,16 @@ export class Communities extends Component<any, CommunitiesState> {
             class="btn btn-sm btn-secondary mr-1"
             onClick={linkEvent(this, this.prevPage)}
           >
-            <T i18nKey="prev">#</T>
+            { i18n.t('prev') }
           </button>
         )}
+
         {this.state.communities.length == communityLimit && (
           <button
             class="btn btn-sm btn-secondary"
             onClick={linkEvent(this, this.nextPage)}
           >
-            <T i18nKey="next">#</T>
+            { i18n.t('next') }
           </button>
         )}
       </div>
index c8d888be47074e12386d46f093f48e3bf3be1bda..46fc41857e9919deb9640afaa7d4f72608b3694a 100644 (file)
@@ -108,12 +108,13 @@ export class CommunityForm extends Component<
     return (
       <form onSubmit={linkEvent(this, this.handleCreateCommunitySubmit)}>
         <div class="form-group row">
-          <label class="col-12 col-form-label">
-            <T i18nKey="name">#</T>
+          <label class="col-12 col-form-label" for="community-name">
+            { i18n.t('name') }
           </label>
           <div class="col-12">
             <input
               type="text"
+              id="community-name"
               class="form-control"
               value={this.state.communityForm.name}
               onInput={linkEvent(this, this.handleCommunityNameChange)}
@@ -125,13 +126,15 @@ export class CommunityForm extends Component<
             />
           </div>
         </div>
+
         <div class="form-group row">
-          <label class="col-12 col-form-label">
-            <T i18nKey="title">#</T>
+          <label class="col-12 col-form-label" for="community-title">
+            { i18n.t('title') }
           </label>
           <div class="col-12">
             <input
               type="text"
+              id="community-title"
               value={this.state.communityForm.title}
               onInput={linkEvent(this, this.handleCommunityTitleChange)}
               class="form-control"
@@ -142,13 +145,14 @@ export class CommunityForm extends Component<
           </div>
         </div>
         <div class="form-group row">
-          <label class="col-12 col-form-label">
-            <T i18nKey="sidebar">#</T>
+          <label class="col-12 col-form-label" for="community-sidebar">
+            { i18n.t('sidebar') }
           </label>
           <div class="col-12">
             <textarea
               id={this.id}
               value={this.state.communityForm.description}
+              id="community-sidebar"
               onInput={linkEvent(this, this.handleCommunityDescriptionChange)}
               class="form-control"
               rows={3}
@@ -157,12 +161,13 @@ export class CommunityForm extends Component<
           </div>
         </div>
         <div class="form-group row">
-          <label class="col-12 col-form-label">
-            <T i18nKey="category">#</T>
+          <label class="col-12 col-form-label" for="community-category">
+            { i18n.t('category') }
           </label>
           <div class="col-12">
             <select
               class="form-control"
+              id="community-category"
               value={this.state.communityForm.category_id}
               onInput={linkEvent(this, this.handleCommunityCategoryChange)}
             >
@@ -179,12 +184,13 @@ export class CommunityForm extends Component<
               <div class="form-check">
                 <input
                   class="form-check-input"
+                  id="community-nsfw"
                   type="checkbox"
                   checked={this.state.communityForm.nsfw}
                   onChange={linkEvent(this, this.handleCommunityNsfwChange)}
                 />
-                <label class="form-check-label">
-                  <T i18nKey="nsfw">#</T>
+                <label class="form-check-label" for="community-nsfw">
+                  { i18n.t('nsfw') }
                 </label>
               </div>
             </div>
@@ -209,7 +215,7 @@ export class CommunityForm extends Component<
                 class="btn btn-secondary"
                 onClick={linkEvent(this, this.handleCancel)}
               >
-                <T i18nKey="cancel">#</T>
+                { i18n.t('cancel') }
               </button>
             )}
           </div>
index 3c5f68906ea1ec5d7a60379f4df7aeb6bdb62266..30756344ad273e419340da78498a711b1b9ffd06 100644 (file)
@@ -128,11 +128,11 @@ export class Community extends Component<any, State> {
     return (
       <div class="container">
         {this.state.loading ? (
-          <h5>
+          <p class="text-center">
             <svg class="icon icon-spinner spin">
               <use xlinkHref="#icon-spinner"></use>
             </svg>
-          </h5>
+          </p>
         ) : (
           <div class="row">
             <div class="col-12 col-md-8">
@@ -140,12 +140,12 @@ export class Community extends Component<any, State> {
                 {this.state.community.title}
                 {this.state.community.removed && (
                   <small className="ml-2 text-muted font-italic">
-                    <T i18nKey="removed">#</T>
+                    { i18n.t('removed') }
                   </small>
                 )}
                 {this.state.community.nsfw && (
                   <small className="ml-2 text-muted font-italic">
-                    <T i18nKey="nsfw">#</T>
+                    { i18n.t('nsfw') }
                   </small>
                 )}
               </h5>
@@ -192,7 +192,7 @@ export class Community extends Component<any, State> {
             class="btn btn-sm btn-secondary mr-1"
             onClick={linkEvent(this, this.prevPage)}
           >
-            <T i18nKey="prev">#</T>
+            { i18n.t('prev') }
           </button>
         )}
         {this.state.posts.length == fetchLimit && (
@@ -200,7 +200,7 @@ export class Community extends Component<any, State> {
             class="btn btn-sm btn-secondary"
             onClick={linkEvent(this, this.nextPage)}
           >
-            <T i18nKey="next">#</T>
+            { i18n.t('next') }
           </button>
         )}
       </div>
index f16b64259ccf5c183756cafad9917ddfeffb7737..49cfb0e90f474cae93d988a1f4a0ec54d4671662 100644 (file)
@@ -23,7 +23,7 @@ export class CreateCommunity extends Component<any, any> {
         <div class="row">
           <div class="col-12 col-lg-6 offset-lg-3 mb-4">
             <h5>
-              <T i18nKey="create_community">#</T>
+              { i18n.t('create_community') }
             </h5>
             <CommunityForm onCreate={this.handleCommunityCreate} />
           </div>
index ad013d097c982f06ca111996bd9cd223531e893f..39a5e5f03c5525eddb5979c07537eca4d63cb2e6 100644 (file)
@@ -23,7 +23,7 @@ export class CreatePost extends Component<any, any> {
         <div class="row">
           <div class="col-12 col-lg-6 offset-lg-3 mb-4">
             <h5>
-              <T i18nKey="create_post">#</T>
+              { i18n.t('create_post') }
             </h5>
             <PostForm onCreate={this.handlePostCreate} params={this.params} />
           </div>
index 5451da2c8765164d0a6fcb5c72bbc2b93d71236c..f48120b8b9a8254b2d4577d1235f67a7a66ce48c 100644 (file)
@@ -2,7 +2,7 @@ import { Component } from 'inferno';
 import { Link } from 'inferno-router';
 import { repoUrl } from '../utils';
 import { version } from '../version';
-import { T } from 'inferno-i18next';
+import { i18n } from '../i18next';
 
 export class Footer extends Component<any, any> {
   constructor(props: any, context: any) {
@@ -19,22 +19,22 @@ export class Footer extends Component<any, any> {
             </li>
             <li class="nav-item">
               <Link class="nav-link" to="/modlog">
-                <T i18nKey="modlog">#</T>
+                { i18n.t('modlog') }
               </Link>
             </li>
             <li class="nav-item">
               <a class="nav-link" href={'/docs/index.html'}>
-                <T i18nKey="docs">#</T>
+                { i18n.t('docs') }
               </a>
             </li>
             <li class="nav-item">
               <Link class="nav-link" to="/sponsors">
-                <T i18nKey="donate">#</T>
+                { i18n.t('donate') }
               </Link>
             </li>
             <li class="nav-item">
               <a class="nav-link" href={repoUrl}>
-                <T i18nKey="code">#</T>
+                { i18n.t('code') }
               </a>
             </li>
           </ul>
index 41c1ce60d730fd4029e3fe700eda4f91f4e39023..c89beb402d2d69bea9038e654e4c81aa2fc68503 100644 (file)
@@ -122,7 +122,7 @@ export class Inbox extends Component<any, InboxState> {
                 <ul class="list-inline mb-1 text-muted small font-weight-bold">
                   <li className="list-inline-item">
                     <span class="pointer" onClick={this.markAllAsRead}>
-                      <T i18nKey="mark_all_as_read">#</T>
+                      { i18n.t('mark_all_as_read') }
                     </span>
                   </li>
                 </ul>
@@ -148,13 +148,14 @@ export class Inbox extends Component<any, InboxState> {
           class="custom-select custom-select-sm w-auto mr-2"
         >
           <option disabled>
-            <T i18nKey="type">#</T>
+            { i18n.t('type') }
+            
           </option>
           <option value={UnreadOrAll.Unread}>
-            <T i18nKey="unread">#</T>
+            { i18n.t('unread') }
           </option>
           <option value={UnreadOrAll.All}>
-            <T i18nKey="all">#</T>
+            { i18n.t('all') }
           </option>
         </select>
         <select
@@ -163,19 +164,22 @@ export class Inbox extends Component<any, InboxState> {
           class="custom-select custom-select-sm w-auto mr-2"
         >
           <option disabled>
-            <T i18nKey="type">#</T>
+            { i18n.t('type') }
           </option>
           <option value={UnreadType.All}>
-            <T i18nKey="all">#</T>
+            { i18n.t('all') }
+          </option>
+          <option value={UnreadType.Both}>
+            { i18n.t('both') }
           </option>
           <option value={UnreadType.Replies}>
-            <T i18nKey="replies">#</T>
+            { i18n.t('replies') }
           </option>
           <option value={UnreadType.Mentions}>
-            <T i18nKey="mentions">#</T>
+            { i18n.t('mentions') }
           </option>
           <option value={UnreadType.Messages}>
-            <T i18nKey="messages">#</T>
+            { i18n.t('messages') }
           </option>
         </select>
         <SortSelect
@@ -248,14 +252,14 @@ export class Inbox extends Component<any, InboxState> {
             class="btn btn-sm btn-secondary mr-1"
             onClick={linkEvent(this, this.prevPage)}
           >
-            <T i18nKey="prev">#</T>
+            { i18n.t('prev') }
           </button>
         )}
         <button
           class="btn btn-sm btn-secondary"
           onClick={linkEvent(this, this.nextPage)}
         >
-          <T i18nKey="next">#</T>
+          { i18n.t('next') }
         </button>
       </div>
     );
index 64687a3d87f87d757a76269efd64f47f96b1f67f..bea8564c356387143c85cf99cda084629d223d6d 100644 (file)
@@ -78,15 +78,16 @@ export class Login extends Component<any, State> {
     return (
       <div>
         <form onSubmit={linkEvent(this, this.handleLoginSubmit)}>
-          <h5>Login</h5>
+          <h2>{ i18n.t('login') }</h2>
           <div class="form-group row">
-            <label class="col-sm-2 col-form-label">
-              <T i18nKey="email_or_username">#</T>
+            <label class="col-sm-2 col-form-label" for="login-email-or-username">
+                { i18n.t('email_or_username') }
             </label>
             <div class="col-sm-10">
               <input
                 type="text"
                 class="form-control"
+                id="login-email-or-username"
                 value={this.state.loginForm.username_or_email}
                 onInput={linkEvent(this, this.handleLoginUsernameChange)}
                 required
@@ -95,12 +96,13 @@ export class Login extends Component<any, State> {
             </div>
           </div>
           <div class="form-group row">
-            <label class="col-sm-2 col-form-label">
-              <T i18nKey="password">#</T>
+            <label class="col-sm-2 col-form-label" for="login-password">
+                { i18n.t('password') }
             </label>
             <div class="col-sm-10">
               <input
                 type="password"
+                id="login-password"
                 value={this.state.loginForm.password}
                 onInput={linkEvent(this, this.handleLoginPasswordChange)}
                 class="form-control"
@@ -111,7 +113,7 @@ export class Login extends Component<any, State> {
                 onClick={linkEvent(this, this.handlePasswordReset)}
                 className="btn p-0 btn-link d-inline-block float-right text-muted small font-weight-bold"
               >
-                <T i18nKey="forgot_password">#</T>
+                { i18n.t('forgot_password') }
               </button>
             </div>
           </div>
@@ -135,16 +137,19 @@ export class Login extends Component<any, State> {
   registerForm() {
     return (
       <form onSubmit={linkEvent(this, this.handleRegisterSubmit)}>
-        <h5>
-          <T i18nKey="sign_up">#</T>
-        </h5>
+        <h2>
+          { i18n.t('sign_up') }
+        </h2>
+
         <div class="form-group row">
-          <label class="col-sm-2 col-form-label">
-            <T i18nKey="username">#</T>
+          <label class="col-sm-2 col-form-label" for="register-username">
+            { i18n.t('username') }
           </label>
+
           <div class="col-sm-10">
             <input
               type="text"
+              id="register-username"
               class="form-control"
               value={this.state.registerForm.username}
               onInput={linkEvent(this, this.handleRegisterUsernameChange)}
@@ -155,13 +160,15 @@ export class Login extends Component<any, State> {
             />
           </div>
         </div>
+
         <div class="form-group row">
-          <label class="col-sm-2 col-form-label">
-            <T i18nKey="email">#</T>
+          <label class="col-sm-2 col-form-label" for="register-email">
+            { i18n.t('email') }
           </label>
           <div class="col-sm-10">
             <input
               type="email"
+              id="register-email"
               class="form-control"
               placeholder={i18n.t('optional')}
               value={this.state.registerForm.email}
@@ -170,13 +177,15 @@ export class Login extends Component<any, State> {
             />
           </div>
         </div>
+
         <div class="form-group row">
-          <label class="col-sm-2 col-form-label">
-            <T i18nKey="password">#</T>
+          <label class="col-sm-2 col-form-label" for="register-password">
+            { i18n.t('password') }
           </label>
           <div class="col-sm-10">
             <input
               type="password"
+              id="register-password"
               value={this.state.registerForm.password}
               onInput={linkEvent(this, this.handleRegisterPasswordChange)}
               class="form-control"
@@ -184,13 +193,15 @@ export class Login extends Component<any, State> {
             />
           </div>
         </div>
+
         <div class="form-group row">
-          <label class="col-sm-2 col-form-label">
-            <T i18nKey="verify_password">#</T>
+          <label class="col-sm-2 col-form-label" for="register-verify-password">
+            { i18n.t('verify_password') }
           </label>
           <div class="col-sm-10">
             <input
               type="password"
+              id="register-verify-password"
               value={this.state.registerForm.password_verify}
               onInput={linkEvent(this, this.handleRegisterPasswordVerifyChange)}
               class="form-control"
@@ -198,18 +209,20 @@ export class Login extends Component<any, State> {
             />
           </div>
         </div>
-        {this.state.enable_nsfw && (
+
+        { this.state.enable_nsfw && (
           <div class="form-group row">
             <div class="col-sm-10">
               <div class="form-check">
                 <input
                   class="form-check-input"
+                  id="register-show-nsfw"
                   type="checkbox"
                   checked={this.state.registerForm.show_nsfw}
                   onChange={linkEvent(this, this.handleRegisterShowNsfwChange)}
                 />
-                <label class="form-check-label">
-                  <T i18nKey="show_nsfw">#</T>
+                <label class="form-check-label" for="register-show-nsfw">
+                    { i18n.t('show_nsfw') }
                 </label>
               </div>
             </div>
index 6bf4164ffe51324f5af915a83bd0054c33631440..e578cc831e99a5e760ac07902ba858f02cdb8b94 100644 (file)
@@ -159,8 +159,8 @@ export class Main extends Component<any, MainState> {
     return (
       <div class="container">
         <div class="row">
-          <div class="col-12 col-md-8">{this.posts()}</div>
-          <div class="col-12 col-md-4">{this.my_sidebar()}</div>
+          <main role="main" class="col-12 col-md-8">{this.posts()}</main>
+          <aside class="col-12 col-md-4">{this.my_sidebar()}</aside>
         </div>
       </div>
     );
@@ -413,13 +413,13 @@ export class Main extends Component<any, MainState> {
 
   posts() {
     return (
-      <div>
+      <div class="main-content-wrapper">
         {this.state.loading ? (
-          <h5>
+          <p class="text-center">
             <svg class="icon icon-spinner spin">
               <use xlinkHref="#icon-spinner"></use>
             </svg>
-          </h5>
+          </p>
         ) : (
           <div>
             {this.selects()}
index e03f1ff754bacd3439a59f9e5b3585dbd2048453..6da10eec39eb939fedd100f9bbe134241b66e7f8 100644 (file)
@@ -343,7 +343,7 @@ export class Modlog extends Component<any, ModlogState> {
     return (
       <div class="container">
         {this.state.loading ? (
-          <h5 class="">
+          <h5 class="text-center">
             <svg class="icon icon-spinner spin">
               <use xlinkHref="#icon-spinner"></use>
             </svg>
@@ -359,15 +359,15 @@ export class Modlog extends Component<any, ModlogState> {
                   /c/{this.state.communityName}{' '}
                 </Link>
               )}
-              <span>Modlog</span>
+              <span>{ i18n.t('modlog') }</span>
             </h5>
             <div class="table-responsive">
               <table id="modlog_table" class="table table-sm table-hover">
                 <thead class="pointer">
                   <tr>
-                    <th>Time</th>
-                    <th>Mod</th>
-                    <th>Action</th>
+                    <th> { i18n.t('time')}</th>
+                    <th>{ i18n.t('mod')}</th>
+                    <th>{ i18n.t('action')}</th>
                   </tr>
                 </thead>
                 {this.combined()}
@@ -388,14 +388,14 @@ export class Modlog extends Component<any, ModlogState> {
             class="btn btn-sm btn-secondary mr-1"
             onClick={linkEvent(this, this.prevPage)}
           >
-            Prev
+            { i18n.t('prev') }
           </button>
         )}
         <button
           class="btn btn-sm btn-secondary"
           onClick={linkEvent(this, this.nextPage)}
         >
-          Next
+          { i18n.t('next') }
         </button>
       </div>
     );
index 1828fce90b9df9b2d13b96e0fb51e081bf213dad..61ec01c1988555c10afd8446517ecd7962f993d0 100644 (file)
@@ -102,6 +102,7 @@ export class Navbar extends Component<any, NavbarState> {
         <button
           class="navbar-toggler"
           type="button"
+          aria-label="menu"
           onClick={linkEvent(this, this.expandNavbar)}
         >
           <span class="navbar-toggler-icon"></span>
@@ -112,12 +113,12 @@ export class Navbar extends Component<any, NavbarState> {
           <ul class="navbar-nav mr-auto">
             <li class="nav-item">
               <Link class="nav-link" to="/communities">
-                <T i18nKey="communities">#</T>
+                { i18n.t('communities') }
               </Link>
             </li>
             <li class="nav-item">
               <Link class="nav-link" to="/search">
-                <T i18nKey="search">#</T>
+                { i18n.t('search') }
               </Link>
             </li>
             <li class="nav-item">
@@ -128,17 +129,17 @@ export class Navbar extends Component<any, NavbarState> {
                   state: { prevPath: this.currentLocation },
                 }}
               >
-                <T i18nKey="create_post">#</T>
+                { i18n.t('create_post') }
               </Link>
             </li>
             <li class="nav-item">
               <Link class="nav-link" to="/create_community">
-                <T i18nKey="create_community">#</T>
+                { i18n.t('create_community') }
               </Link>
             </li>
             <li className="nav-item">
               <Link
-                class="nav-link"
+                class="nav-link ml-2"
                 to="/sponsors"
                 title={i18n.t('donate_to_lemmy')}
               >
@@ -186,7 +187,7 @@ export class Navbar extends Component<any, NavbarState> {
               </>
             ) : (
               <Link class="nav-link" to="/login">
-                <T i18nKey="login_sign_up">#</T>
+                { i18n.t('login_sign_up') }
               </Link>
             )}
           </ul>
index 10b6867c9e5a35aab99791321699ade4a46c3bea..7774b783b393ff9f7ce54c2c89c0daece3e6c540 100644 (file)
@@ -59,7 +59,7 @@ export class PasswordChange extends Component<any, State> {
         <div class="row">
           <div class="col-12 col-lg-6 offset-lg-3 mb-4">
             <h5>
-              <T i18nKey="password_change">#</T>
+              { i18n.t('password_change') }
             </h5>
             {this.passwordChangeForm()}
           </div>
index 57d9a9646dfc546b3231f352febb992217ba9f5c..858b6b795317dbae12be9e033ec3a3019e2b4115 100644 (file)
@@ -151,12 +151,13 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
       <div>
         <form onSubmit={linkEvent(this, this.handlePostSubmit)}>
           <div class="form-group row">
-            <label class="col-sm-2 col-form-label">
-              <T i18nKey="url">#</T>
+            <label class="col-sm-2 col-form-label" for="post-url">
+              { i18n.t('url') }
             </label>
             <div class="col-sm-10">
               <input
                 type="url"
+                id="post-url"
                 class="form-control"
                 value={this.state.postForm.url}
                 onInput={linkEvent(this, this.handlePostUrlChange)}
@@ -181,7 +182,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
                   className={`${UserService.Instance.user &&
                     'pointer'} d-inline-block mr-2 float-right text-muted small font-weight-bold`}
                 >
-                  <T i18nKey="upload_image">#</T>
+                  { i18n.t('upload_image') }
                 </label>
                 <input
                   id="file-upload"
@@ -201,7 +202,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
                   target="_blank"
                   class="mr-2 d-inline-block float-right text-muted small font-weight-bold"
                 >
-                  <T i18nKey="archive_link">#</T>
+                  { i18n.t('archive_link') }
                 </a>
               )}
               {this.state.imageLoading && (
@@ -215,7 +216,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
               {this.state.crossPosts.length > 0 && (
                 <>
                   <div class="my-1 text-muted small font-weight-bold">
-                    <T i18nKey="cross_posts">#</T>
+                    { i18n.t('cross_posts') }
                   </div>
                   <PostListings showCommunity posts={this.state.crossPosts} />
                 </>
@@ -223,12 +224,13 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
             </div>
           </div>
           <div class="form-group row">
-            <label class="col-sm-2 col-form-label">
-              <T i18nKey="title">#</T>
+            <label class="col-sm-2 col-form-label" for="post-title">
+              { i18n.t('title') }
             </label>
             <div class="col-sm-10">
               <textarea
                 value={this.state.postForm.name}
+                id="post-title"
                 onInput={linkEvent(this, this.handlePostNameChange)}
                 class="form-control"
                 required
@@ -239,21 +241,23 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
               {this.state.suggestedPosts.length > 0 && (
                 <>
                   <div class="my-1 text-muted small font-weight-bold">
-                    <T i18nKey="related_posts">#</T>
+                    { i18n.t('related_posts') }
                   </div>
                   <PostListings posts={this.state.suggestedPosts} />
                 </>
               )}
             </div>
           </div>
+
           <div class="form-group row">
-            <label class="col-sm-2 col-form-label">
-              <T i18nKey="body">#</T>
+            <label class="col-sm-2 col-form-label" for="post-body">
+              { i18n.t('body') }
             </label>
             <div class="col-sm-10">
               <textarea
                 id={this.id}
                 value={this.state.postForm.body}
+                id="post-body"
                 onInput={linkEvent(this, this.handlePostBodyChange)}
                 className={`form-control ${this.state.previewMode && 'd-none'}`}
                 rows={4}
@@ -271,7 +275,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
                     .previewMode && 'active'}`}
                   onClick={linkEvent(this, this.handlePreviewToggle)}
                 >
-                  <T i18nKey="preview">#</T>
+                  { i18n.t('preview') }
                 </button>
               )}
               <a
@@ -279,18 +283,19 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
                 target="_blank"
                 class="d-inline-block float-right text-muted small font-weight-bold"
               >
-                <T i18nKey="formatting_help">#</T>
+                { i18n.t('formatting_help') }
               </a>
             </div>
           </div>
           {!this.props.post && (
             <div class="form-group row">
-              <label class="col-sm-2 col-form-label">
-                <T i18nKey="community">#</T>
+              <label class="col-sm-2 col-form-label" for="post-community">
+                { i18n.t('community') }
               </label>
               <div class="col-sm-10">
                 <select
                   class="form-control"
+                  id="post-community"
                   value={this.state.postForm.community_id}
                   onInput={linkEvent(this, this.handlePostCommunityChange)}
                 >
@@ -307,12 +312,13 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
                 <div class="form-check">
                   <input
                     class="form-check-input"
+                    id="post-nsfw"
                     type="checkbox"
                     checked={this.state.postForm.nsfw}
                     onChange={linkEvent(this, this.handlePostNsfwChange)}
                   />
-                  <label class="form-check-label">
-                    <T i18nKey="nsfw">#</T>
+                  <label class="form-check-label" for="post-nsfw">
+                    { i18n.t('nsfw') }
                   </label>
                 </div>
               </div>
@@ -337,7 +343,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
                   class="btn btn-secondary"
                   onClick={linkEvent(this, this.handleCancel)}
                 >
-                  <T i18nKey="cancel">#</T>
+                  { i18n.t('cancel') }
                 </button>
               )}
             </div>
index c9a29e87fa3963b892d66ab9d580366e9d707bac..21037453c7372eba64cef9e44112eef2fb09fa16 100644 (file)
@@ -247,27 +247,27 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
             )}
             {post.removed && (
               <small className="ml-2 text-muted font-italic">
-                <T i18nKey="removed">#</T>
+                { i18n.t('removed') }
               </small>
             )}
             {post.deleted && (
               <small className="ml-2 text-muted font-italic">
-                <T i18nKey="deleted">#</T>
+                { i18n.t('deleted') }
               </small>
             )}
             {post.locked && (
               <small className="ml-2 text-muted font-italic">
-                <T i18nKey="locked">#</T>
+                { i18n.t('locked') }
               </small>
             )}
             {post.stickied && (
               <small className="ml-2 text-muted font-italic">
-                <T i18nKey="stickied">#</T>
+                { i18n.t('stickied') }
               </small>
             )}
             {post.nsfw && (
               <small className="ml-2 text-muted font-italic">
-                <T i18nKey="nsfw">#</T>
+                { i18n.t('nsfw') }
               </small>
             )}
           </div>
@@ -289,17 +289,17 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
               </Link>
               {this.isMod && (
                 <span className="mx-1 badge badge-light">
-                  <T i18nKey="mod">#</T>
+                  { i18n.t('mod') }
                 </span>
               )}
               {this.isAdmin && (
                 <span className="mx-1 badge badge-light">
-                  <T i18nKey="admin">#</T>
+                  { i18n.t('admin') }
                 </span>
               )}
               {(post.banned_from_community || post.banned) && (
                 <span className="mx-1 badge badge-danger">
-                  <T i18nKey="banned">#</T>
+                  { i18n.t('banned') }
                 </span>
               )}
               {this.props.showCommunity && (
@@ -406,14 +406,14 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
                         class="pointer"
                         onClick={linkEvent(this, this.handleModRemoveShow)}
                       >
-                        <T i18nKey="remove">#</T>
+                        { i18n.t('remove') }
                       </span>
                     ) : (
                       <span
                         class="pointer"
                         onClick={linkEvent(this, this.handleModRemoveSubmit)}
                       >
-                        <T i18nKey="restore">#</T>
+                        { i18n.t('restore') }
                       </span>
                     )}
                   </li>
@@ -430,7 +430,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
                               this.handleModBanFromCommunityShow
                             )}
                           >
-                            <T i18nKey="ban">#</T>
+                            { i18n.t('ban') }
                           </span>
                         ) : (
                           <span
@@ -440,7 +440,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
                               this.handleModBanFromCommunitySubmit
                             )}
                           >
-                            <T i18nKey="unban">#</T>
+                            { i18n.t('unban') }
                           </span>
                         )}
                       </li>
@@ -487,7 +487,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
                             this.handleTransferCommunity
                           )}
                         >
-                          <T i18nKey="yes">#</T>
+                          { i18n.t('yes') }
                         </span>
                         <span
                           class="pointer d-inline-block"
@@ -496,7 +496,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
                             this.handleCancelShowConfirmTransferCommunity
                           )}
                         >
-                          <T i18nKey="no">#</T>
+                          { i18n.t('no') }
                         </span>
                       </>
                     )}
@@ -512,14 +512,14 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
                             class="pointer"
                             onClick={linkEvent(this, this.handleModBanShow)}
                           >
-                            <T i18nKey="ban_from_site">#</T>
+                            { i18n.t('ban_from_site') }
                           </span>
                         ) : (
                           <span
                             class="pointer"
                             onClick={linkEvent(this, this.handleModBanSubmit)}
                           >
-                            <T i18nKey="unban_from_site">#</T>
+                            { i18n.t('unban_from_site') }
                           </span>
                         )}
                       </li>
@@ -549,18 +549,18 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
                           this.handleShowConfirmTransferSite
                         )}
                       >
-                        <T i18nKey="transfer_site">#</T>
+                        { i18n.t('transfer_site') }
                       </span>
                     ) : (
                       <>
                         <span class="d-inline-block mr-1">
-                          <T i18nKey="are_you_sure">#</T>
+                          { i18n.t('are_you_sure') }
                         </span>
                         <span
                           class="pointer d-inline-block mr-1"
                           onClick={linkEvent(this, this.handleTransferSite)}
                         >
-                          <T i18nKey="yes">#</T>
+                          { i18n.t('yes') }
                         </span>
                         <span
                           class="pointer d-inline-block"
@@ -569,7 +569,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
                             this.handleCancelShowConfirmTransferSite
                           )}
                         >
-                          <T i18nKey="no">#</T>
+                          { i18n.t('no') }
                         </span>
                       </>
                     )}
@@ -583,7 +583,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
                   className="pointer"
                   onClick={linkEvent(this, this.handleViewSource)}
                 >
-                  <T i18nKey="view_source">#</T>
+                  { i18n.t('view_source') }
                 </span>
               </li>
             )}
@@ -601,18 +601,19 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
                 onInput={linkEvent(this, this.handleModRemoveReasonChange)}
               />
               <button type="submit" class="btn btn-secondary">
-                <T i18nKey="remove_post">#</T>
+                { i18n.t('remove_post') }
               </button>
             </form>
           )}
           {this.state.showBanDialog && (
             <form onSubmit={linkEvent(this, this.handleModBanBothSubmit)}>
               <div class="form-group row">
-                <label class="col-form-label">
-                  <T i18nKey="reason">#</T>
+                <label class="col-form-label" for="post-listing-reason">
+                  { i18n.t('reason') }
                 </label>
                 <input
                   type="text"
+                  id="post-listing-reason"
                   class="form-control mr-2"
                   placeholder={i18n.t('reason')}
                   value={this.state.banReason}
index b65c919290fd2e1201c7113e57165435edc12e08..d3d89e5485be737036f9fb20c15322a9dd645c29 100644 (file)
@@ -2,6 +2,7 @@ import { Component } from 'inferno';
 import { Link } from 'inferno-router';
 import { Post } from '../interfaces';
 import { PostListing } from './post-listing';
+import { i18n } from '../i18next';
 import { T } from 'inferno-i18next';
 
 interface PostListingsProps {
@@ -30,14 +31,12 @@ export class PostListings extends Component<PostListingsProps, any> {
           ))
         ) : (
           <>
-            <div>
-              <T i18nKey="no_posts">#</T>
-            </div>
+            <h2>
+              { i18n.t('no_posts') }
+            </h2>
             {this.props.showCommunity !== undefined && (
               <div>
-                <T i18nKey="subscribe_to_communities">
-                  #<Link to="/communities">#</Link>
-                </T>
+                <Link to="/communities">{ i18n.t('subscribe_to_communities') }</Link>
               </div>
             )}
           </>
index 366212488fe2620b0c06ce2ff9a0feccd3b0d703..1d84efac1f1a0a29cb1a0d6dfd12e0137e956b57 100644 (file)
@@ -155,11 +155,11 @@ export class Post extends Component<any, PostState> {
     return (
       <div class="container">
         {this.state.loading ? (
-          <h5>
+          <p class="text-center">
             <svg class="icon icon-spinner spin">
               <use xlinkHref="#icon-spinner"></use>
             </svg>
-          </h5>
+          </p>
         ) : (
           <div class="row">
             <div class="col-12 col-md-8 mb-3">
@@ -173,7 +173,7 @@ export class Post extends Component<any, PostState> {
               {this.state.crossPosts.length > 0 && (
                 <>
                   <div class="my-1 text-muted small font-weight-bold">
-                    <T i18nKey="cross_posts">#</T>
+                    { i18n.t('cross_posts') }
                   </div>
                   <PostListings showCommunity posts={this.state.crossPosts} />
                 </>
@@ -235,18 +235,6 @@ export class Post extends Component<any, PostState> {
             onChange={linkEvent(this, this.handleCommentSortChange)}
           />
         </label>
-        <label
-          className={`btn btn-sm btn-secondary pointer ${this.state
-            .commentSort === CommentSortType.Old && 'active'}`}
-        >
-          {i18n.t('old')}
-          <input
-            type="radio"
-            value={CommentSortType.Old}
-            checked={this.state.commentSort === CommentSortType.Old}
-            onChange={linkEvent(this, this.handleCommentSortChange)}
-          />
-        </label>
       </div>
     );
   }
@@ -256,7 +244,7 @@ export class Post extends Component<any, PostState> {
       <div class="d-none d-md-block new-comments mb-3 card border-secondary">
         <div class="card-body small">
           <h6>
-            <T i18nKey="recent_comments">#</T>
+            { i18n.t('recent_comments') }
           </h6>
           {this.state.comments.map(comment => (
             <CommentNodes
@@ -329,13 +317,6 @@ export class Post extends Component<any, PostState> {
           +a.comment.deleted - +b.comment.deleted ||
           b.comment.published.localeCompare(a.comment.published)
       );
-    } else if (this.state.commentSort == CommentSortType.Old) {
-      tree.sort(
-        (a, b) =>
-          +a.comment.removed - +b.comment.removed ||
-          +a.comment.deleted - +b.comment.deleted ||
-          a.comment.published.localeCompare(b.comment.published)
-      );
     } else if (this.state.commentSort == CommentSortType.Hot) {
       tree.sort(
         (a, b) =>
index 604c261730f600965db7080c5070db09f2836d69..e3789d5a8ed0c08f27dacd9e9cb4ac82f97da404 100644 (file)
@@ -127,7 +127,7 @@ export class Search extends Component<any, SearchState> {
     return (
       <div class="container">
         <h5>
-          <T i18nKey="search">#</T>
+          { i18n.t('search') }
         </h5>
         {this.selects()}
         {this.searchForm()}
@@ -164,7 +164,7 @@ export class Search extends Component<any, SearchState> {
             </svg>
           ) : (
             <span>
-              <T i18nKey="search">#</T>
+              { i18n.t('search') }
             </span>
           )}
         </button>
@@ -181,22 +181,22 @@ export class Search extends Component<any, SearchState> {
           class="custom-select custom-select-sm w-auto"
         >
           <option disabled>
-            <T i18nKey="type">#</T>
+            { i18n.t('type') }
           </option>
           <option value={SearchType.All}>
-            <T i18nKey="all">#</T>
+            { i18n.t('all') }
           </option>
           <option value={SearchType.Comments}>
-            <T i18nKey="comments">#</T>
+            { i18n.t('comments') }
           </option>
           <option value={SearchType.Posts}>
-            <T i18nKey="posts">#</T>
+            { i18n.t('posts') }
           </option>
           <option value={SearchType.Communities}>
-            <T i18nKey="communities">#</T>
+            { i18n.t('communities') }
           </option>
           <option value={SearchType.Users}>
-            <T i18nKey="users">#</T>
+            { i18n.t('users') }
           </option>
         </select>
         <span class="ml-2">
@@ -383,14 +383,14 @@ export class Search extends Component<any, SearchState> {
             class="btn btn-sm btn-secondary mr-1"
             onClick={linkEvent(this, this.prevPage)}
           >
-            <T i18nKey="prev">#</T>
+            { i18n.t('prev') }
           </button>
         )}
         <button
           class="btn btn-sm btn-secondary"
           onClick={linkEvent(this, this.nextPage)}
         >
-          <T i18nKey="next">#</T>
+          { i18n.t('next') }
         </button>
       </div>
     );
@@ -406,7 +406,7 @@ export class Search extends Component<any, SearchState> {
           res.communities.length == 0 &&
           res.users.length == 0 && (
             <span>
-              <T i18nKey="no_results">#</T>
+              { i18n.t('no_results') }
             </span>
           )}
       </div>
index 25cfadef1e5380a81c5d51a5256cd487aa6060a1..029f22b96d1872bf6657c83def5bb7ffad8b67c2 100644 (file)
@@ -62,7 +62,7 @@ export class Setup extends Component<any, State> {
         <div class="row">
           <div class="col-12 offset-lg-3 col-lg-6">
             <h3>
-              <T i18nKey="lemmy_instance_setup">#</T>
+                { i18n.t('lemmy_instance_setup') }
             </h3>
             {!this.state.doneRegisteringUser ? (
               this.registerUser()
@@ -78,17 +78,16 @@ export class Setup extends Component<any, State> {
   registerUser() {
     return (
       <form onSubmit={linkEvent(this, this.handleRegisterSubmit)}>
-        <h5>
-          <T i18nKey="setup_admin">#</T>
-        </h5>
+        <h4>{ i18n.t('setup_admin')}</h4>
         <div class="form-group row">
-          <label class="col-sm-2 col-form-label">
-            <T i18nKey="username">#</T>
+          <label class="col-sm-2 col-form-label" for="username">
+            { i18n.t('username') } 
           </label>
           <div class="col-sm-10">
             <input
               type="text"
               class="form-control"
+              id="username"
               value={this.state.userForm.username}
               onInput={linkEvent(this, this.handleRegisterUsernameChange)}
               required
@@ -99,12 +98,14 @@ export class Setup extends Component<any, State> {
           </div>
         </div>
         <div class="form-group row">
-          <label class="col-sm-2 col-form-label">
-            <T i18nKey="email">#</T>
+          <label class="col-sm-2 col-form-label" for="email">
+            { i18n.t('email') }
           </label>
+
           <div class="col-sm-10">
             <input
               type="email"
+              id="email"
               class="form-control"
               placeholder={i18n.t('optional')}
               value={this.state.userForm.email}
@@ -114,12 +115,13 @@ export class Setup extends Component<any, State> {
           </div>
         </div>
         <div class="form-group row">
-          <label class="col-sm-2 col-form-label">
-            <T i18nKey="password">#</T>
+          <label class="col-sm-2 col-form-label" for="password">
+            { i18n.t('password')}
           </label>
           <div class="col-sm-10">
             <input
               type="password"
+              id="password"
               value={this.state.userForm.password}
               onInput={linkEvent(this, this.handleRegisterPasswordChange)}
               class="form-control"
@@ -128,12 +130,13 @@ export class Setup extends Component<any, State> {
           </div>
         </div>
         <div class="form-group row">
-          <label class="col-sm-2 col-form-label">
-            <T i18nKey="verify_password">#</T>
+          <label class="col-sm-2 col-form-label" for="verify-password">
+            { i18n.t('verify_password') }
           </label>
           <div class="col-sm-10">
             <input
               type="password"
+              id="verify-password"
               value={this.state.userForm.password_verify}
               onInput={linkEvent(this, this.handleRegisterPasswordVerifyChange)}
               class="form-control"
index 089dd5581f96d6ca3486f08058f5a87add7ebc8e..809ec91ed4a06445b8d50926ab5d422ea8954dcb 100644 (file)
@@ -72,7 +72,7 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
               <span>{community.title}</span>
               {community.removed && (
                 <small className="ml-2 text-muted font-italic">
-                  <T i18nKey="removed">#</T>
+                  { i18n.t('removed') }
                 </small>
               )}
               {community.deleted && (
@@ -92,7 +92,7 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
                       class="pointer"
                       onClick={linkEvent(this, this.handleEditClick)}
                     >
-                      <T i18nKey="edit">#</T>
+                      { i18n.t('edit') }
                     </span>
                   </li>
                   {this.amCreator && (
@@ -116,14 +116,14 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
                       class="pointer"
                       onClick={linkEvent(this, this.handleModRemoveShow)}
                     >
-                      <T i18nKey="remove">#</T>
+                      { i18n.t('remove') }
                     </span>
                   ) : (
                     <span
                       class="pointer"
                       onClick={linkEvent(this, this.handleModRemoveSubmit)}
                     >
-                      <T i18nKey="restore">#</T>
+                      { i18n.t('restore') }
                     </span>
                   )}
                 </li>
@@ -132,11 +132,12 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
             {this.state.showRemoveDialog && (
               <form onSubmit={linkEvent(this, this.handleModRemoveSubmit)}>
                 <div class="form-group row">
-                  <label class="col-form-label">
-                    <T i18nKey="reason">#</T>
+                  <label class="col-form-label" for="remove-reason">
+                    { i18n.t('reason') }
                   </label>
                   <input
                     type="text"
+                    id="remove-reason"
                     class="form-control mr-2"
                     placeholder={i18n.t('optional')}
                     value={this.state.removeReason}
@@ -150,7 +151,7 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
                 {/* </div> */}
                 <div class="form-group row">
                   <button type="submit" class="btn btn-secondary">
-                    <T i18nKey="remove_community">#</T>
+                    { i18n.t('remove_community') }
                   </button>
                 </div>
               </form>
@@ -218,7 +219,7 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
                 'no-click'}`}
               to={`/create_post?community=${community.name}`}
             >
-              <T i18nKey="create_a_post">#</T>
+              { i18n.t('create_a_post') }
             </Link>
             <div>
               {community.subscribed ? (
@@ -226,14 +227,14 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
                   class="btn btn-sm btn-secondary btn-block"
                   onClick={linkEvent(community.id, this.handleUnsubscribe)}
                 >
-                  <T i18nKey="unsubscribe">#</T>
+                  { i18n.t('unsubscribe') }
                 </button>
               ) : (
                 <button
                   class="btn btn-sm btn-secondary btn-block"
                   onClick={linkEvent(community.id, this.handleSubscribe)}
                 >
-                  <T i18nKey="subscribe">#</T>
+                  { i18n.t('subscribe') }
                 </button>
               )}
             </div>
index 936a9d53ebc1c4894f203b6155daa17b410ae770..1c4f94ae6c650dcdad24deea9943ac684ef86a94 100644 (file)
@@ -67,12 +67,13 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
             : capitalizeFirstLetter(i18n.t('name'))
         } ${i18n.t('your_site')}`}</h5>
         <div class="form-group row">
-          <label class="col-12 col-form-label">
-            <T i18nKey="name">#</T>
+          <label class="col-12 col-form-label" for="create-site-name">
+            { i18n.t('name') }
           </label>
           <div class="col-12">
             <input
               type="text"
+              id="create-site-name"
               class="form-control"
               value={this.state.siteForm.name}
               onInput={linkEvent(this, this.handleSiteNameChange)}
@@ -83,13 +84,14 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
           </div>
         </div>
         <div class="form-group row">
-          <label class="col-12 col-form-label">
-            <T i18nKey="sidebar">#</T>
+          <label class="col-12 col-form-label" for="create-site-sidebar">
+            { i18n.t('sidebar') }
           </label>
           <div class="col-12">
             <textarea
               id={this.id}
               value={this.state.siteForm.description}
+              id="create-site-sidebar"
               onInput={linkEvent(this, this.handleSiteDescriptionChange)}
               class="form-control"
               rows={3}
@@ -102,12 +104,13 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
             <div class="form-check">
               <input
                 class="form-check-input"
+                id="create-site-downvotes"
                 type="checkbox"
                 checked={this.state.siteForm.enable_downvotes}
                 onChange={linkEvent(this, this.handleSiteEnableDownvotesChange)}
               />
-              <label class="form-check-label">
-                <T i18nKey="enable_downvotes">#</T>
+              <label class="form-check-label" for="create-site-downvotes">
+                { i18n.t('enable_downvotes') }
               </label>
             </div>
           </div>
@@ -117,12 +120,13 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
             <div class="form-check">
               <input
                 class="form-check-input"
+                id="create-site-enable-nsfw"
                 type="checkbox"
                 checked={this.state.siteForm.enable_nsfw}
                 onChange={linkEvent(this, this.handleSiteEnableNsfwChange)}
               />
-              <label class="form-check-label">
-                <T i18nKey="enable_nsfw">#</T>
+              <label class="form-check-label" for="create-site-enable-nsfw">
+                { i18n.t('enable_nsfw') }
               </label>
             </div>
           </div>
@@ -132,6 +136,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
             <div class="form-check">
               <input
                 class="form-check-input"
+                id="create-site-open-registration"
                 type="checkbox"
                 checked={this.state.siteForm.open_registration}
                 onChange={linkEvent(
@@ -139,8 +144,8 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
                   this.handleSiteOpenRegistrationChange
                 )}
               />
-              <label class="form-check-label">
-                <T i18nKey="open_registration">#</T>
+              <label class="form-check-label" for="create-site-open-registration">
+                { i18n.t('open_registration') }
               </label>
             </div>
           </div>
@@ -164,7 +169,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
                 class="btn btn-secondary"
                 onClick={linkEvent(this, this.handleCancel)}
               >
-                <T i18nKey="cancel">#</T>
+                { i18n.t('cancel') }
               </button>
             )}
           </div>
index a3ef0f8d49ef3b37c818498157108d9e86d49aec..fbdaa5942caf16abd1696cea0ba0f20592b4837f 100644 (file)
@@ -1,6 +1,6 @@
 import { Component, linkEvent } from 'inferno';
 import { SortType } from '../interfaces';
-
+import { i18n } from '../i18next';
 import { T } from 'inferno-i18next';
 
 interface SortSelectProps {
@@ -31,31 +31,31 @@ export class SortSelect extends Component<SortSelectProps, SortSelectState> {
         class="custom-select custom-select-sm w-auto"
       >
         <option disabled>
-          <T i18nKey="sort_type">#</T>
+          { i18n.t('sort_type') }
         </option>
         {!this.props.hideHot && (
           <option value={SortType.Hot}>
-            <T i18nKey="hot">#</T>
+            { i18n.t('hot') }
           </option>
         )}
         <option value={SortType.New}>
-          <T i18nKey="new">#</T>
+          { i18n.t('new') }
         </option>
         <option disabled>─────</option>
         <option value={SortType.TopDay}>
-          <T i18nKey="top_day">#</T>
+          { i18n.t('top_day') }
         </option>
         <option value={SortType.TopWeek}>
-          <T i18nKey="week">#</T>
+          { i18n.t('week') }
         </option>
         <option value={SortType.TopMonth}>
-          <T i18nKey="month">#</T>
+          { i18n.t('month') }
         </option>
         <option value={SortType.TopYear}>
-          <T i18nKey="year">#</T>
+          { i18n.t('year') }
         </option>
         <option value={SortType.TopAll}>
-          <T i18nKey="all">#</T>
+          { i18n.t('all') }
         </option>
       </select>
     );
index 5b78e2bdc0821fd08a288fad896c7c7a4cc0e644..dd12914df70718032a4cd2e1abf7525344afb6b2 100644 (file)
@@ -37,7 +37,7 @@ export class Sponsors extends Component<any, any> {
     return (
       <div>
         <h5>
-          <T i18nKey="donate_to_lemmy">#</T>
+          { i18n.t('donate_to_lemmy') }
         </h5>
         <p>
           <T i18nKey="sponsor_message">
@@ -45,7 +45,7 @@ export class Sponsors extends Component<any, any> {
           </T>
         </p>
         <a class="btn btn-secondary" href="https://www.patreon.com/dessalines">
-          <T i18nKey="support_on_patreon">#</T>
+          { i18n.t('support_on_patreon') }
         </a>
       </div>
     );
@@ -54,10 +54,10 @@ export class Sponsors extends Component<any, any> {
     return (
       <div class="container">
         <h5>
-          <T i18nKey="sponsors">#</T>
+          { i18n.t('sponsors') }
         </h5>
         <p>
-          <T i18nKey="general_sponsors">#</T>
+          { i18n.t('general_sponsors') }
         </p>
         <div class="row card-columns">
           {highlighted.map(s => (
@@ -79,14 +79,14 @@ export class Sponsors extends Component<any, any> {
     return (
       <div>
         <h5>
-          <T i18nKey="crypto">#</T>
+          { i18n.t('crypto') }
         </h5>
         <div class="table-responsive">
           <table class="table table-hover text-center">
             <tbody>
               <tr>
                 <td>
-                  <T i18nKey="bitcoin">#</T>
+                  { i18n.t('bitcoin') }
                 </td>
                 <td>
                   <code>1Hefs7miXS5ff5Ck5xvmjKjXf5242KzRtK</code>
@@ -94,7 +94,7 @@ export class Sponsors extends Component<any, any> {
               </tr>
               <tr>
                 <td>
-                  <T i18nKey="ethereum">#</T>
+                  { i18n.t('ethereum') }
                 </td>
                 <td>
                   <code>0x400c96c96acbC6E7B3B43B1dc1BB446540a88A01</code>
@@ -102,7 +102,7 @@ export class Sponsors extends Component<any, any> {
               </tr>
               <tr>
                 <td>
-                  <T i18nKey="monero">#</T>
+                  { i18n.t('monero') }
                 </td>
                 <td>
                   <code>
index 1475de6b265e6b39691968fa2f5eb92154a3ba2c..a2959d7ee99a26c14d0b2257880f0282408bf54c 100644 (file)
@@ -199,11 +199,11 @@ export class User extends Component<any, UserState> {
     return (
       <div class="container">
         {this.state.loading ? (
-          <h5>
+          <p class="text-center">
             <svg class="icon icon-spinner spin">
               <use xlinkHref="#icon-spinner"></use>
             </svg>
-          </h5>
+          </p>
         ) : (
           <div class="row">
             <div class="col-12 col-md-8">
@@ -246,19 +246,19 @@ export class User extends Component<any, UserState> {
           class="custom-select custom-select-sm w-auto"
         >
           <option disabled>
-            <T i18nKey="view">#</T>
+            { i18n.t('view') }
           </option>
           <option value={View.Overview}>
-            <T i18nKey="overview">#</T>
+            { i18n.t('overview') }
           </option>
           <option value={View.Comments}>
-            <T i18nKey="comments">#</T>
+            { i18n.t('comments') }
           </option>
           <option value={View.Posts}>
-            <T i18nKey="posts">#</T>
+            { i18n.t('posts') }
           </option>
           <option value={View.Saved}>
-            <T i18nKey="saved">#</T>
+            { i18n.t('saved') }
           </option>
         </select>
         <span class="ml-2">
@@ -359,7 +359,7 @@ export class User extends Component<any, UserState> {
                 <li className="list-inline-item">{user.name}</li>
                 {user.banned && (
                   <li className="list-inline-item badge badge-danger">
-                    <T i18nKey="banned">#</T>
+                    { i18n.t('banned') }
                   </li>
                 )}
               </ul>
@@ -412,7 +412,7 @@ export class User extends Component<any, UserState> {
                 class="btn btn-block btn-secondary mt-3"
                 onClick={linkEvent(this, this.handleLogoutClick)}
               >
-                <T i18nKey="logout">#</T>
+                { i18n.t('logout') }
               </button>
             ) : (
               <>
@@ -444,12 +444,12 @@ export class User extends Component<any, UserState> {
         <div class="card border-secondary mb-3">
           <div class="card-body">
             <h5>
-              <T i18nKey="settings">#</T>
+              { i18n.t('settings') }
             </h5>
             <form onSubmit={linkEvent(this, this.handleUserSettingsSubmit)}>
               <div class="form-group">
                 <label>
-                  <T i18nKey="avatar">#</T>
+                  { i18n.t('avatar') }
                 </label>
                 <form class="d-inline">
                   <label
@@ -458,7 +458,7 @@ export class User extends Component<any, UserState> {
                   >
                     {!this.state.userSettingsForm.avatar ? (
                       <span class="btn btn-sm btn-secondary">
-                        <T i18nKey="upload_avatar">#</T>
+                        { i18n.t('upload_avatar') }
                       </span>
                     ) : (
                       <img
@@ -482,7 +482,7 @@ export class User extends Component<any, UserState> {
               </div>
               <div class="form-group">
                 <label>
-                  <T i18nKey="language">#</T>
+                  { i18n.t('language') }
                 </label>
                 <select
                   value={this.state.userSettingsForm.lang}
@@ -490,10 +490,10 @@ export class User extends Component<any, UserState> {
                   class="ml-2 custom-select custom-select-sm w-auto"
                 >
                   <option disabled>
-                    <T i18nKey="language">#</T>
+                    { i18n.t('language') }
                   </option>
                   <option value="browser">
-                    <T i18nKey="browser_default">#</T>
+                    { i18n.t('browser_default') }
                   </option>
                   <option disabled>──</option>
                   {languages.map(lang => (
@@ -503,7 +503,7 @@ export class User extends Component<any, UserState> {
               </div>
               <div class="form-group">
                 <label>
-                  <T i18nKey="theme">#</T>
+                  { i18n.t('theme') }
                 </label>
                 <select
                   value={this.state.userSettingsForm.theme}
@@ -511,7 +511,7 @@ export class User extends Component<any, UserState> {
                   class="ml-2 custom-select custom-select-sm w-auto"
                 >
                   <option disabled>
-                    <T i18nKey="theme">#</T>
+                    { i18n.t('theme') }
                   </option>
                   {themes.map(theme => (
                     <option value={theme}>{theme}</option>
@@ -541,12 +541,13 @@ export class User extends Component<any, UserState> {
                 />
               </form>
               <div class="form-group row">
-                <label class="col-lg-3 col-form-label">
-                  <T i18nKey="email">#</T>
+                <label class="col-lg-3 col-form-label" for="user-email">
+                  { i18n.t('email') }
                 </label>
                 <div class="col-lg-9">
                   <input
                     type="email"
+                    id="user-email"
                     class="form-control"
                     placeholder={i18n.t('optional')}
                     value={this.state.userSettingsForm.email}
@@ -579,12 +580,13 @@ export class User extends Component<any, UserState> {
                 </div>
               </div>
               <div class="form-group row">
-                <label class="col-lg-5 col-form-label">
-                  <T i18nKey="new_password">#</T>
+                <label class="col-lg-5 col-form-label" for="user-password">
+                  { i18n.t('new_password') }
                 </label>
                 <div class="col-lg-7">
                   <input
                     type="password"
+                    id="user-password"
                     class="form-control"
                     value={this.state.userSettingsForm.new_password}
                     onInput={linkEvent(
@@ -595,12 +597,13 @@ export class User extends Component<any, UserState> {
                 </div>
               </div>
               <div class="form-group row">
-                <label class="col-lg-5 col-form-label">
-                  <T i18nKey="verify_password">#</T>
+                <label class="col-lg-5 col-form-label" for="user-verify-password">
+                  { i18n.t('verify_password') }
                 </label>
                 <div class="col-lg-7">
                   <input
                     type="password"
+                    id="user-verify-password"
                     class="form-control"
                     value={this.state.userSettingsForm.new_password_verify}
                     onInput={linkEvent(
@@ -611,12 +614,13 @@ export class User extends Component<any, UserState> {
                 </div>
               </div>
               <div class="form-group row">
-                <label class="col-lg-5 col-form-label">
-                  <T i18nKey="old_password">#</T>
+                <label class="col-lg-5 col-form-label" for="user-old-password">
+                  { i18n.t('old_password') }
                 </label>
                 <div class="col-lg-7">
                   <input
                     type="password"
+                    id="user-old-password"
                     class="form-control"
                     value={this.state.userSettingsForm.old_password}
                     onInput={linkEvent(
@@ -631,6 +635,7 @@ export class User extends Component<any, UserState> {
                   <div class="form-check">
                     <input
                       class="form-check-input"
+                      id="user-show-nsfw"
                       type="checkbox"
                       checked={this.state.userSettingsForm.show_nsfw}
                       onChange={linkEvent(
@@ -638,8 +643,8 @@ export class User extends Component<any, UserState> {
                         this.handleUserSettingsShowNsfwChange
                       )}
                     />
-                    <label class="form-check-label">
-                      <T i18nKey="show_nsfw">#</T>
+                    <label class="form-check-label" for="user-show-nsfw">
+                      { i18n.t('show_nsfw') }
                     </label>
                   </div>
                 </div>
@@ -648,6 +653,7 @@ export class User extends Component<any, UserState> {
                 <div class="form-check">
                   <input
                     class="form-check-input"
+                    id="user-show-avatars"
                     type="checkbox"
                     checked={this.state.userSettingsForm.show_avatars}
                     onChange={linkEvent(
@@ -655,8 +661,8 @@ export class User extends Component<any, UserState> {
                       this.handleUserSettingsShowAvatarsChange
                     )}
                   />
-                  <label class="form-check-label">
-                    <T i18nKey="show_avatars">#</T>
+                  <label class="form-check-label" for="user-show-avatars">
+                    { i18n.t('show_avatars') }
                   </label>
                 </div>
               </div>
@@ -664,6 +670,7 @@ export class User extends Component<any, UserState> {
                 <div class="form-check">
                   <input
                     class="form-check-input"
+                    id="user-send-notifications-to-email"
                     type="checkbox"
                     disabled={!this.state.user.email}
                     checked={
@@ -674,8 +681,8 @@ export class User extends Component<any, UserState> {
                       this.handleUserSettingsSendNotificationsToEmailChange
                     )}
                   />
-                  <label class="form-check-label">
-                    <T i18nKey="send_notifications_to_email">#</T>
+                  <label class="form-check-label" for="user-send-notifications-to-email">
+                    { i18n.t('send_notifications_to_email') }
                   </label>
                 </div>
               </div>
@@ -699,12 +706,12 @@ export class User extends Component<any, UserState> {
                     this.handleDeleteAccountShowConfirmToggle
                   )}
                 >
-                  <T i18nKey="delete_account">#</T>
+                  { i18n.t('delete_account') }
                 </button>
                 {this.state.deleteAccountShowConfirm && (
                   <>
                     <div class="my-2 alert alert-danger" role="alert">
-                      <T i18nKey="delete_account_confirm">#</T>
+                      { i18n.t('delete_account_confirm') }
                     </div>
                     <input
                       type="password"
@@ -735,7 +742,7 @@ export class User extends Component<any, UserState> {
                         this.handleDeleteAccountShowConfirmToggle
                       )}
                     >
-                      <T i18nKey="cancel">#</T>
+                      { i18n.t('cancel') }
                     </button>
                   </>
                 )}
@@ -754,7 +761,7 @@ export class User extends Component<any, UserState> {
           <div class="card border-secondary mb-3">
             <div class="card-body">
               <h5>
-                <T i18nKey="moderates">#</T>
+                { i18n.t('moderates') }
               </h5>
               <ul class="list-unstyled mb-0">
                 {this.state.moderates.map(community => (
@@ -779,7 +786,7 @@ export class User extends Component<any, UserState> {
           <div class="card border-secondary mb-3">
             <div class="card-body">
               <h5>
-                <T i18nKey="subscribed">#</T>
+                { i18n.t('subscribed') }
               </h5>
               <ul class="list-unstyled mb-0">
                 {this.state.follows.map(community => (
@@ -812,7 +819,7 @@ export class User extends Component<any, UserState> {
           class="btn btn-sm btn-secondary"
           onClick={linkEvent(this, this.nextPage)}
         >
-          <T i18nKey="next">#</T>
+          { i18n.t('next') }
         </button>
       </div>
     );
index fafec579557211f5d8692f26717749df728b9674..1ecaadaf46d3e40e8ea550282974ad81a929384b 100644 (file)
@@ -15,9 +15,9 @@ export const de = {
     remove_comment: 'Kommentar löschen',
     communities: 'Communities',
     users: 'Benutzer',
-    create_a_community: 'Eine Gemeinschaft anlegen',
-    create_community: 'Gemeinschaft anlegen',
-    remove_community: 'Gemeinschaft entfernen',
+    create_a_community: 'Eine community anlegen',
+    create_community: 'Community anlegen',
+    remove_community: 'Community entfernen',
     subscribed_to_communities: 'Abonnierte <1>communities</1>',
     trending_communities: 'Trending <1>communities</1>',
     list_of_communities: 'Liste von communities',
@@ -36,17 +36,17 @@ export const de = {
     unsticky: 'nicht haftend',
     link: 'link',
     archive_link: 'Archiv-Link',
-    mod: 'Moderator',
-    mods: 'Moderatoren',
+    mod: 'mod',
+    mods: 'mods',
     moderates: 'Moderiert',
     settings: 'Einstellungen',
-    remove_as_mod: 'Als Moderator entfernen',
-    appoint_as_mod: 'Zum Moderator ernennen',
+    remove_as_mod: 'Als mod entfernen',
+    appoint_as_mod: 'Zum mod ernennen',
     modlog: 'Modlog',
-    admin: 'Administrator',
-    admins: 'Administratoren',
-    remove_as_admin: 'Als Administrator entfernen',
-    appoint_as_admin: 'Zum Administrator ernennen',
+    admin: 'admin',
+    admins: 'admins',
+    remove_as_admin: 'Als admin entfernen',
+    appoint_as_admin: 'Zum admin ernennen',
     remove: 'entfernen',
     removed: 'entfernt',
     locked: 'gesperrt',
@@ -66,11 +66,11 @@ export const de = {
     unban_from_site: 'Von der Seite entbannen',
     banned: 'gesperrt',
     save: 'speichern',
-    unsave: 'nicht speichern',
+    unsave: 'unsave',
     create: 'anlegen',
     creator: 'Ersteller',
-    username: 'Benutzername',
-    email_or_username: 'E-mail oder Username',
+    username: 'Username',
+    email_or_username: 'Email oder Username',
     number_of_users: '{{count}} Benutzer',
     number_of_subscribers: '{{count}} Abonnenten',
     number_of_points: '{{count}} Punkte',
@@ -86,7 +86,7 @@ export const de = {
     subscribed: 'Abonniert',
     prev: 'Zurück',
     next: 'Weiter',
-    sidebar: 'Seitenleiste',
+    sidebar: 'Sidebar',
     sort_type: 'Sortieren nach',
     hot: 'Hot',
     new: 'Neu',
@@ -122,22 +122,22 @@ export const de = {
     no_email_setup: "Dieser Server hat E-Mails nicht korrekt eingerichtet.",
     login: 'Einloggen',
     sign_up: 'Registrieren',
-    email: 'E-Mail',
-    optional: 'optional',
+    email: 'Email',
+    optional: 'Optional',
     expires: 'Ablaufdatum',
     language: 'Sprache',
     browser_default: 'Standard-Browser',
     url: 'URL',
     body: 'Text',
     copy_suggested_title: 'Vorgeschlagenen Titel übernehmen: {{title}}',
-    community: 'Gemeinschaft',
-    expand_here: 'hier erweitern',
+    community: 'Community',
+    expand_here: 'Expand here',
     subscribe_to_communities: 'Abonniere ein paar <1>communities</1>.',
     chat: 'Chat',
     recent_comments: 'Neueste Kommentare',
     no_results: 'Keine Ergebnisse.',
-    setup: 'Einrichten',
-    lemmy_instance_setup: 'Lemmy Instanz Einrichten',
+    setup: 'Setup',
+    lemmy_instance_setup: 'Lemmy Instanz Setup',
     setup_admin: 'Seiten Administrator konfigurieren',
     your_site: 'deine Seite',
     modified: 'verändert',
@@ -151,7 +151,7 @@ export const de = {
     support_on_patreon: 'Auf Patreon unterstützen',
     general_sponsors:
       'Allgemeine Sponsoren sind die, die zwischen $10 und $39 zu Lemmy beitragen.',
-    crypto: 'Kryptowährung',
+    crypto: 'Crypto',
     bitcoin: 'Bitcoin',
     ethereum: 'Ethereum',
     monero: 'Monero',
@@ -159,16 +159,16 @@ export const de = {
     joined: 'beigetreten',
     by: 'von',
     to: 'bis',
-    transfer_community: 'Gemeinschaft übertragen',
+    transfer_community: 'Transfer-Community',
     transfer_site: 'Transferseite',
     are_you_sure: 'Bist du sicher?',
     yes: 'Ja',
     no: 'Nein',
     powered_by: 'Bereitgestellt durch',
     landing_0:
-      'Lemmy ist ein <1>Link-Aggregator</1> / Reddit Alternative im <2>Fediverse</2>.<3></3>Es ist selbst-hostbar, hat live-updates von Kommentar-threads und ist winzig (<4>~80kB</4>). Federation in das ActivityPub Netzwerk ist geplant. <5></5>Dies ist eine <6>sehr frühe Beta Version</6>, und viele Features funktionieren zurzeit nicht richtig oder fehlen. <7></7>Schlage neue Features vor oder melde Bugs <8>hier.</8><9></9>Gebaut mit <10>Rust</10>, <11>Actix</11>, <12>Inferno</12>, <13>Typescript</13>.',
+      'Lemmy ist ein <1>Link Aggregator</1> / Reddit Alternative im <2>Fediverse</2>.<3></3>Es ist selbst-hostbar, hat live-updates von Kommentar-threads und ist winzig (<4>~80kB</4>). Federation in das ActivityPub Netzwerk ist geplant. <5></5>Dies ist eine <6>sehr frühe Beta Version</6>, und viele Features funktionieren zurzeit nicht richtig oder fehlen. <7></7>Schlage neue Features vor oder melde Bugs <8>hier.</8><9></9>Gebaut mit <10>Rust</10>, <11>Actix</11>, <12>Inferno</12>, <13>Typescript</13>.',
     not_logged_in: 'Nicht eingeloggt.',
-    community_ban: 'Du wurdest von dieser Gemeinschaft gebannt.',
+    community_ban: 'Du wurdest von dieser Community gebannt.',
     site_ban: 'Du wurdest von dieser Seite gebannt',
     couldnt_create_comment: 'Konnte Kommentar nicht anlegen.',
     couldnt_like_comment: 'Konnte nicht liken.',
@@ -176,14 +176,14 @@ export const de = {
     couldnt_save_comment: 'Konnte Kommentar nicht speichern.',
     no_comment_edit_allowed: 'Keine Erlaubnis Kommentar zu editieren.',
     no_post_edit_allowed: 'Keine Erlaubnis Beitrag zu editieren.',
-    no_community_edit_allowed: 'Keine Erlaubnis Gemeinschaft zu editieren.',
-    couldnt_find_community: 'Konnte Gemeinschaft nicht finden.',
-    couldnt_update_community: 'Konnte Gemeinschaft nicht aktualisieren.',
-    community_already_exists: 'Gemeinschaft existiert bereits.',
+    no_community_edit_allowed: 'Keine Erlaubnis Community zu editieren.',
+    couldnt_find_community: 'Konnte Community nicht finden.',
+    couldnt_update_community: 'Konnte Community nicht aktualisieren.',
+    community_already_exists: 'Community existiert bereits.',
     community_moderator_already_exists:
-      'Gemeinschaft Moderator existiert bereits.',
-    community_follower_already_exists: 'Gemeinschaft Follower existiert bereits.',
-    community_user_already_banned: 'Gemeinschaft Nutzer schon gebannt.',
+      'Community Moderator existiert bereits.',
+    community_follower_already_exists: 'Community Follower existiert bereits.',
+    community_user_already_banned: 'Community Nutzer schon gebannt.',
     couldnt_create_post: 'Konnte Beitrag nicht anlegen.',
     couldnt_like_post: 'Konnte Beitrag nicht liken.',
     couldnt_find_post: 'Konnte Beitrag nicht finden.',
index 90aff0b93573e094113e520c375fbf9ca57f8a2e..ea33c5c98a93cc9014719886108a36080a1bfd49 100644 (file)
@@ -230,5 +230,7 @@ export const en = {
     couldnt_create_private_message: "Couldn't create private message.",
     no_private_message_edit_allowed: 'Not allowed to edit private message.',
     couldnt_update_private_message: "Couldn't update private message.",
+    time: 'Time',
+    action: 'Action'
   },
 };