在我的网络应用程序中,所有文本都通过以下方法呈现:
@GetLangText("SomeKeyForText")
数据库中尚未存在的文本将自动添加。如果有人在数据库中添加了翻译,它将在运行时显示,而不仅仅是键。
我开始玩 Ext JS 。
我正在寻找一种直接的方法来从数据库中获取我自己的所有文本。我可以使用标准文本的现有本地化。
我想在数据库中管理我的Web应用程序的翻译。管理员应该能够在DB中运行时定义或更正应用程序的任何文本。
我正在考虑使用其中一种解决方法在JavaScript中使用razor(如显示here)。但也许有更好的方法,特别是当我们谈论组合 Ext JS 和 ASP.NET C#时。
我正在使用Sencha Cmd。如果有可能我想避免产生一些无法使用Sencha Cmd编译的剃刀代码。
sencha文档和示例没有关于自定义文本翻译的大量信息。
答案 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));
未测试!