62
задан 24 October 2008 в 15:45

3 ответа

function Language(lang)
{
    var __construct = function() {
        if (eval('typeof ' + lang) == 'undefined')
        {
            lang = "en";
        }
        return;
    }()

    this.getStr = function(str, defaultStr) {
        var retStr = eval('eval(lang).' + str);
        if (typeof retStr != 'undefined')
        {
            return retStr;
        } else {
            if (typeof defaultStr != 'undefined')
            {
                return defaultStr;
            } else {
                return eval('en.' + str);
            }
        }
    }
}

После добавления этого к Вашей странице, можно работать с ним как это:

var en = {
    SelPlace:"Select this place?",
    Save:"Saved."
};

var tr = {
    SelPlace:"Burayı seçmek istiyor musunuz?"
};

var translator = new Language("en");
alert(translator.getStr("SelPlace")); // result: Select this place?
alert(translator.getStr("Save")); // result: Saved.
alert(translator.getStr("DFKASFASDFJK", "Default string for non-existent string")); // result: Default string for non-existent string

var translator = new Language("tr");
alert(translator.getStr("SelPlace")); // result: Burayı seçmek istiyor musunuz?
alert(translator.getStr("Save")); // result: Saved. (because it doesn't exist in this language, borrowed from english as default)
alert(translator.getStr("DFKASFASDFJK", "Default string for non-existent string")); // result: Default string for non-existent string

, Если Вы называете класс с языком, который Вы не определили, английский язык ( en) будет выбран.

12
ответ дан 31 October 2019 в 13:35

После чтения больших ответов nickf и Leo, я создал следующий стиль CommonJS language.js для управления всеми моими строками (и дополнительно, Усы для форматирования их):

var Mustache = require('mustache');

var LANGUAGE = {
    general: {
        welcome: "Welcome {{name}}!"
    }
};

function _get_string(key) {
    var parts = key.split('.');
    var result = LANGUAGE, i;
    for (i = 0; i < parts.length; ++i) {
        result = result[parts[i]];
    }
    return result;
}

module.exports = function(key, params) {
    var str = _get_string(key);
    if (!params || _.isEmpty(params)) {
        return str;
    }
    return Mustache.render(str, params);
};

И это - то, как я получаю строку:

var L = require('language');
var the_string = L('general.welcome', {name='Joe'});
5
ответ дан 31 October 2019 в 13:35

Для пакетов Spring и JavaScript там простое решение: генерируйте массив i18n в шаблоне (например, JSP) и используйте его в JavaScript:

JSP:

<html>
<script type="text/javascript">
    var i18n = [];
    <c:forEach var='key' items='<%=new String[]{"common.deleted","common.saved","common.enabled","common.disabled","...}%>'>
        i18n['${key}'] = '<spring:message code="${key}"/>';
    </c:forEach>
</script>
</html>

И в JS:

alert(i18n["common.deleted"]);

См. также Разрешение spring:messages в JavaScript для i18n интернационализации

0
ответ дан 31 October 2019 в 13:35

Другие вопросы по тегам:

Похожие вопросы: