javascript - Comment configurer élégamment plusieurs langues (i18n) dans un fichier js, veuillez discuter des idées
漂亮男人
漂亮男人 2017-07-05 10:48:33
0
3
1052

J'ai recherché des informations et découvert que la plupart des fichiers js dans différentes langues sont créés séparément, puis les fichiers js correspondants sont chargés en fonction des paramètres régionaux de l'utilisateur.

Mais maintenant, en raison des limitations du scénario d'utilisation, il est préférable de le compléter dans un fichier js. Je prévois maintenant de prendre en charge 3 langues (chinois, japonais, anglais), et il existe de nombreux endroits pour afficher du texte, peut-être des centaines de lignes, et les variables sont souvent jointes au milieu.

Exemple de scénario d'utilisation :

var result=10; document.body.innerHTML="一共有"+result+"个结果";

Maintenant, j'ai deux idées. L'une consiste à enregistrer le texte de la langue dans une variable ; l'autre consiste à écrire le texte sur place sous la forme d'un tableau, puis à l'appeler en utilisant des indices.

Idée 1 :

// 方式1:判断语言后确定唯一的结果。有点割裂,而且在使用时只能看到属性名,影响思路 // {w1}是占位符,每个配置写了多遍是为了模拟数量多的时候的情景 var lang={}; if () { // 判断为中文 lang.tip1="一共有{w1}个结果"; // lang.tip2="一共有{w1}个结果"; // lang.tip3="一共有{w1}个结果"; // lang.tip4="一共有{w1}个结果"; // lang.tip5="一共有{w1}个结果"; }else if(){ // 判断为日文 lang.tip1="{w1}の結果の合計"; // lang.tip2="{w1}の結果の合計"; // lang.tip3="{w1}の結果の合計"; // lang.tip4="{w1}の結果の合計"; // lang.tip5="{w1}の結果の合計"; }else if(){ // 判断为英文 lang.tip1="There is a total of {w1} result"; // lang.tip2="There is a total of {w1} result"; // lang.tip3="There is a total of {w1} result"; // lang.tip4="There is a total of {w1} result"; // lang.tip5="There is a total of {w1} result"; } var result=10; document.body.innerHTML=lang.tip1.replace("{w1}",result);

Idée 2 :

// 方式2:判断语言后只做个下标,文字写在原地方。这样使用时可以知道这里写的是什么,但似乎比较乱 var lang; if () { // 判断为中文 lang=0; }else if(){ // 判断为日文 lang=1; }else if(){ // 判断为英文 lang=2; } var result=10; document.body.innerHTML=["一共有{w1}个结果","{w1}の結果の合計","There is a total of {w1} result"][lang].replace("{w1}",result);

En fait, la première méthode est plus élégante dans sa forme, mais personnellement, je préfère la deuxième méthode, principalement parce que je sais ce qui est écrit ici lorsque je regarde le code. Il est plus difficile de juger le contenu par noms de variables (principalement parce qu'il y a trop d'entrées. Bien que je doive traiter sémantiquement les noms de variables pour une utilisation réelle, il n'y a pas beaucoup de cas où le contenu peut être décrit brièvement et avec précision).

Avez-vous d'autres idées ou solutions ?

漂亮男人
漂亮男人

répondre à tous (3)
Peter_Zhu

Vous souhaitez probablement traduire tout le texte, mais en raison du problème de structure grammaticale, l'emplacement des variables est inconnu et vous ne savez pas comment le résoudre, n'est-ce pas
En termes d'idées, vous pouvez en fait vous référer au ? idée de rendu de modèle
Laissez-moi vous donner une analogie

var language = { 'hello': [ 'hello,{val}!', '{val},コン!' ] }; var lang = 0; // 当前英文 function translate (msgVariable, data, msg) { if (msg !== undefined) language[msgVariable].push(msg); return language[msgVariable][lang].replace('{val}', data); } var data = '张三'; var msg = translate('hello', data, '你好,{val}!');
    迷茫

    Vous aimez ça ?

    var hello = { "cn" : "哈喽", "jp" : "こんにちは", "en" : "f**k you" }; //在页面初始化的时候判断当前的环境,然后直接设定key值就可以,比如说我现在是日语 var lang = "jp"; console.log(hello[lang]); //拓展的话往对象里面加值就行了,比如说加韩文 var hello = { "cn" : "哈喽", "jp" : "こんにちは", "en" : "f**k you", "kr" : "为何不洗澡思密达" }; lang = "kr"; console.log(hello[lang]);
      typecho

      Votre problème relève du i18n/L10n, vous pouvez peut-être trouver quelque chose comme

      • jQuery.i18n

      • JavaScript I18n et L10n
        Bibliothèques javascript d'internationalisation et de localisation. La première bibliothèque a été créée par Wikimedia et présente une grande valeur de référence.

      Autres contenus et bibliothèques de base i18n/L10n, ne les manquez pas

      • Unicode CLDR tel que table de langue chinoise simplifiée

      • Bibliothèque de soins intensifs

      Je suis très intéressé par le développement du i18n/L10n en Chine, et nous allons apprendre et grandir ensemble.

        Derniers téléchargements
        Plus>
        effets Web
        Code source du site Web
        Matériel du site Web
        Modèle frontal
        À propos de nous Clause de non-responsabilité Sitemap
        Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!