基于数据库的JavaScript翻译

时间:2015-01-05 14:53:44

标签: c# asp.net-mvc extjs

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

@GetLangText("SomeKeyForText")

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

我开始玩 Ext JS

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

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

我正在考虑使用其中一种解决方法在JavaScript中使用razor(如显示here)。但也许有更好的方法,特别是当我们谈论组合 Ext JS ASP.NET C#时。

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

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

1 个答案:

答案 0 :(得分:1)

在初始化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));

未测试!