2012-06-29 2 views
2

позволяет сказать, что им делать транслят систему, заменить все слова, которые совпавшие в ключе массива со значением согласованного ключа массива позволяет говоритьзаменить несколько слов в строке с массивом в JavaScript

translate = 
    saya: "i", 
    jalan: "walk", 
    hutan: "forest", 
    beli: "buy", 
    ke: "to", 
    apel: "apple", 
}; 

string = "SaYa JaLan ke hutan beli Apel" // case insensitive

должно быть

string = "I walk to forest buy apple" // the translated string

как мы можем сделать это в JavaScript? в функции таким образом, мы можем назвать это как

translated = translate(string) // returns the translated string

+0

Не очень хорошая идея сделать это в JS, еще хуже идея перевести предложение, просто заменив слова. Если вы иначе изучаете, как заменить строки в JS, прочитайте о встроенном методе '.replace()' в MDN] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/ String/replace) – MilkyWayJoe

+0

Есть ли у вас какие-либо другие предложения? и почему не стоит переводить предложение, просто заменяя слова в javascript? – user1489281

+0

Во-первых, что вы * на самом деле пытаетесь? переводческая услуга или вы просто хотите перевести часть своего сайта или что? – MilkyWayJoe

ответ

2
function translate(txt) { 
    var translate = { 
     saya: "i", 
     jalan: "walk", 
     hutan: "forest", 
     beli: "buy", 
     ke: "to", 
     apel: "apple" 
    }; 

    for (var key in translate) { 
     txt = txt.replace(new RegExp(key, "ig"), translate[key]); 
    } 
    return txt.charAt(0).toUpperCase() + txt.slice(1); //Capitalize the first 
}               // letter. 

var translated = translate("SaYa JaLan ke hutan beli Apel"); 
//"I walk to forest buy apple" 

Demo: http://jsfiddle.net/DerekL/2ucEk/

+0

Что такое 'ig'? вы можете объяснить больше? – user1489281

+1

@ user1489281 - 'ig' означает' g: Заменить каждое слово, которое соответствует, i: case insesitive' –

+1

'i' означает нечувствительность к регистру (не имеет значения, являются ли слова верхними или нижними); 'g' означает глобальный, поэтому он проверяет всю строку, а не только первое вхождение (что является поведением по умолчанию в js, а не C# или других языках) – MilkyWayJoe

-1

JS Noobie сам, но я думаю, что это должно работать. Слова разные, но процесс один и тот же.

lexicon = new Object(); 
lexicon.merry = "god"; 
lexicon.christmas = "jul"; 
lexicon.and = "och"; 
lexicon.happy = "gott"; 
lexicon.new = "nytt"; 
lexicon.year = "ar"; 

function translate(){ 

    //use to show translation: 
    //have a merry christmas and a fun new year! 
    var myString = document.getElementById('input').value; 

    myString = myString.replace(/merry/g, lexicon.merry); 
    myString = myString.replace(/christmas/g, lexicon.christmas); 
    myString = myString.replace(/and/g, lexicon.and); 
    myString = myString.replace(/happy/g, lexicon.happy); 
    myString = myString.replace(/new/g, lexicon.new); 
    myString = myString.replace(/year/g, lexicon.year); 

    document.write(myString); 
} 
+0

'new Object()' is bad. Множественная «замена» - это плохо. –

+0

@Derek, я должен использовать фигурные скобки и определить это явно? Кроме того, я понимаю, что это было неэффективно, но не знало, как это сделать в цикле for, пока я не увидел это так, спасибо за объяснение. – Daniel

+0

Подробнее о циклическом перемещении по объекту см. В [MDN docs 'for ... in'] (https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in). ';)' –

Смежные вопросы