私は英語のフレーズの配列をループしていますが、現在のテキストノードと一致するものが見つかった場合は、それをnon_english配列の翻訳に置き換えます。これらはすべて、完全に一致する場合は100%機能します。
ただし、部分一致の場合は、部分一致を可能にする.matchコマンドを使用する必要があります。
完全一致を検索するための私のコードは次のようになります。
var found = $ .inArray(value、en_lang);
次に、見つかった値がある場合は、テキストを置き換えます。この方法は高速で、私はそれが大好きです。
ただし、部分的な単語/フレーズのマッチングを行うには、このループコードを使用する必要があります。
// loop thru language arrays
for (var x = en_count; x > 0; x--) {
// assign current from/to variables for replace
var from = en_lang[x];
var to = other_lang[x];
// if value match do translation
if (value.match(from)) {
content(node, value.replace(from, to));
}
// mark this node as translated
if ($.browser.msie == 'false') {
$(node).data('translated', 'yes');
}
}
これは仕事をしますが、かなり遅いです。多くの調査の結果、joinコマンドを使用して英語の配列をリストベースの文字列に変換できることがわかりました。
しかし、このリストで部分一致を検索し、リスト内の位置を返す関数を思い付くことができません。
2006年に作成されたこの古いjs関数を試していましたが、位置を正しく戻す方法がわかりません。
function listfind(list, value, delimiters) {
if (!delimiters) {
var delimiters = ','
}
_TempListSplitArray = list.split(delimiters)
var FoundIdx = 0;
for (i = 0; i < _TempListSplitArray.length; i++) {
if (_TempListSplitArray[i] == value) {
FoundIdx = i + 1;
break
}
if (value.match(_TempListSplitArray[i])) {
FoundIdx = i + 1;
break
}
}
return FoundIdx
}
お時間をいただきありがとうございます。