JavaScript 基于数据库的翻译

DB based translation for JavaScript

在我的网络应用程序中,所有文本都是通过如下方法呈现的:

@GetLangText("SomeKeyForText")

数据库中尚不存在的文本将自动添加。如果有人在数据库中添加翻译,它将在运行时显示,而不仅仅是密钥。

我开始玩 Ext JS

我正在寻找一种直接的方法来从数据库中获取我自己的所有文本。我可以接受标准文本的现有本地化。

我想在数据库中管理我的 Web 应用程序的翻译。管理员应该能够在运行时在数据库中定义或更正应用程序的任何文本。

我正在考虑使用一种变通方法在 JavaScript 中使用剃刀(如图 here 所示)。但也许有更好的方法,尤其是当我们谈论组合 Ext JSASP.NET C#.

我正在使用 Sencha Cmd。如果可能的话,我想避免生成一些无法用 Sencha Cmd 编译的剃刀代码。

sencha 文档和示例没有很多关于自定义文本翻译的信息。

在初始化 Ext JS 应用程序之前,使用输出一个包含翻译的 JavaScript 对象:

var LANG = @appTranslations;

/*
The above should render as:

var LANG = {
    alert: {
        title: 'Alert Title',
        message: 'Alert message'
    }
};

*/

Ext.onReady(function() {
    Ext.Msg.alert(LANG.alert.title, LANG.alert.message);
});

其中 appTranslations 是由 ASP.NET MVC 设置的视图变量。自从我完成任何 C# 以来已经有一段时间了,但我发现了一些输出 JSON:

的方法

Razor syntax error serializing ASP.NET Model to JSON with Html.Raw

这种方法的总体思路是您没有做任何特定于 Ext JS 的事情。相反,您要求服务器将一些 JSON 输出到您可以在 Ext JS 中使用的变量中。

下面是一些检测缺失翻译的代码:

var LANG = {
    THIS: {
        THAT: 'HELLO'
    }
};

function getLangText(key, source) {
    var parts = key.split('.'),
        current = source;

    for(var i = 0; i < parts.length; i++) {
        current = current[parts[i]];
    }

    if(current) {
        return current;
    } else {
        return 'Key "' + key + '" not found.';
    }
}

// HELLO
alert(getLangText('THIS.THAT', LANG));

// Key "THIS.THAT.THERE" not found.
alert(getLangText('THIS.THAT.THERE', LANG));

未经测试!