Add German, Italian, Dutch and Chinese translations (#98)

This commit is contained in:
Alan Friedman 2019-08-25 14:04:24 -04:00 committed by GitHub
parent 71693c6a91
commit e6609a2d69
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 154 additions and 10 deletions

View File

@ -38,12 +38,16 @@ class Settings extends Component {
<section> <section>
<h4 className='mb-3'><T path='languageDropdownHeader'/></h4> <h4 className='mb-3'><T path='languageDropdownHeader'/></h4>
<p><a href="https://github.com/darkwire/darkwire.io/blob/master/client/README.md#translations" target="_blank">Help us translate Darkwire!</a></p> <p><a href="https://github.com/darkwire/darkwire.io/blob/master/client/README.md#translations" target="_blank"><T path='helpTranslate'/></a></p>
<div className="form-group"> <div className="form-group">
<select value={this.props.language} className="form-control" onChange={this.handleLanguageChange.bind(this)}> <select value={this.props.language} className="form-control" onChange={this.handleLanguageChange.bind(this)}>
<option value="en">English</option> <option value="en">English</option>
<option value="fr">Français</option> <option value="fr">Français</option>
<option value="oc">Occitan</option> <option value="oc">Occitan</option>
<option value="de">Deutsch</option>
<option value="nl">Nederlands</option>
<option value="it">Italiano</option>
<option value="zhCN">中文</option>
</select> </select>
</div> </div>
</section> </section>

View File

@ -9,7 +9,9 @@ const regex = /{(.*?)}/g;
class T extends Component { class T extends Component {
render() { render() {
const t = getTranslations(this.props.language); const t = getTranslations(this.props.language);
let string = _.get(t, this.props.path, '').split(regex); const englishT = getTranslations('en');
const str = _.get(t, this.props.path, '') || _.get(englishT, this.props.path, '')
let string = str.split(regex);
if (this.props.data) { if (this.props.data) {
string = string.map(word => { string = string.map(word => {
if (this.props.data[word]) { if (this.props.data[word]) {
@ -21,11 +23,6 @@ class T extends Component {
} }
return string; return string;
} }
t() {
const t = getTranslations(this.props.language);
return _.get(t, this.props.path);
}
} }
T.propTypes = { T.propTypes = {

33
client/src/i18n/de.json Normal file
View File

@ -0,0 +1,33 @@
{
"aboutButton": "Über",
"aboutHeader": "Über",
"agreement": "Durch die Nutzung von Darkwire stimmen Sie unseren Nutzungsbedingungen und Nutzungsbedingungen zu",
"copyButtonTooltip": "Kopiert",
"copyRoomHeader": "Dieser Raum",
"downloadFile": "{filename} herunterladen",
"languageDropdownHeader": "Sprache",
"lockRoomHeader": "Umkleideraum",
"lockRoomText": "Wenn Sie der Raumbesitzer sind, können Sie den Raum sperren und entsperren, indem Sie auf das Schlosssymbol in der Navigationsleiste klicken. Wenn ein Raum gesperrt ist, können keine anderen Teilnehmer teilnehmen.",
"lockedRoom": "{username} hat den Raum abgeschlossen",
"lockedRoomHeader": "Dieser Raum ist verschlossen",
"nameChange": "{oldUsername} hat seinen Namen in {newUsername} geändert",
"newRoomButton": "Neuer Raum",
"roomOwnerHeader": "Raumeigentum",
"roomOwnerText": "Die Person, die den Raum erstellt hat, ist der Raumbesitzer und hat spezielle Rechte, wie die Möglichkeit, den Raum zu sperren und zu entsperren. Wenn der Eigentümer das Zimmer verlässt, übernimmt die zweite Person, die beitritt, das Eigentum. Wenn sie gehen, wird die dritte Person Eigentümer und so weiter. Der Rauminhaber hat ein Sternsymbol neben seinem Benutzernamen in der Teilnehmer-Dropdown-Liste.",
"sentFile": "Sie haben {filename} gesendet",
"settings": "die Einstellungen",
"settingsButton": "die Einstellungen",
"settingsHeader": "Einstellungen & Hilfe",
"slashCommandsBullets": ["Ändert den Benutzernamen", "führt eine Aktion aus", "löscht den Nachrichtenverlauf", "listet alle Befehle auf"],
"slashCommandsHeader": "Slash-Befehle",
"slashCommandsText": "Die folgenden Schrägstrichbefehle sind verfügbar:",
"sound": "Klingen",
"typePlaceholder": "Tippen Sie hier",
"unlockedRoom": "{username} hat den Raum freigeschaltet",
"userJoined": "{username} ist beigetreten",
"userLeft": "{username} übrig",
"userSentFile": "{username} hat Ihnen eine Datei gesendet.",
"welcomeHeader": "Willkommen bei Darkwire v2.0",
"welcomeModalCTA": "OK",
"helpTranslate": "Hilf uns, Darkwire zu übersetzen!"
}

View File

@ -33,5 +33,6 @@
], ],
"sound": "Sound", "sound": "Sound",
"welcomeModalCTA": "Ok", "welcomeModalCTA": "Ok",
"lockedRoomHeader": "This room is locked" "lockedRoomHeader": "This room is locked",
"helpTranslate": "Help us translate Darkwire!"
} }

View File

@ -33,5 +33,6 @@
], ],
"sound": "Son", "sound": "Son",
"welcomeModalCTA": "Ok", "welcomeModalCTA": "Ok",
"lockedRoomHeader": "Ce salon est verrouillé" "lockedRoomHeader": "Ce salon est verrouillé",
"helpTranslate": "Aidez-nous à traduire Darkwire!"
} }

View File

@ -1,11 +1,19 @@
import en from './en'; import en from './en';
import fr from './fr'; import fr from './fr';
import oc from './oc'; import oc from './oc';
import de from './de';
import it from './it';
import zhCN from './zh-CN';
import nl from './nl';
const languagesMap = { const languagesMap = {
en, en,
fr, fr,
oc, oc,
de,
it,
zhCN,
nl
} }
export function getTranslations(language) { export function getTranslations(language) {

33
client/src/i18n/it.json Normal file
View File

@ -0,0 +1,33 @@
{
"aboutButton": "Di",
"aboutHeader": "Di",
"agreement": "Usando Darkwire, accetti la nostra Politica di utilizzo accettabile e i Termini di servizio",
"copyButtonTooltip": "Copiato",
"copyRoomHeader": "Questa stanza",
"downloadFile": "Scarica {filename}",
"languageDropdownHeader": "linguaggio",
"lockRoomHeader": "Lock Room",
"lockRoomText": "Se sei il proprietario della stanza, puoi bloccare e sbloccare la stanza facendo clic sull'icona del lucchetto nella barra di navigazione. Quando una stanza è chiusa a chiave, nessun altro partecipante potrà unirsi.",
"lockedRoom": "{username} ha bloccato la stanza",
"lockedRoomHeader": "Questa stanza è chiusa a chiave",
"nameChange": "{oldUsername} ha cambiato il nome in {newUsername}",
"newRoomButton": "Nuova stanza",
"roomOwnerHeader": "Proprietà della stanza",
"roomOwnerText": "La persona che ha creato la stanza è il proprietario della stanza e ha privilegi speciali, come la possibilità di bloccare e sbloccare la stanza. Se il proprietario lascia la stanza, la seconda persona che si unisce si assume la proprietà. Se lasciano, la terza persona diventa proprietario e così via. Il proprietario della stanza ha un'icona a forma di stella accanto al suo nome utente nel menu a discesa dei partecipanti.",
"sentFile": "Hai inviato {filename}",
"settings": "impostazioni",
"settingsButton": "impostazioni",
"settingsHeader": "Impostazioni e aiuto",
"slashCommandsBullets": ["cambia il nome utente", "esegue un'azione", "cancella la cronologia dei messaggi", "elenca tutti i comandi"],
"slashCommandsHeader": "Comandi barra",
"slashCommandsText": "Sono disponibili i seguenti comandi di barra:",
"sound": "Suono",
"typePlaceholder": "Digitare qui",
"unlockedRoom": "{username} ha sbloccato la stanza",
"userJoined": "{username} si è unito",
"userLeft": "{username} rimasto",
"userSentFile": "{username} ti ha inviato un file.",
"welcomeHeader": "Benvenuto in Darkwire v2.0",
"welcomeModalCTA": "Ok",
"helpTranslate": "Aiutaci a tradurre Darkwire!"
}

33
client/src/i18n/nl.json Normal file
View File

@ -0,0 +1,33 @@
{
"aboutButton": "Wat betreft",
"aboutHeader": "Wat betreft",
"agreement": "Door Darkwire te gebruiken, gaat u akkoord met ons Beleid voor acceptabel gebruik en onze Servicevoorwaarden",
"copyButtonTooltip": "gekopieerde",
"copyRoomHeader": "Deze kamer",
"downloadFile": "Download {filename}",
"languageDropdownHeader": "Taal",
"lockRoomHeader": "Lock Room",
"lockRoomText": "Als u de eigenaar van de ruimte bent, kunt u de ruimte vergrendelen en ontgrendelen door op het vergrendelingspictogram in de navigatiebalk te klikken. Wanneer een ruimte is vergrendeld, kunnen geen andere deelnemers deelnemen.",
"lockedRoom": "{username} heeft de kamer vergrendeld",
"lockedRoomHeader": "Deze kamer is afgesloten",
"nameChange": "{oldUsername} heeft hun naam gewijzigd in {newUsername}",
"newRoomButton": "Nieuwe kamer",
"roomOwnerHeader": "Ruimte-eigendom",
"roomOwnerText": "De persoon die de ruimte heeft gemaakt, is de eigenaar van de ruimte en heeft speciale rechten, zoals de mogelijkheid om de ruimte te vergrendelen en ontgrendelen. Als de eigenaar de kamer verlaat, neemt de tweede persoon die deelneemt het eigendom over. Als ze vertrekken, wordt de derde persoon eigenaar, enzovoort. De eigenaar van de ruimte heeft een sterpictogram naast zijn gebruikersnaam in de vervolgkeuzelijst van de deelnemers.",
"sentFile": "U heeft {filemame} verzonden",
"settings": "instellingen",
"settingsButton": "instellingen",
"settingsHeader": "Instellingen & Help",
"slashCommandsBullets": "wijzigt gebruikersnaam, voert een actie uit, wist uw berichtgeschiedenis, geeft alle opdrachten weer",
"slashCommandsHeader": "Slash-opdrachten",
"slashCommandsText": "De volgende slash-opdrachten zijn beschikbaar:",
"sound": "Geluid",
"typePlaceholder": "Typ hier",
"unlockedRoom": "{username} heeft de kamer ontgrendeld",
"userJoined": "{username} is lid geworden",
"userLeft": "{username} over",
"userSentFile": "{username} heeft u een bestand gestuurd.",
"welcomeHeader": "Welkom bij Darkwire v2.0",
"welcomeModalCTA": "OK",
"helpTranslate": "Help ons Darkwire te vertalen!"
}

View File

@ -33,5 +33,6 @@
], ],
"sound": "Son", "sound": "Son",
"welcomeModalCTA": "Dacòrdi", "welcomeModalCTA": "Dacòrdi",
"lockedRoomHeader": "Aquesta sala es clavada" "lockedRoomHeader": "Aquesta sala es clavada",
"helpTranslate": "Help us translate Darkwire!"
} }

View File

@ -0,0 +1,33 @@
{
"aboutButton": "关于",
"aboutHeader": "关于",
"agreement": "使用Darkwire即表示您同意我们的可接受使用政策和服务条款",
"copyButtonTooltip": "复制",
"copyRoomHeader": "这个房间",
"downloadFile": "下载 {filename}",
"languageDropdownHeader": "语言",
"lockRoomHeader": "锁室",
"lockRoomText": "如果您是房间所有者,则可以通过单击导航栏中的锁定图标来锁定和解锁房间。当房间被锁定时,没有其他参与者可以加入。",
"lockedRoom": "{username} 锁定了房间",
"lockedRoomHeader": "这个房间是上锁的",
"nameChange": "{oldUsername}将其名称更改为{newUsername}",
"newRoomButton": "新房间",
"roomOwnerHeader": "房间所有权",
"roomOwnerText": "创建房间的人是房间所有者,并具有特殊权限,例如锁定和解锁房间的能力。如果所有者离开房间,则第二个加入的人承担所有权。如果他们离开,第三个人成为所有者,依此类推。房间所有者在参与者下拉列表中的用户名旁边有一个星形图标。",
"sentFile": "您发送了 {filename}",
"settings": "设置",
"settingsButton": "设置",
"settingsHeader": "设置和帮助",
"slashCommandsBullets": "更改用户名,执行操作,清除消息历史记录,列出所有命令",
"slashCommandsHeader": "斜线命令",
"slashCommandsText": "可以使用以下斜杠命令:",
"sound": "声音",
"typePlaceholder": "在此输入",
"unlockedRoom": "{username} 解锁了房间",
"userJoined": "{username} 已加入",
"userLeft": "{username} 离开了",
"userSentFile": "{username} 向您发送了一个文件。",
"welcomeHeader": "欢迎来到Darkwire v2.0",
"welcomeModalCTA": "好",
"helpTranslate": "帮助我们翻译Darkwire"
}