Adding Esperanto.

- Fixes #240
This commit is contained in:
Dessalines 2019-08-26 14:42:53 -07:00
parent 630513540e
commit 38edb60be9
6 changed files with 195 additions and 13 deletions

15
README.md vendored
View file

@ -163,18 +163,19 @@ 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). If you'd like to add translations, take a look a look at the [english translation file](ui/src/translations/en.ts).
- Languages supported: English (`en`), Chinese (`zh`), French (`fr`), Spanish (`es`), Swedish (`sv`), German (`de`), Russian (`ru`). - Languages supported: English (`en`), Chinese (`zh`), Esperanto (`eo`), French (`fr`), Spanish (`es`), Swedish (`sv`), German (`de`), Russian (`ru`).
### Report ### Report
lang | done | missing lang | done | missing
--- | --- | --- --- | --- | ---
de | 91% | cross_posts,cross_post,users,settings,subscribed,expires,nsfw,show_nsfw,crypto,monero,joined,by,to,transfer_community,transfer_site de | 90% | cross_posts,cross_post,users,settings,subscribed,expires,recent_comments,nsfw,show_nsfw,crypto,monero,joined,by,to,transfer_community,transfer_site
es | 96% | cross_posts,cross_post,by,to,transfer_community,transfer_site es | 96% | cross_posts,cross_post,recent_comments,by,to,transfer_community,transfer_site
fr | 93% | cross_posts,cross_post,users,settings,nsfw,show_nsfw,monero,by,to,transfer_community,transfer_site eo | 100% |
ru | 96% | cross_posts,cross_post,monero,by,to,transfer_community,transfer_site fr | 93% | cross_posts,cross_post,users,settings,recent_comments,nsfw,show_nsfw,monero,by,to,transfer_community,transfer_site
sv | 94% | cross_posts,cross_post,settings,nsfw,show_nsfw,monero,by,to,transfer_community,transfer_site ru | 95% | cross_posts,cross_post,recent_comments,monero,by,to,transfer_community,transfer_site
zh | 93% | cross_posts,cross_post,users,settings,nsfw,show_nsfw,monero,by,to,transfer_community,transfer_site sv | 93% | cross_posts,cross_post,settings,recent_comments,nsfw,show_nsfw,monero,by,to,transfer_community,transfer_site
zh | 93% | cross_posts,cross_post,users,settings,recent_comments,nsfw,show_nsfw,monero,by,to,transfer_community,transfer_site
## Credits ## Credits

View file

@ -1,11 +1,5 @@
import { Component } from 'inferno'; import { Component } from 'inferno';
import * as moment from 'moment'; import * as moment from 'moment';
import 'moment/locale/es';
import 'moment/locale/de';
import 'moment/locale/zh-cn';
import 'moment/locale/fr';
import 'moment/locale/sv';
import 'moment/locale/ru';
import { getMomentLanguage } from '../utils'; import { getMomentLanguage } from '../utils';
import { i18n } from '../i18next'; import { i18n } from '../i18next';

2
ui/src/i18next.ts vendored
View file

@ -1,6 +1,7 @@
import * as i18n from 'i18next'; import * as i18n from 'i18next';
import { getLanguage } from './utils'; import { getLanguage } from './utils';
import { en } from './translations/en'; import { en } from './translations/en';
import { eo } from './translations/eo';
import { es } from './translations/es'; import { es } from './translations/es';
import { de } from './translations/de'; import { de } from './translations/de';
import { zh } from './translations/zh'; import { zh } from './translations/zh';
@ -12,6 +13,7 @@ import { ru } from './translations/ru';
// TODO don't forget to add moment locales for new languages. // TODO don't forget to add moment locales for new languages.
const resources = { const resources = {
en, en,
eo,
es, es,
de, de,
zh, zh,

173
ui/src/translations/eo.ts vendored Normal file
View file

@ -0,0 +1,173 @@
export const eo = {
translation: {
post: 'Poŝti',
remove_post: 'Fortiri Poŝton',
no_posts: 'Ne Poŝtoj.',
create_a_post: 'Verki Poŝton',
create_post: 'Verki Poŝton',
number_of_posts:'{{count}} Poŝtoj',
posts: 'Poŝtoj',
related_posts: 'Tiuj poŝtoj eble rilatas',
cross_posts: 'Tiuj ligilo ankaŭ estas poŝtinta al:',
cross_post: 'laŭapoŝto',
comments: 'Komentoj',
number_of_comments:'{{count}} Komentoj',
remove_comment: 'Fortiri Komentojn',
communities: 'Komunumoj',
users: 'Uzantoj',
create_a_community: 'Krei komunumon',
create_community: 'Krei Komunumon',
remove_community: 'Forigi Komunumon',
subscribed_to_communities:'Abonita al <1>komunumoj</1>',
trending_communities:'Furora <1>komunumoj</1>',
list_of_communities: 'Listo de komunumoj',
community_reqs: 'minusklaj leteroj, substrekoj, kaj ne spacetoj.',
edit: 'redakti',
reply: 'repliki',
cancel: 'nuligi',
unlock: 'malŝlosi',
lock: 'ŝlosi',
link: 'ligi',
mod: 'moderanto',
mods: 'moderantoj',
moderates: 'Moderigas',
settings: 'Agordoj',
remove_as_mod: 'forigi per moderanto',
appoint_as_mod: 'nomumi per moderanto',
modlog: 'Moderlogo',
admin: 'administranto',
admins: 'administrantoj',
remove_as_admin: 'forigi per administranto',
appoint_as_admin: 'nomumi per administranto',
remove: 'fortiri',
removed: 'fortirita',
locked: 'ŝlosita',
reason: 'Kialo',
mark_as_read: 'marki kiel legita',
mark_as_unread: 'marki kiel nelegita',
delete: 'forigi',
deleted: 'forigita',
restore: 'restaŭri',
ban: 'forbari',
ban_from_site: 'forbari de retejo',
unban: 'malforbari',
unban_from_site: 'malforbari de retejo',
save: 'konservi',
unsave: 'malkonservi',
create: 'krei',
username: 'Uzantnomo',
email_or_username: 'Retadreso aŭ Uzantnomo',
number_of_users:'{{count}} Uzantoj',
number_of_subscribers:'{{count}} Abonantoj',
number_of_points:'{{count}} Voĉdonoj',
name: 'Nomo',
title: 'Titolo',
category: 'Kategorio',
subscribers: 'Abonantoj',
both: 'Ambaŭ',
saved: 'Konservita',
unsubscribe: 'Malaboni',
subscribe: 'Aboni',
subscribed: 'Abonita',
prev: 'Antaŭe',
next: 'Poste',
sidebar: 'Flankstango',
sort_type: 'Klasi per kia',
hot: 'Varmaj',
new: 'Novaj',
top_day: 'Supraj tagaj',
week: 'Semajno',
month: 'Monato',
year: 'Jaro',
all: 'Ĉiam',
top: 'Supraj',
api: 'API',
inbox: 'Ricevujo',
inbox_for: 'Ricevujo de <1>{{user}}</1>',
mark_all_as_read: 'marki ĉiujn kiel legitaj',
type: 'Tipo',
unread: 'Nelegitaj',
reply_sent: 'Repliko sendis',
search: 'Serĉi',
overview: 'Resumo',
view: 'Rigardi',
logout: 'Elsaluti',
login_sign_up: 'Ensaluti / Registriĝi',
login: 'Ensaluti',
sign_up: 'Registriĝi',
notifications_error: 'Labortablaj avizoj estas nehavebla en via retumilo. Provu Firefox-on aŭ Chrome-on.',
unread_messages: 'Nelegitaj Mesaĝoj',
password: 'Pasvorto',
verify_password: 'Konfirmu Vian Pasvorton',
email: 'Retadreso',
optional: 'Fakultativa',
expires: 'Finiĝos',
url: 'URL',
body: 'Ĉefparto',
copy_suggested_title: 'kopii la sugestiitan titolon: {{title}}',
community: 'Komunumo',
expand_here: 'Ekspansii ĉi tie',
subscribe_to_communities: 'Aboni al iuj <1>komunumoj</1>.',
chat: 'Babilo',
recent_comments: 'Freŝaj Komentoj',
no_results: 'Ne rezultoj.',
setup: 'Agordi',
lemmy_instance_setup: 'Agordi Instancon de Lemmy',
setup_admin: 'Agordi Retejan Administranton',
your_site: 'via retejo',
modified: 'modifita',
nsfw: 'NSFW',
show_nsfw: 'Vidigi NSFW-an enhavon',
sponsors: 'Subtenantoj',
sponsors_of_lemmy: 'Subtenantoj de Lemmy',
sponsor_message: 'Lemmy estas senpaga, <1>liberkoda</1> programaro. Tio signifas ne reklami, pagigi, aŭ riska kapitalo, ĉiam. Viaj donacoj rekte subtenas plentempan evoluon de la projekto. Dankon al tiuj homoj:',
support_on_patreon: 'Subteni per Patreon',
general_sponsors:'Ĝeneralaj Subtenantoj estas tiuj ke donacis inter $10 kaj $39 al Lemmy.',
crypto: 'Crypto',
bitcoin: 'Bitcoin',
ethereum: 'Ethereum',
monero: 'Monero',
code: 'Kodo',
joined: 'Unuiĝis',
by: 'de',
to: 'al',
transfer_community: 'transdoni la komunumon',
transfer_site: 'transdoni la retejon',
powered_by: 'Konstruis per',
landing_0: 'Lemmy estas <1>ligila agregatilo</1> / Reddit anstataŭo ke intenciĝas funkci en la <2>federacio-universo</2>.<3></3>ĝi estas mem-gastigebla, havas nuna-ĝisdatigajn komentarojn, kaj estas malgrandega (<4>~80kB</4>). Federacio en la ActivityPub-an reton estas planizita. <5></5>Estas <6>fruega beta versio</6>, kaj multaj trajtoj estas nune difektaj aŭ mankaj. <7></7>Sugestias novajn trajtojn aŭ raportas cimojn <8>ĉi tie.</8><9></9>Faris per <10>Rust</10>, <11>Actix</11>, <12>Inferno</12>, <13>Typescript</13>.',
not_logged_in: 'Ne estas ensalutinta.',
community_ban: 'Vi estas forbarita de la komunumo.',
site_ban: 'Vi estas forbarita de la retejo',
couldnt_create_comment: 'Ne povis krei la komenton.',
couldnt_like_comment: 'Ne povis ŝati la komenton.',
couldnt_update_comment: 'Ne povis ĝisdatigi komenton.',
couldnt_save_comment: 'Ne povis konservi komenton.',
no_comment_edit_allowed: 'Ne rajtas redakti la komenton.',
no_post_edit_allowed: 'Ne rajtas redakti la poŝton.',
no_community_edit_allowed: 'Ne rajtas redakti la komunumon.',
couldnt_find_community: 'Ne povis trovi la komunumon.',
couldnt_update_community: 'Ne povis ĝisdatigi la komunumon.',
community_already_exists: 'Komunumo jam ekzistas.',
community_moderator_already_exists: 'Komunuma moderanto jam ekzistas.',
community_follower_already_exists: 'Komunuma sekvanto.',
community_user_already_banned: 'Komunuma uzanto jam estas forbarita.',
couldnt_create_post: 'Ne povis krei la poŝton.',
couldnt_like_post: 'Ne povis ŝati la poŝton.',
couldnt_find_post: 'Ne povis trovi la poŝton.',
couldnt_get_posts: 'Ne povis irpreni poŝtojn',
couldnt_update_post: 'Ne povis ĝisdatigi la poŝton',
couldnt_save_post: 'Ne povis konservi la poŝton.',
no_slurs: 'Ne bigotaj vortoj.',
not_an_admin: 'Ne estas administranto.',
site_already_exists: 'Retejo jam ekzistas.',
couldnt_update_site: 'Ne povis ĝisdatigi la retejon.',
couldnt_find_that_username_or_email: 'Ne povis trovi tiun uzantnomon aŭ retadreson.',
password_incorrect: 'Pasvorto malĝustas.',
passwords_dont_match: 'Pasvortoj ne samas.',
admin_already_created: 'Pardonu, jam estas administranto.',
user_already_exists: 'Uzanto jam ekzistas.',
couldnt_update_user: 'Ne povis ĝisdatigi la uzanton.',
system_err_login: 'Sistema eraro. Provu elsaluti kaj ensaluti.',
},
}

10
ui/src/utils.ts vendored
View file

@ -1,3 +1,11 @@
import 'moment/locale/es';
import 'moment/locale/eo';
import 'moment/locale/de';
import 'moment/locale/zh-cn';
import 'moment/locale/fr';
import 'moment/locale/sv';
import 'moment/locale/ru';
import { UserOperation, Comment, User, SortType, ListingType } from './interfaces'; import { UserOperation, Comment, User, SortType, ListingType } from './interfaces';
import * as markdown_it from 'markdown-it'; import * as markdown_it from 'markdown-it';
import * as markdown_it_container from 'markdown-it-container'; import * as markdown_it_container from 'markdown-it-container';
@ -188,6 +196,8 @@ export function getMomentLanguage(): string {
lang = 'ru'; lang = 'ru';
} else if (lang.startsWith('es')) { } else if (lang.startsWith('es')) {
lang = 'es'; lang = 'es';
} else if (lang.startsWith('eo')) {
lang = 'eo';
} else { } else {
lang = 'en'; lang = 'en';
} }

View file

@ -1,4 +1,5 @@
import { en } from './src/translations/en'; import { en } from './src/translations/en';
import { eo } from './src/translations/eo';
import { es } from './src/translations/es'; import { es } from './src/translations/es';
import { de } from './src/translations/de'; import { de } from './src/translations/de';
import { zh } from './src/translations/zh'; import { zh } from './src/translations/zh';
@ -9,6 +10,7 @@ import { ru } from './src/translations/ru';
let files = [ let files = [
{t: de, n: 'de'}, {t: de, n: 'de'},
{t: es, n: 'es'}, {t: es, n: 'es'},
{t: eo, n: 'eo'},
{t: fr, n: 'fr'}, {t: fr, n: 'fr'},
{t: ru, n: 'ru'}, {t: ru, n: 'ru'},
{t: sv, n: 'sv'}, {t: sv, n: 'sv'},