我有一個translate看起來像這樣的函式:
export const translate = (sentence: string, ...words) => { ... }
它會查看設定以查看選擇的語言,然后查找已翻譯的句子詞典。
這是一個例句:"Each __ provides __ money"。
將句子翻譯成正確的語言后,我想檢查字串中是否有任何__內容。這就是引數...words的用途。然后我們將__使用引數替換words
我使用函式的示例:translate('Each __ provides __ money', 'Person', 'Fifty')將回傳:Each Person provides Fifty money但已翻譯。
我目前對如何更換__.
我正在考慮做一些事情.split:
if (sentence.includes('__')) {
let rebuiltSentence = ''
const splitSentence = sentence.split('__')
for (let i = 0; i < splitSentence.length; i ) {
const part = splitSentence[i]
rebuiltSentence = part
rebuiltSentence = words[i]
}
return rebuiltSentence
}
但這對我來說似乎有點hacky。有什么辦法可以獲取每個索引__然后用引數中正確的單詞索引替換它words?
uj5u.com熱心網友回復:
您可以使用正則運算式模式和迭代陣列String#replace的回呼:words
const translate = (sentence, ...words) => {
let i = 0;
return sentence.replace(/\b__\b/g, () => words[i ]);
};
console.log(translate("Each __ provides __ money", "Person", "Fifty"));
如果它應該處理沒有足夠的單詞來填充空白的情況:
const translate = (sentence, ...words) => {
let i = 0;
return sentence.replace(/\b__\b/g, m =>
i < words.length ? words[i ] : m
);
};
console.log(translate("Each __ provides __ money", "Person"));
或者使用split更接近原始方法的精神:
const translate = (sentence, ...words) =>
sentence
.split(/\b__\b/g)
.map((e, i) => i === 0 ? e : (words[i-1] || "__") e)
.join("")
;
console.log(translate("Each __ provides __ money", "Person", "Fifty"));
uj5u.com熱心網友回復:
看看一些 i18n js 庫。比如 i18next (我只選擇了這個,因為我有機會使用它,你也可以嘗試其他庫)。使用 i18next,您可以定義可以動態設定所選片段的翻譯,以及其他翻譯的結果。下面是一個簡單的例子:
void async function main() {
await i18next.init({
lng: 'en',
resources: {
en: {
translation: {
'someKey': 'Each {{name}} provides {{number}} money',
'fifty': 'Fifty',
},
},
pl: {
translation: {
'someKey': 'Ka?dy {{name}} zapewnia {{number}} pieni?dzy',
'fifty': 'pi??dziesi?t',
},
},
},
});
console.log(i18next.t('someKey', { name: 'Person', number: i18next.t('fifty') }));
await i18next.changeLanguage('pl');
console.log(i18next.t('someKey', { name: 'Person', number: i18next.t('fifty') }));
}();
<script src="https://unpkg.com/i18next/dist/umd/i18next.min.js"></script>
當然,您不必在一個地方定義您的翻譯,您可以將它們分成單獨的檔案,然后在語言發生變化時從服務器中提取這些檔案。如果您有興趣,請參閱檔案以獲取更多資訊:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/516518.html
標籤:javascript细绳
上一篇:所需格式的Python元組
