parent
630513540e
commit
38edb60be9
6 changed files with 195 additions and 13 deletions
15
README.md
vendored
15
README.md
vendored
|
@ -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
|
||||||
|
|
6
ui/src/components/moment-time.tsx
vendored
6
ui/src/components/moment-time.tsx
vendored
|
@ -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
2
ui/src/i18next.ts
vendored
|
@ -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
173
ui/src/translations/eo.ts
vendored
Normal 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
10
ui/src/utils.ts
vendored
|
@ -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';
|
||||||
}
|
}
|
||||||
|
|
2
ui/translation_report.ts
vendored
2
ui/translation_report.ts
vendored
|
@ -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'},
|
||||||
|
|
Loading…
Reference in a new issue