From 3df34acdcf0407160fc8d55b3c7196e43215e936 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Sun, 26 Jan 2020 12:23:28 -0500 Subject: [PATCH 01/43] Starting to work on websocket scopes. --- ui/src/interfaces.ts | 1 + ui/src/services/UserService.ts | 1 + ui/src/services/WebSocketService.ts | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/ui/src/interfaces.ts b/ui/src/interfaces.ts index cd3961b5f..5022d8176 100644 --- a/ui/src/interfaces.ts +++ b/ui/src/interfaces.ts @@ -41,6 +41,7 @@ export enum UserOperation { CreatePrivateMessage, EditPrivateMessage, GetPrivateMessages, + UserJoin, } export enum CommentSortType { diff --git a/ui/src/services/UserService.ts b/ui/src/services/UserService.ts index 03380e593..0c3325a09 100644 --- a/ui/src/services/UserService.ts +++ b/ui/src/services/UserService.ts @@ -49,6 +49,7 @@ export class UserService { console.log(this.user); } + // TODO find all refs to this, make sure everything is well typed public static get Instance() { return this._instance || (this._instance = new this()); } diff --git a/ui/src/services/WebSocketService.ts b/ui/src/services/WebSocketService.ts index e72a28716..7b338c60a 100644 --- a/ui/src/services/WebSocketService.ts +++ b/ui/src/services/WebSocketService.ts @@ -67,12 +67,19 @@ export class WebSocketService { .subscribe(); console.log(`Connected to ${wsUri}`); + + if (UserService.Instance.user) { + } } public static get Instance() { return this._instance || (this._instance = new this()); } + public userJoin() { + this.wsSendWrapper(UserOperation.ListCategories, undefined); + } + public login(loginForm: LoginForm) { this.subject.next(this.wsSendWrapper(UserOperation.Login, loginForm)); } @@ -125,6 +132,7 @@ export class WebSocketService { this.subject.next(this.wsSendWrapper(UserOperation.CreatePost, postForm)); } + // TODO strictly type these public getPost(postId: number) { let data = { id: postId, auth: UserService.Instance.auth }; this.subject.next(this.wsSendWrapper(UserOperation.GetPost, data)); From 7c0a9121c96b3ae693dc139662caf5edf6fc6abd Mon Sep 17 00:00:00 2001 From: Felix Date: Tue, 28 Jan 2020 17:38:23 +0100 Subject: [PATCH 02/43] Fix Ansible installation, add uninstall playbook --- ansible/lemmy.yml | 15 +++++---- ansible/templates/docker-compose.yml | 35 ++++++++++++++++++++ ansible/uninstall.yml | 48 ++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 ansible/templates/docker-compose.yml create mode 100644 ansible/uninstall.yml diff --git a/ansible/lemmy.yml b/ansible/lemmy.yml index e9ad4ddd8..6ec4f916a 100644 --- a/ansible/lemmy.yml +++ b/ansible/lemmy.yml @@ -29,12 +29,15 @@ - { path: '/lemmy/' } - { path: '/lemmy/volumes/' } - - name: add all template files - template: src={{item.src}} dest={{item.dest}} - with_items: - - { src: '../docker/prod/docker-compose.yml', dest: '/lemmy/docker-compose.yml' } - - { src: 'templates/config.hjson', dest: '/lemmy/lemmy.hjson' } - - { src: 'templates/nginx.conf', dest: '/etc/nginx/sites-enabled/lemmy.conf' } + - block: + - name: add template files + template: src={{item.src}} dest={{item.dest}} mode={{item.mode}} + with_items: + - { src: 'templates/docker-compose.yml', dest: '/lemmy/docker-compose.yml', mode: '0600' } + - { src: 'templates/nginx.conf', dest: '/etc/nginx/sites-enabled/lemmy.conf', mode: '0644' } + + - name: add config file (only during initial setup) + template: src='templates/config.hjson' dest='/lemmy/lemmy.hjson' mode='0600' force='no' owner='1000' group='1000' vars: postgres_password: "{{ lookup('password', 'passwords/{{ inventory_hostname }}/postgres chars=ascii_letters,digits') }}" jwt_password: "{{ lookup('password', 'passwords/{{ inventory_hostname }}/jwt chars=ascii_letters,digits') }}" diff --git a/ansible/templates/docker-compose.yml b/ansible/templates/docker-compose.yml new file mode 100644 index 000000000..96489c70d --- /dev/null +++ b/ansible/templates/docker-compose.yml @@ -0,0 +1,35 @@ +version: '3.3' + +services: + lemmy: + image: dessalines/lemmy:v0.6.5 + ports: + - "127.0.0.1:8536:8536" + restart: always + volumes: + - ./lemmy.hjson:/config/config.hjson:ro + depends_on: + - lemmy_db + - lemmy_pictshare + + lemmy_db: + image: postgres:12-alpine + environment: + - POSTGRES_USER=lemmy + - POSTGRES_PASSWORD={{ postgres_password }} + - POSTGRES_DB=lemmy + volumes: + - lemmy_db:/var/lib/postgresql/data + restart: always + + lemmy_pictshare: + image: shtripok/pictshare:latest + ports: + - "127.0.0.1:8537:80" + volumes: + - lemmy_pictshare:/usr/share/nginx/html/data + restart: always + +volumes: + lemmy_db: + lemmy_pictshare: diff --git a/ansible/uninstall.yml b/ansible/uninstall.yml new file mode 100644 index 000000000..252c5bd1f --- /dev/null +++ b/ansible/uninstall.yml @@ -0,0 +1,48 @@ +--- +- hosts: all + + vars_prompt: + + - name: confirm_uninstall + prompt: "Do you really want to uninstall Lemmy? This will delete all data and can not be reverted [yes/no]" + private: no + + - name: delete_certs + prompt: "Delete certificates? Select 'no' if you want to reinstall Lemmy [yes/no]" + private: no + + tasks: + - name: end play if no confirmation was given + debug: + msg: "Uninstall cancelled, doing nothing" + when: not confirm_uninstall|bool + + - meta: end_play + when: not confirm_uninstall|bool + + - name: stop docker-compose + docker_compose: + project_src: /lemmy/ + state: absent + + - name: delete data + file: path={{item.path}} state=absent + with_items: + - { path: '/lemmy/' } + - { path: '/etc/nginx/sites-enabled/lemmy.conf' } + + - name: Remove a volume + docker_volume: name={{item.name}} state=absent + with_items: + - { name: 'lemmy_lemmy_db' } + - { name: 'lemmy_lemmy_pictshare' } + + - name: delete entire ecloud folder + file: path='/mnt/repo-base/' state=absent + when: delete_certs|bool + + - name: remove certbot cronjob + cron: + name=certbot-renew-lemmy + state=absent + From c09ea38af66e3f3ced9f4872b887258329bb96d0 Mon Sep 17 00:00:00 2001 From: Richie Zhang <12566991+StaticallyTypedRice@users.noreply.github.com> Date: Tue, 28 Jan 2020 21:55:37 -0800 Subject: [PATCH 03/43] Add minor German translations --- ui/src/translations/de.ts | 54 +++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/ui/src/translations/de.ts b/ui/src/translations/de.ts index 1ecaadaf4..8dcf6a85a 100644 --- a/ui/src/translations/de.ts +++ b/ui/src/translations/de.ts @@ -15,9 +15,9 @@ export const de = { remove_comment: 'Kommentar löschen', communities: 'Communities', users: 'Benutzer', - create_a_community: 'Eine community anlegen', - create_community: 'Community anlegen', - remove_community: 'Community entfernen', + create_a_community: 'Eine Gemeinschaft anlegen', + create_community: 'Gemeinschaft anlegen', + remove_community: 'Gemeinschaft entfernen', subscribed_to_communities: 'Abonnierte <1>communities', trending_communities: 'Trending <1>communities', list_of_communities: 'Liste von communities', @@ -36,15 +36,15 @@ export const de = { unsticky: 'nicht haftend', link: 'link', archive_link: 'Archiv-Link', - mod: 'mod', - mods: 'mods', + mod: 'Moderatorin', + mods: 'Moderatoren', moderates: 'Moderiert', settings: 'Einstellungen', remove_as_mod: 'Als mod entfernen', appoint_as_mod: 'Zum mod ernennen', modlog: 'Modlog', - admin: 'admin', - admins: 'admins', + admin: 'Administrator', + admins: 'Administratoren', remove_as_admin: 'Als admin entfernen', appoint_as_admin: 'Zum admin ernennen', remove: 'entfernen', @@ -66,10 +66,10 @@ export const de = { unban_from_site: 'Von der Seite entbannen', banned: 'gesperrt', save: 'speichern', - unsave: 'unsave', + unsave: 'nicht schonen', create: 'anlegen', creator: 'Ersteller', - username: 'Username', + username: 'Benutzername', email_or_username: 'Email oder Username', number_of_users: '{{count}} Benutzer', number_of_subscribers: '{{count}} Abonnenten', @@ -86,7 +86,7 @@ export const de = { subscribed: 'Abonniert', prev: 'Zurück', next: 'Weiter', - sidebar: 'Sidebar', + sidebar: 'Seitenleiste', 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: 'Email', - optional: 'Optional', + email: 'E-Mail', + optional: 'Fakultativ', expires: 'Ablaufdatum', language: 'Sprache', browser_default: 'Standard-Browser', url: 'URL', body: 'Text', copy_suggested_title: 'Vorgeschlagenen Titel übernehmen: {{title}}', - community: 'Community', - expand_here: 'Expand here', + community: 'Gemeinschaft', + expand_here: 'Erweitern hier', subscribe_to_communities: 'Abonniere ein paar <1>communities.', chat: 'Chat', recent_comments: 'Neueste Kommentare', no_results: 'Keine Ergebnisse.', - setup: 'Setup', - lemmy_instance_setup: 'Lemmy Instanz Setup', + setup: 'Einrichten', + lemmy_instance_setup: 'Lemmy Instanz Einrichten', 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: 'Crypto', + crypto: 'Kryptographie', bitcoin: 'Bitcoin', ethereum: 'Ethereum', monero: 'Monero', @@ -159,16 +159,16 @@ export const de = { joined: 'beigetreten', by: 'von', to: 'bis', - transfer_community: 'Transfer-Community', + transfer_community: 'übertragen-Gemeinschaft', 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 / Reddit Alternative im <2>Fediverse.<3>Es ist selbst-hostbar, hat live-updates von Kommentar-threads und ist winzig (<4>~80kB). Federation in das ActivityPub Netzwerk ist geplant. <5>Dies ist eine <6>sehr frühe Beta Version, und viele Features funktionieren zurzeit nicht richtig oder fehlen. <7>Schlage neue Features vor oder melde Bugs <8>hier.<9>Gebaut mit <10>Rust, <11>Actix, <12>Inferno, <13>Typescript.', + 'Lemmy ist ein <1>Link-Aggregator / Reddit Alternative im <2>Fediverse.<3>Es ist selbst-hostbar, hat live-updates von Kommentar-threads und ist winzig (<4>~80kB). Federation in das ActivityPub Netzwerk ist geplant. <5>Dies ist eine <6>sehr frühe Beta Version, und viele Features funktionieren zurzeit nicht richtig oder fehlen. <7>Schlage neue Features vor oder melde Bugs <8>hier.<9>Gebaut mit <10>Rust, <11>Actix, <12>Inferno, <13>Typescript.', not_logged_in: 'Nicht eingeloggt.', - community_ban: 'Du wurdest von dieser Community gebannt.', + community_ban: 'Du wurdest von dieser Gemeinschaft 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 Community zu editieren.', - couldnt_find_community: 'Konnte Community nicht finden.', - couldnt_update_community: 'Konnte Community nicht aktualisieren.', - community_already_exists: 'Community existiert bereits.', + 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.', community_moderator_already_exists: - 'Community Moderator existiert bereits.', - community_follower_already_exists: 'Community Follower existiert bereits.', - community_user_already_banned: 'Community Nutzer schon gebannt.', + 'Gemeinschaft Moderator existiert bereits.', + community_follower_already_exists: 'Gemeinschaft Follower existiert bereits.', + community_user_already_banned: 'Gemeinschaft Nutzer schon gebannt.', couldnt_create_post: 'Konnte Beitrag nicht anlegen.', couldnt_like_post: 'Konnte Beitrag nicht liken.', couldnt_find_post: 'Konnte Beitrag nicht finden.', From 3e36fcff984c1f3c56dff91f3c46b574d4569baf Mon Sep 17 00:00:00 2001 From: Richie Zhang <12566991+StaticallyTypedRice@users.noreply.github.com> Date: Tue, 28 Jan 2020 22:06:37 -0800 Subject: [PATCH 04/43] Add minor Chinese translations --- ui/src/translations/zh.ts | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/ui/src/translations/zh.ts b/ui/src/translations/zh.ts index 7beaf83ec..52fdfabfd 100644 --- a/ui/src/translations/zh.ts +++ b/ui/src/translations/zh.ts @@ -25,14 +25,14 @@ export const zh = { unlock: '解锁', lock: '加锁', link: '链接', - mod: 'mod', - mods: 'mods', - moderates: 'Moderates', - remove_as_mod: 'remove as mod', - appoint_as_mod: 'appoint as mod', - modlog: 'Modlog', - admin: 'admin', - admins: 'admins', + mod: '监管人', + mods: '监管人', + moderates: '监管', + remove_as_mod: '添加监管人', + appoint_as_mod: '移除监管人', + modlog: '监管记录', + admin: '管理权限', + admins: '管理权限', remove_as_admin: '移除管理权限', appoint_as_admin: '添加管理权限', remove: '移除', @@ -77,7 +77,7 @@ export const zh = { year: '年', all: '所有', top: '最热', - api: 'API', + api: '应用程式介面', inbox: '收件箱', inbox_for: '<1>{{user}} 收件箱', mark_all_as_read: '标记所有已读', @@ -98,7 +98,7 @@ export const zh = { email: '邮箱', optional: '选项', expires: '过期', - url: 'URL', + url: '网址', body: '内容', copy_suggested_title: '复制建议的标题: {{title}}', community: '节点', @@ -111,11 +111,11 @@ export const zh = { setup_admin: '设置管理员', your_site: '你的站点', modified: '修改', - sponsors: 'Sponsors', - sponsors_of_lemmy: 'Sponsors of Lemmy', + sponsors: '发起人', + sponsors_of_lemmy: 'Lemmy 的发起人', sponsor_message: 'Lemmy is free, <1>open-source software, meaning no advertising, monetizing, or venture capital, ever. Your donations directly support full-time development of the project. Thank you to the following people:', - support_on_patreon: 'Support on Patreon', + support_on_patreon: '在 Patreon 赞助', general_sponsors: 'General Sponsors are those that pledged $10 to $39 to Lemmy.', crypto: '加密', @@ -139,8 +139,8 @@ export const zh = { couldnt_find_community: '不能找到节点.', couldnt_update_community: '不能更新节点.', community_already_exists: '节点已存在.', - community_moderator_already_exists: '节点 moderator 已存在.', - community_follower_already_exists: '节点 follower 已存在.', + community_moderator_already_exists: '节点监管人已存在.', + community_follower_already_exists: '节点追随者已存在.', community_user_already_banned: '节点用户已禁止.', couldnt_create_post: '不能创建帖子.', couldnt_like_post: '不能收藏帖子.', From 68496128c591ca8102f648a6422fdee66895c283 Mon Sep 17 00:00:00 2001 From: Mostafa Ahangarha Date: Wed, 29 Jan 2020 20:37:59 +0430 Subject: [PATCH 05/43] Remove word repeattion --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0e52f0d35..4cc00c139 100644 --- a/README.md +++ b/README.md @@ -159,7 +159,7 @@ Lemmy is free, open-source software, meaning no advertising, monetizing, or vent ## Translations -If you'd like to add translations, take a look a look at the [English translation file](ui/src/translations/en.ts). +If you'd like to add translations, take a look at the [English translation file](ui/src/translations/en.ts). - Languages supported: Catalan, (`ca`), English (`en`), Chinese (`zh`), Dutch (`nl`), Esperanto (`eo`), Finnish (`fi`), French (`fr`), Spanish (`es`), Swedish (`sv`), German (`de`), Russian (`ru`), Italian (`it`). From 2aab6f02e7c3e2ceb0d0b758d0bb0fb0f9502ea1 Mon Sep 17 00:00:00 2001 From: Mostafa Ahangarha Date: Wed, 29 Jan 2020 21:25:34 +0430 Subject: [PATCH 06/43] initial Persian translation --- ui/src/translations/fa.ts | 219 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 ui/src/translations/fa.ts diff --git a/ui/src/translations/fa.ts b/ui/src/translations/fa.ts new file mode 100644 index 000000000..434f7b514 --- /dev/null +++ b/ui/src/translations/fa.ts @@ -0,0 +1,219 @@ +export const fa = { + translation: { + post: 'مطلب', + remove_post: 'حذف مطلب', + no_posts: 'بدون مطلب.', + create_a_post: 'ایجاد یک مطلب', + create_post: 'ایجاد مطلب', + number_of_posts: '{{count}} مطلب', + posts: 'مطالب', + related_posts: 'این مطالب ممکن است مرتبط باشند', + cross_posts: 'این پیوند در اینجا هم منتشر شده:', + cross_post: 'cross-post', + comments: 'نظرات', + number_of_comments: '{{count}} نظر', + remove_comment: 'حذف نظر', + communities: 'جوامع', + users: 'کاربران', + create_a_community: 'ایجاد یک جامعه جدید', + create_community: 'ایجاد جامعه', + remove_community: 'حذف جامعه', + subscribed_to_communities: 'Subscribed to <1>communities', + trending_communities: 'Trending <1>communities', + list_of_communities: 'فهرست جوامع', + number_of_communities: '{{count}} جامعه', + community_reqs: 'حروف کوچک, زیرخط, و بدون فاصله.', + edit: 'ویرایش', + reply: 'پاسخ', + cancel: 'لغو', + preview: 'پیش‌نمایش', + upload_image: 'بارگذاری تصویر', + avatar: 'آواتار', + upload_avatar: 'بارگذاری آواتار', + show_avatars: 'نمایش آواتارها', + formatting_help: 'راهنمای قالب‌بندی', + view_source: 'نمایش منبع', + unlock: 'بازکردن قفل', + lock: 'قفل کردن', + sticky: 'چسبان', + unsticky: 'غیرچسبان', + link: 'پیوند', + archive_link: 'بایگاهی پیوند', + mod: 'mod', + mods: 'mods', + moderates: 'Moderates', + settings: 'تنظیمات', + remove_as_mod: 'remove as mod', + appoint_as_mod: 'appoint as mod', + modlog: 'Modlog', + admin: 'مدیر', + admins: 'مدیران', + remove_as_admin: 'حذف به عنوان مدیر', + appoint_as_admin: 'انتصاب به عنوان مدیر', + remove: 'حذف', + removed: 'حذف شد', + locked: 'قفل شد', + stickied: 'stickied', + reason: 'دلیل', + mark_as_read: 'علامت‌گذاری به عنوان خوانده شده', + mark_as_unread: 'علامت‌گذاری به عنوان خوانده نشده', + delete: 'پاک کردن', + deleted: 'پاک شد', + delete_account: 'پاک کردن حساب', + delete_account_confirm: + 'هشدار: این کنش، تمام اطلاعات شما را برای همیشه پاک می‌کند. برای تایید، گذرواژه خود را وارد کنید.', + restore: 'بازگردانی', + ban: 'ban', + ban_from_site: 'ban from site', + unban: 'unban', + unban_from_site: 'unban from site', + banned: 'banned', + save: 'ذخیره', + unsave: 'عدم ذخیره', + create: 'ایجاد', + creator: 'سازنده', + username: 'نام‌کاربری', + email_or_username: 'رایانامه یا نام‌کاربری', + number_of_users: '{{count}} کاربر', + number_of_subscribers: '{{count}} Subscribers', + number_of_points: '{{count}} امتیاز', + number_online: '{{count}} کاربر برخط', + name: 'نام', + title: 'عنوان', + category: 'دسته‌بندی', + subscribers: 'Subscribers', + both: 'Both', + saved: 'Saved', + unsubscribe: 'Unsubscribe', + subscribe: 'Subscribe', + subscribed: 'Subscribed', + prev: 'پیش', + next: 'بعد', + sidebar: 'نوار کناری', + sort_type: 'نوع ترتیب', + hot: 'داغ', + new: 'تازه', + top_day: 'بهترین‌های روز', + week: 'هفته', + month: 'ماه', + year: 'سال', + all: 'همه', + top: 'بالاترین', + api: 'API', + docs: 'Docs', + inbox: 'Inbox', + inbox_for: 'Inbox for <1>{{user}}', + mark_all_as_read: 'علامت زدن همه به عنوان خوانده شده', + type: 'نوع', + unread: 'خوانده‌نشده', + replies: 'پاسخ‌ها', + mentions: 'اشاره‌ها', + reply_sent: 'پاسخ فرستاده شد', + search: 'جستجو', + overview: 'دید کلی', + view: 'نما', + logout: 'خروج', + login_sign_up: 'ورود / نام‌نویسی', + login: 'ورود', + sign_up: 'نام‌نویسی', + notifications_error: + 'Desktop notifications not available in your browser. Try Firefox or Chrome.', + unread_messages: 'پیام‌های خوانده نشده', + password: 'گذرواژه', + verify_password: 'تایید گذرواژه', + old_password: 'پسورد پیشین', + forgot_password: 'گذرواژه را فراموش کرده‌ام', + reset_password_mail_sent: 'رایانامه‌ای برای بازنشانی گذرواژه فرستاده شد.', + password_change: 'تغییر گذرواژه', + new_password: 'گذرواژه جدید', + no_email_setup: "This server hasn't correctly set up email.", + email: 'رایانامه', + send_notifications_to_email: 'فرستادن اعلانات به رایانامه', + optional: 'انتخابی', + expires: 'منقضی شود', + language: 'زبان', + browser_default: 'پیش‌فرض مرورگر', + downvotes_disabled: 'رای پایین غیرفعال است', + enable_downvotes: 'فعال‌سازی رای پایین', + open_registration: 'باز کردن نام‌نویسی', + registration_closed: 'نام‌نویسی بسته است', + enable_nsfw: 'فعال‌سازی NSFW', + url: 'URL', + body: 'Body', + copy_suggested_title: 'copy suggested title: {{title}}', + community: 'Community', + expand_here: 'Expand here', + subscribe_to_communities: 'Subscribe to some <1>communities.', + chat: 'گپ', + recent_comments: 'نظرات اخیر', + no_results: 'بدون نتیجه.', + setup: 'نصب', + lemmy_instance_setup: 'نصب نمونهٔ لمی', + setup_admin: 'نصب مدیریت پایگاه', + your_site: 'پایگاه شما', + modified: 'تغییر یافت', + nsfw: 'NSFW', + show_nsfw: 'نمایش محتوای NSFW', + theme: 'Theme', + sponsors: 'حامیان', + sponsors_of_lemmy: 'حامیان لمی', + sponsor_message: + 'Lemmy is free, <1>open-source software, meaning no advertising, monetizing, or venture capital, ever. Your donations directly support full-time development of the project. Thank you to the following people:', + support_on_patreon: 'حمایت روی Patreon', + donate_to_lemmy: 'اعطای اعانه به لمی', + donate: 'اعانه', + general_sponsors: + 'General Sponsors are those that pledged $10 to $39 to Lemmy.', + crypto: 'رمزارز', + bitcoin: 'بیت‌کوین', + ethereum: 'اتریوم', + monero: 'مونرو', + code: 'کد', + joined: 'Joined', + by: 'by', + to: 'to', + transfer_community: 'انتقال جامعه', + transfer_site: 'انتقال پایگاه', + are_you_sure: 'مطمئنید؟', + yes: 'بله', + no: 'خیر', + powered_by: 'نیرو گرفته از', + landing_0: + "Lemmy is a <1>link aggregator / reddit alternative, intended to work in the <2>fediverse.<3>It's self-hostable, has live-updating comment threads, and is tiny (<4>~80kB). Federation into the ActivityPub network is on the roadmap. <5>This is a <6>very early beta version, and a lot of features are currently broken or missing. <7>Suggest new features or report bugs <8>here.<9>Made with <10>Rust, <11>Actix, <12>Inferno, <13>Typescript.", + not_logged_in: 'وارد نشده‌اید.', + community_ban: 'فعالیت شما در این جامعه ممنوع شده است.', + site_ban: 'فعالیت شما در این پایگاه ممنوع شده است', + couldnt_create_comment: "ناتوانی در ایجاد نظر.", + couldnt_like_comment: "ناتوانی در پسنیدن نظر.", + couldnt_update_comment: "ناتوانی در به‌روزرسانی نظر.", + couldnt_save_comment: "ناتوانی در ذخیره نظر.", + no_comment_edit_allowed: 'مجاز به ویرایش نظر نیستید.', + no_post_edit_allowed: 'مجاز به ویرایش مطلب نیستید.', + no_community_edit_allowed: 'مجاز به ویرایش جامعه نیستید.', + couldnt_find_community: "ناتوانی در یافتن جامعه.", + couldnt_update_community: "ناتوانی در به‌روزرسانی جامعه.", + community_already_exists: 'این جامعه از قبل وجود داشته است.', + community_moderator_already_exists: 'Community moderator already exists.', + community_follower_already_exists: 'Community follower already exists.', + community_user_already_banned: 'Community user already banned.', + couldnt_create_post: "ناتوانی در ایجاد مطلب.", + couldnt_like_post: "ناتوانی در پسندیدن مطلب.", + couldnt_find_post: "ناتوانی در یافتن مطلب.", + couldnt_get_posts: "ناتوانی در دریافت مطالب", + couldnt_update_post: "ناتوای در به‌روزرسانی مطلب", + couldnt_save_post: "ناتوانی در ذخیره مطلب.", + no_slurs: 'No slurs.', + not_an_admin: 'مدیر نیستید.', + site_already_exists: 'این پایگاه از قبل وجود داشته است.', + couldnt_update_site: "ناتوانی در به‌روزرسانی پایگاه.", + couldnt_find_that_username_or_email: + "ناتوانی در یافتن این نام کاربری یا رایانامه.", + password_incorrect: 'گذرواژه نادرست.', + passwords_dont_match: 'گذرواژه‌ها با هم منطبق نیستند.', + admin_already_created: "Sorry, there's already an admin.", + user_already_exists: 'این کاربر از قبل وجود دارد.', + email_already_exists: 'این رایانامه از قبل وجود دارد.', + couldnt_update_user: "ناتوانی در به‌روزرسانی کاربر.", + system_err_login: 'خطای سامانه. سعی کنید خارج شده و دوباره وارد شوید.', + }, +}; From ca9eaade7d5fe433d42114c9f79ed905a89f018f Mon Sep 17 00:00:00 2001 From: Richie Zhang <12566991+StaticallyTypedRice@users.noreply.github.com> Date: Wed, 29 Jan 2020 12:29:05 -0800 Subject: [PATCH 07/43] Fix minor German translations --- ui/src/translations/de.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/ui/src/translations/de.ts b/ui/src/translations/de.ts index 8dcf6a85a..1a6dee4cb 100644 --- a/ui/src/translations/de.ts +++ b/ui/src/translations/de.ts @@ -36,17 +36,17 @@ export const de = { unsticky: 'nicht haftend', link: 'link', archive_link: 'Archiv-Link', - mod: 'Moderatorin', + mod: 'Moderator', mods: 'Moderatoren', moderates: 'Moderiert', settings: 'Einstellungen', - remove_as_mod: 'Als mod entfernen', - appoint_as_mod: 'Zum mod ernennen', + remove_as_mod: 'Als Moderator entfernen', + appoint_as_mod: 'Zum Moderator ernennen', modlog: 'Modlog', admin: 'Administrator', admins: 'Administratoren', - remove_as_admin: 'Als admin entfernen', - appoint_as_admin: 'Zum admin ernennen', + remove_as_admin: 'Als Administrator entfernen', + appoint_as_admin: 'Zum Administrator 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 schonen', + unsave: 'rückgängig schonen', create: 'anlegen', creator: 'Ersteller', username: 'Benutzername', - email_or_username: 'Email oder Username', + email_or_username: 'E-mail oder Username', number_of_users: '{{count}} Benutzer', number_of_subscribers: '{{count}} Abonnenten', number_of_points: '{{count}} Punkte', @@ -123,7 +123,7 @@ export const de = { login: 'Einloggen', sign_up: 'Registrieren', email: 'E-Mail', - optional: 'Fakultativ', + optional: 'optional', expires: 'Ablaufdatum', language: 'Sprache', browser_default: 'Standard-Browser', @@ -131,7 +131,7 @@ export const de = { body: 'Text', copy_suggested_title: 'Vorgeschlagenen Titel übernehmen: {{title}}', community: 'Gemeinschaft', - expand_here: 'Erweitern hier', + expand_here: 'hier erweitern', subscribe_to_communities: 'Abonniere ein paar <1>communities.', chat: 'Chat', recent_comments: 'Neueste Kommentare', @@ -159,7 +159,7 @@ export const de = { joined: 'beigetreten', by: 'von', to: 'bis', - transfer_community: 'übertragen-Gemeinschaft', + transfer_community: 'Gemeinschaft übertragen', transfer_site: 'Transferseite', are_you_sure: 'Bist du sicher?', yes: 'Ja', From 5060542a01e02ae1021ee3615bc5c125288a014c Mon Sep 17 00:00:00 2001 From: Richie Zhang <12566991+StaticallyTypedRice@users.noreply.github.com> Date: Wed, 29 Jan 2020 12:57:40 -0800 Subject: [PATCH 08/43] Fix the German translation for "unsave" --- ui/src/translations/de.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/translations/de.ts b/ui/src/translations/de.ts index 1a6dee4cb..ec55394c8 100644 --- a/ui/src/translations/de.ts +++ b/ui/src/translations/de.ts @@ -66,7 +66,7 @@ export const de = { unban_from_site: 'Von der Seite entbannen', banned: 'gesperrt', save: 'speichern', - unsave: 'rückgängig schonen', + unsave: 'rückgängig speichern', create: 'anlegen', creator: 'Ersteller', username: 'Benutzername', From e370475f50c89a41a2d976f77f56569efd5f35bb Mon Sep 17 00:00:00 2001 From: Richie Zhang <12566991+StaticallyTypedRice@users.noreply.github.com> Date: Wed, 29 Jan 2020 13:25:19 -0800 Subject: [PATCH 09/43] =?UTF-8?q?Use=20translation=20"r=C3=BCckg=C3=A4ngig?= =?UTF-8?q?=20machen=20speichern"=20for=20"unsave"=20in=20German.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/src/translations/de.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/translations/de.ts b/ui/src/translations/de.ts index ec55394c8..9b2b6fb13 100644 --- a/ui/src/translations/de.ts +++ b/ui/src/translations/de.ts @@ -66,7 +66,7 @@ export const de = { unban_from_site: 'Von der Seite entbannen', banned: 'gesperrt', save: 'speichern', - unsave: 'rückgängig speichern', + unsave: 'rückgängig machen speichern', create: 'anlegen', creator: 'Ersteller', username: 'Benutzername', From 213ed9b4b30789e353b66fe015d465a404955f61 Mon Sep 17 00:00:00 2001 From: Richie Zhang <12566991+StaticallyTypedRice@users.noreply.github.com> Date: Wed, 29 Jan 2020 15:57:32 -0800 Subject: [PATCH 10/43] Use "nicht speichern" for "unsave" in German. --- ui/src/translations/de.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/translations/de.ts b/ui/src/translations/de.ts index 9b2b6fb13..30b53c79f 100644 --- a/ui/src/translations/de.ts +++ b/ui/src/translations/de.ts @@ -66,7 +66,7 @@ export const de = { unban_from_site: 'Von der Seite entbannen', banned: 'gesperrt', save: 'speichern', - unsave: 'rückgängig machen speichern', + unsave: 'nicht speichern', create: 'anlegen', creator: 'Ersteller', username: 'Benutzername', From dd4f96673f13f252fc640999c508ee705144f0e8 Mon Sep 17 00:00:00 2001 From: Richie Zhang <12566991+StaticallyTypedRice@users.noreply.github.com> Date: Wed, 29 Jan 2020 16:30:48 -0800 Subject: [PATCH 11/43] =?UTF-8?q?Use=20"Kryptow=C3=A4hrung"=20for=20"crypt?= =?UTF-8?q?o"=20in=20German.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/src/translations/de.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/translations/de.ts b/ui/src/translations/de.ts index 30b53c79f..fafec5795 100644 --- a/ui/src/translations/de.ts +++ b/ui/src/translations/de.ts @@ -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: 'Kryptographie', + crypto: 'Kryptowährung', bitcoin: 'Bitcoin', ethereum: 'Ethereum', monero: 'Monero', From a313e7fb1b7ba40c366a0dda9da0febc8a973d03 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Wed, 29 Jan 2020 20:35:41 -0500 Subject: [PATCH 12/43] Removing english placeholders for Farsi. --- README.md | 3 +- ui/src/i18next.ts | 2 + ui/src/translations/fa.ts | 80 ++++++++------------------------------- ui/src/utils.ts | 4 ++ ui/translation_report.ts | 2 + 5 files changed, 25 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index 0e52f0d35..e85171e02 100644 --- a/README.md +++ b/README.md @@ -161,7 +161,7 @@ Lemmy is free, open-source software, meaning no advertising, monetizing, or vent If you'd like to add translations, take a look a look at the [English translation file](ui/src/translations/en.ts). -- Languages supported: Catalan, (`ca`), English (`en`), Chinese (`zh`), Dutch (`nl`), Esperanto (`eo`), Finnish (`fi`), French (`fr`), Spanish (`es`), Swedish (`sv`), German (`de`), Russian (`ru`), Italian (`it`). +- Languages supported: Catalan, (`ca`), Farsi (`fa`), English (`en`), Chinese (`zh`), Dutch (`nl`), Esperanto (`eo`), Finnish (`fi`), French (`fr`), Spanish (`es`), Swedish (`sv`), German (`de`), Russian (`ru`), Italian (`it`). @@ -169,6 +169,7 @@ lang | done | missing ---- | ---- | ------- ca | 100% | old de | 87% | create_private_message,send_secure_message,send_message,message,avatar,upload_avatar,show_avatars,old,docs,message_sent,messages,old_password,matrix_user_id,private_message_disclaimer,send_notifications_to_email,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,donate_to_lemmy,donate,from,logged_in,email_already_exists,couldnt_create_private_message,no_private_message_edit_allowed,couldnt_update_private_message +fa | 73% | cross_post,subscribed_to_communities,trending_communities,create_private_message,send_secure_message,send_message,message,mod,mods,moderates,remove_as_mod,appoint_as_mod,modlog,stickied,ban,ban_from_site,unban,unban_from_site,banned,number_of_subscribers,subscribers,both,saved,unsubscribe,subscribe,subscribed,old,api,docs,inbox,inbox_for,message_sent,notifications_error,messages,no_email_setup,matrix_user_id,private_message_disclaimer,url,body,copy_suggested_title,community,expand_here,subscribe_to_communities,theme,sponsor_message,general_sponsors,joined,by,to,from,landing_0,logged_in,community_moderator_already_exists,community_follower_already_exists,community_user_already_banned,no_slurs,admin_already_created,couldnt_create_private_message,no_private_message_edit_allowed,couldnt_update_private_message eo | 75% | number_of_communities,create_private_message,send_secure_message,send_message,message,preview,upload_image,avatar,upload_avatar,show_avatars,formatting_help,view_source,sticky,unsticky,archive_link,stickied,delete_account,delete_account_confirm,banned,creator,number_online,old,docs,replies,mentions,message_sent,messages,old_password,forgot_password,reset_password_mail_sent,password_change,new_password,no_email_setup,matrix_user_id,private_message_disclaimer,send_notifications_to_email,language,browser_default,downvotes_disabled,enable_downvotes,open_registration,registration_closed,enable_nsfw,theme,donate_to_lemmy,donate,from,are_you_sure,yes,no,logged_in,email_already_exists,couldnt_create_private_message,no_private_message_edit_allowed,couldnt_update_private_message es | 100% | old fi | 100% | old diff --git a/ui/src/i18next.ts b/ui/src/i18next.ts index 51e7e3a3e..0d3ab177a 100644 --- a/ui/src/i18next.ts +++ b/ui/src/i18next.ts @@ -12,6 +12,7 @@ import { nl } from './translations/nl'; import { it } from './translations/it'; import { fi } from './translations/fi'; import { ca } from './translations/ca'; +import { fa } from './translations/fa'; // https://github.com/nimbusec-oss/inferno-i18next/blob/master/tests/T.test.js#L66 const resources = { @@ -27,6 +28,7 @@ const resources = { it, fi, ca, + fa, }; function format(value: any, format: any, lng: any): any { diff --git a/ui/src/translations/fa.ts b/ui/src/translations/fa.ts index 434f7b514..c06045c69 100644 --- a/ui/src/translations/fa.ts +++ b/ui/src/translations/fa.ts @@ -9,7 +9,6 @@ export const fa = { posts: 'مطالب', related_posts: 'این مطالب ممکن است مرتبط باشند', cross_posts: 'این پیوند در اینجا هم منتشر شده:', - cross_post: 'cross-post', comments: 'نظرات', number_of_comments: '{{count}} نظر', remove_comment: 'حذف نظر', @@ -18,8 +17,6 @@ export const fa = { create_a_community: 'ایجاد یک جامعه جدید', create_community: 'ایجاد جامعه', remove_community: 'حذف جامعه', - subscribed_to_communities: 'Subscribed to <1>communities', - trending_communities: 'Trending <1>communities', list_of_communities: 'فهرست جوامع', number_of_communities: '{{count}} جامعه', community_reqs: 'حروف کوچک, زیرخط, و بدون فاصله.', @@ -39,13 +36,7 @@ export const fa = { unsticky: 'غیرچسبان', link: 'پیوند', archive_link: 'بایگاهی پیوند', - mod: 'mod', - mods: 'mods', - moderates: 'Moderates', settings: 'تنظیمات', - remove_as_mod: 'remove as mod', - appoint_as_mod: 'appoint as mod', - modlog: 'Modlog', admin: 'مدیر', admins: 'مدیران', remove_as_admin: 'حذف به عنوان مدیر', @@ -53,7 +44,6 @@ export const fa = { remove: 'حذف', removed: 'حذف شد', locked: 'قفل شد', - stickied: 'stickied', reason: 'دلیل', mark_as_read: 'علامت‌گذاری به عنوان خوانده شده', mark_as_unread: 'علامت‌گذاری به عنوان خوانده نشده', @@ -63,11 +53,6 @@ export const fa = { delete_account_confirm: 'هشدار: این کنش، تمام اطلاعات شما را برای همیشه پاک می‌کند. برای تایید، گذرواژه خود را وارد کنید.', restore: 'بازگردانی', - ban: 'ban', - ban_from_site: 'ban from site', - unban: 'unban', - unban_from_site: 'unban from site', - banned: 'banned', save: 'ذخیره', unsave: 'عدم ذخیره', create: 'ایجاد', @@ -75,18 +60,11 @@ export const fa = { username: 'نام‌کاربری', email_or_username: 'رایانامه یا نام‌کاربری', number_of_users: '{{count}} کاربر', - number_of_subscribers: '{{count}} Subscribers', number_of_points: '{{count}} امتیاز', number_online: '{{count}} کاربر برخط', name: 'نام', title: 'عنوان', category: 'دسته‌بندی', - subscribers: 'Subscribers', - both: 'Both', - saved: 'Saved', - unsubscribe: 'Unsubscribe', - subscribe: 'Subscribe', - subscribed: 'Subscribed', prev: 'پیش', next: 'بعد', sidebar: 'نوار کناری', @@ -99,10 +77,6 @@ export const fa = { year: 'سال', all: 'همه', top: 'بالاترین', - api: 'API', - docs: 'Docs', - inbox: 'Inbox', - inbox_for: 'Inbox for <1>{{user}}', mark_all_as_read: 'علامت زدن همه به عنوان خوانده شده', type: 'نوع', unread: 'خوانده‌نشده', @@ -116,8 +90,6 @@ export const fa = { login_sign_up: 'ورود / نام‌نویسی', login: 'ورود', sign_up: 'نام‌نویسی', - notifications_error: - 'Desktop notifications not available in your browser. Try Firefox or Chrome.', unread_messages: 'پیام‌های خوانده نشده', password: 'گذرواژه', verify_password: 'تایید گذرواژه', @@ -126,7 +98,6 @@ export const fa = { reset_password_mail_sent: 'رایانامه‌ای برای بازنشانی گذرواژه فرستاده شد.', password_change: 'تغییر گذرواژه', new_password: 'گذرواژه جدید', - no_email_setup: "This server hasn't correctly set up email.", email: 'رایانامه', send_notifications_to_email: 'فرستادن اعلانات به رایانامه', optional: 'انتخابی', @@ -138,12 +109,6 @@ export const fa = { open_registration: 'باز کردن نام‌نویسی', registration_closed: 'نام‌نویسی بسته است', enable_nsfw: 'فعال‌سازی NSFW', - url: 'URL', - body: 'Body', - copy_suggested_title: 'copy suggested title: {{title}}', - community: 'Community', - expand_here: 'Expand here', - subscribe_to_communities: 'Subscribe to some <1>communities.', chat: 'گپ', recent_comments: 'نظرات اخیر', no_results: 'بدون نتیجه.', @@ -154,66 +119,51 @@ export const fa = { modified: 'تغییر یافت', nsfw: 'NSFW', show_nsfw: 'نمایش محتوای NSFW', - theme: 'Theme', sponsors: 'حامیان', sponsors_of_lemmy: 'حامیان لمی', - sponsor_message: - 'Lemmy is free, <1>open-source software, meaning no advertising, monetizing, or venture capital, ever. Your donations directly support full-time development of the project. Thank you to the following people:', support_on_patreon: 'حمایت روی Patreon', donate_to_lemmy: 'اعطای اعانه به لمی', donate: 'اعانه', - general_sponsors: - 'General Sponsors are those that pledged $10 to $39 to Lemmy.', crypto: 'رمزارز', bitcoin: 'بیت‌کوین', ethereum: 'اتریوم', monero: 'مونرو', code: 'کد', - joined: 'Joined', - by: 'by', - to: 'to', transfer_community: 'انتقال جامعه', transfer_site: 'انتقال پایگاه', are_you_sure: 'مطمئنید؟', yes: 'بله', no: 'خیر', powered_by: 'نیرو گرفته از', - landing_0: - "Lemmy is a <1>link aggregator / reddit alternative, intended to work in the <2>fediverse.<3>It's self-hostable, has live-updating comment threads, and is tiny (<4>~80kB). Federation into the ActivityPub network is on the roadmap. <5>This is a <6>very early beta version, and a lot of features are currently broken or missing. <7>Suggest new features or report bugs <8>here.<9>Made with <10>Rust, <11>Actix, <12>Inferno, <13>Typescript.", not_logged_in: 'وارد نشده‌اید.', community_ban: 'فعالیت شما در این جامعه ممنوع شده است.', site_ban: 'فعالیت شما در این پایگاه ممنوع شده است', - couldnt_create_comment: "ناتوانی در ایجاد نظر.", - couldnt_like_comment: "ناتوانی در پسنیدن نظر.", - couldnt_update_comment: "ناتوانی در به‌روزرسانی نظر.", - couldnt_save_comment: "ناتوانی در ذخیره نظر.", + couldnt_create_comment: 'ناتوانی در ایجاد نظر.', + couldnt_like_comment: 'ناتوانی در پسنیدن نظر.', + couldnt_update_comment: 'ناتوانی در به‌روزرسانی نظر.', + couldnt_save_comment: 'ناتوانی در ذخیره نظر.', no_comment_edit_allowed: 'مجاز به ویرایش نظر نیستید.', no_post_edit_allowed: 'مجاز به ویرایش مطلب نیستید.', no_community_edit_allowed: 'مجاز به ویرایش جامعه نیستید.', - couldnt_find_community: "ناتوانی در یافتن جامعه.", - couldnt_update_community: "ناتوانی در به‌روزرسانی جامعه.", + couldnt_find_community: 'ناتوانی در یافتن جامعه.', + couldnt_update_community: 'ناتوانی در به‌روزرسانی جامعه.', community_already_exists: 'این جامعه از قبل وجود داشته است.', - community_moderator_already_exists: 'Community moderator already exists.', - community_follower_already_exists: 'Community follower already exists.', - community_user_already_banned: 'Community user already banned.', - couldnt_create_post: "ناتوانی در ایجاد مطلب.", - couldnt_like_post: "ناتوانی در پسندیدن مطلب.", - couldnt_find_post: "ناتوانی در یافتن مطلب.", - couldnt_get_posts: "ناتوانی در دریافت مطالب", - couldnt_update_post: "ناتوای در به‌روزرسانی مطلب", - couldnt_save_post: "ناتوانی در ذخیره مطلب.", - no_slurs: 'No slurs.', + couldnt_create_post: 'ناتوانی در ایجاد مطلب.', + couldnt_like_post: 'ناتوانی در پسندیدن مطلب.', + couldnt_find_post: 'ناتوانی در یافتن مطلب.', + couldnt_get_posts: 'ناتوانی در دریافت مطالب', + couldnt_update_post: 'ناتوای در به‌روزرسانی مطلب', + couldnt_save_post: 'ناتوانی در ذخیره مطلب.', not_an_admin: 'مدیر نیستید.', site_already_exists: 'این پایگاه از قبل وجود داشته است.', - couldnt_update_site: "ناتوانی در به‌روزرسانی پایگاه.", + couldnt_update_site: 'ناتوانی در به‌روزرسانی پایگاه.', couldnt_find_that_username_or_email: - "ناتوانی در یافتن این نام کاربری یا رایانامه.", + 'ناتوانی در یافتن این نام کاربری یا رایانامه.', password_incorrect: 'گذرواژه نادرست.', passwords_dont_match: 'گذرواژه‌ها با هم منطبق نیستند.', - admin_already_created: "Sorry, there's already an admin.", user_already_exists: 'این کاربر از قبل وجود دارد.', email_already_exists: 'این رایانامه از قبل وجود دارد.', - couldnt_update_user: "ناتوانی در به‌روزرسانی کاربر.", + couldnt_update_user: 'ناتوانی در به‌روزرسانی کاربر.', system_err_login: 'خطای سامانه. سعی کنید خارج شده و دوباره وارد شوید.', }, }; diff --git a/ui/src/utils.ts b/ui/src/utils.ts index 0aec7624b..0ec291146 100644 --- a/ui/src/utils.ts +++ b/ui/src/utils.ts @@ -9,6 +9,7 @@ import 'moment/locale/nl'; import 'moment/locale/it'; import 'moment/locale/fi'; import 'moment/locale/ca'; +import 'moment/locale/fa'; import { UserOperation, @@ -258,6 +259,7 @@ export const languages = [ { code: 'eo', name: 'Esperanto' }, { code: 'es', name: 'Español' }, { code: 'de', name: 'Deutsch' }, + { code: 'fa', name: 'فارسی' }, { code: 'zh', name: '中文' }, { code: 'fi', name: 'Suomi' }, { code: 'fr', name: 'Français' }, @@ -306,6 +308,8 @@ export function getMomentLanguage(): string { lang = 'fi'; } else if (lang.startsWith('ca')) { lang = 'ca'; + } else if (lang.startsWith('fa')) { + lang = 'fa'; } else { lang = 'en'; } diff --git a/ui/translation_report.ts b/ui/translation_report.ts index 56c09c965..1956b7921 100644 --- a/ui/translation_report.ts +++ b/ui/translation_report.ts @@ -2,6 +2,7 @@ import { en } from './src/translations/en'; import { eo } from './src/translations/eo'; import { es } from './src/translations/es'; import { de } from './src/translations/de'; +import { fa } from './src/translations/fa'; import { zh } from './src/translations/zh'; import { fr } from './src/translations/fr'; import { sv } from './src/translations/sv'; @@ -15,6 +16,7 @@ import fs from 'fs'; const files = [ { t: ca, n: 'ca' }, { t: de, n: 'de' }, + { t: fa, n: 'fa' }, { t: eo, n: 'eo' }, { t: es, n: 'es' }, { t: fi, n: 'fi' }, From 41ac10f75e18959e9b346dcb0f5e669a6b4d72f7 Mon Sep 17 00:00:00 2001 From: Richie Zhang <12566991+StaticallyTypedRice@users.noreply.github.com> Date: Thu, 30 Jan 2020 16:07:01 -0800 Subject: [PATCH 13/43] Remove empty div tag containing the navbar. In preliminary, the appearance and behavior of the navbar was not affected when the `