簡體   English   中英

能夠將一個或多個單詞從一種語言映射到另一種語言的可靠國際化方法看起來如何?

[英]How does a reliable internationalization approach look like which is capable of mapping one or many words from one language to another?

我有一系列工作日[“星期一”,“星期二”..等],我需要將每一天翻譯成另一種語言。

let weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];

translatedArray = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi'];

最好的方法是什么? 我需要輸出一個帶有翻譯數組的新數組

我的簡單方法是在這樣的對象中維護一個 json

let weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
let anotherLanguageDays = {
   "Monday" : "星期一",
    "Tuesday" : "星期一",
    ... and so on
};

現在當你遍歷數組時,你可以做這樣的事情

weekdays.forEach(d => {
   console.log(anotherLanguageDays[d]);
})

您的代碼的完整示例...

 let weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']; let anotherLangauge = { Monday : "Lundi", Tuesday : "Mardi", Wednesday : "Mercredi", Thursday : "Jeudi", Friday : "Vendredi" }; weekdays.forEach(d => { console.log(anotherLangauge[d]); })

您可以執行以下操作:

let arr = ["Mon", "Tue"]
let mapping = {
  "Mon":"aaa",
  "Tue":"sss"
}
newArr = arr.map((str) => {
  return mapping[str];
});
console.log(newArr) //["aaa","sss"]

您可以使用Array reduce方法來制作結果對象。

 let weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]; let translatedArray = ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi"]; let ret = weekdays.reduce((p, c, i) => { p[c] = translatedArray[i]; return p; }, {}); console.log(ret); console.log(ret["Tuesday"]);

主要歸結為選擇最方便的map方法。 一種可能的方法可能類似於下一個提供的示例代碼......

 const i18nMap = { "en-GB": { weekdays: { monday: "Monday", tuesday: "Tuesday", wednesday: "Wednesday", thursday: "Thursday", friday: "Friday", }, }, "fr-FR": { weekdays: { monday: "Lundi", tuesday: "Mardi", wednesday: "Mercredi", thursday: "Jeudi", friday: "Vendredi", }, }, "de-DE": { weekdays: { monday: "Montag", tuesday: "Dienstag", wednesday: "Mittwoch", thursday: "Donnerstag", friday: "Freitag", }, }, }; function getItemFromBoundLanguageMap(item) { return this[item]; } // let weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']; const weekdaysKeyList = Object.keys(i18nMap["en-GB"].weekdays); const weekdaysEnGB = weekdaysKeyList.map( getItemFromBoundLanguageMap, i18nMap["en-GB"].weekdays ); const weekdaysFrFR = weekdaysKeyList.map( getItemFromBoundLanguageMap, i18nMap["fr-FR"].weekdays ); const weekdaysDeDE = weekdaysKeyList.map( getItemFromBoundLanguageMap, i18nMap["de-DE"].weekdays ); console.log("weekdaysKeyList :", weekdaysKeyList); console.log("weekdaysEnGB :", weekdaysEnGB); console.log("weekdaysFrFR :", weekdaysFrFR); console.log("weekdaysDeDE :", weekdaysDeDE);
 .as-console-wrapper { min-height: 100%!important; top: 0; }

創建一個帶有代表語言代碼的鍵的對象。 每種語言代碼都有另一個對象,其中包含該語言中的單詞和單詞的翻譯。

編寫一個函數,它接受一個字符串數組作為您要翻譯的單詞和一個語言代碼,該代碼指示從哪種語言獲取翻譯。

確保將所有鍵都小寫以保持一致。 這些值沒有小寫。

按照此方法,您可以通過添加更多要使用的語言和單詞來輕松擴展。

 const translations = { 'en-US': { monday: 'Monday', tuesday: 'Tuesday', wednesday: 'Wednesday', thursday: 'Thursday', friday: 'Friday', saturday: 'Saturday', sunday: 'Sunday' }, 'fr-FR': { monday: 'Lundi', tuesday: 'Mardi', wednesday: 'Mecredi', thursday: 'Jeudi', friday: 'Vendredi', saturday: 'Samedi', sunday: 'Dimanche' }, 'nl-NL': { monday: 'Maandag', tuesday: 'Dinsdag', wednesday: 'Woensdag', thursday: 'Donderdag', friday: 'Vrijdag', saturday: 'Zaterdag', sunday: 'Zondag' } }; const translate = (strings, language) => { if (!translations.hasOwnProperty(language)) { throw new Error(`Language ${language} does not exist in the translations object.`); } const set = translations[language]; return Object.entries(set) .filter(([ key, value ]) => strings.includes(key)) .map(([ key, value ]) => value); }; let weekdays = [ 'monday', 'tuesday', 'wednesday', 'thursday', 'friday' ]; const frenchWeekdays = translate(weekdays, 'fr-FR'); const englishWeekdays = translate(weekdays, 'en-US'); const dutchWeekdays = translate(weekdays, 'nl-NL'); console.log(frenchWeekdays); console.log(englishWeekdays); console.log(dutchWeekdays); // Example with non existent translations. translate(weekdays, 'de-DE');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM