我正在尝试本地化Korzh组件EasyQuery。我实际上已经成功地将ui消息本地化了。但实体名称,属性和运营商仍然绝对保持英语。
这就是我所做的(参考korzh.com上描述的步骤。
$(document).ready(function() {
var culture = $('#hidCulture').val();
if (culture.contains('nl')) {
EQ.core.texts = getDutchText();
} else if (culture.contains('fr')) {
EQ.core.texts = getFrenchText();
} else {
EQ.core.texts = getEnglishText();
}
});
文本资源来自另一个文件,如下所示:
getFrenchText = function() {
return {
Local: "fr",
AltMenuAttribute: "Attribute",
AltMenuAttribute: "Attribut",
...
StrAddColumns: "Ajouter des colonnes",
Entities: {
"Company": "Entreprise",
"Office": "Site",
...
},
Attribute: {
"Company.Name": "Nom",
...
},
Operators: {
"Equal": {
"caption": "Egal à",
"displayFormat": "{expr1} [[est égal à]] {expr2}"
}
};
}
还有其他使用resource or property files的解决方案,但它不符合我的需求。据我所知,它没有本地化实体名称。
这里结束了最后一次尝试。有没有人遇到过同样的问题?
答案 0 :(得分:1)
我无法使用javascript解决问题。
我首先想到使用EasyQuery提供的数据模型编辑器在一种语言中对实体和属性标题进行硬编码。这个解决方案只允许我通过xml文件使用一种语言或一种语言。我认为,为每种语言生成不同的xml是一个非常糟糕的主意。
在查询构建器控制器中,有一个加载模型的方法。我只是添加了一个方法来递归查找资源集中的标题。
[HttpPost]
public ActionResult GetModel(string modelName)
{
var dbModel = _eqService.GetModel(modelName);
var resources = EasyQueryModule.ResourceManager.GetResourceSet(
CultureInfo.CurrentUICulture, false, true
);
Translate(dbModel.EntityRoot.SubEntities, resources);
return Json(dbModel.SaveToDictionary());
}
private static void Translate(IEnumerable<Entity> entities, ResourceSet resources)
{
entities.ForEach(entity =>
{
entity.Name = resources.GetString(entity.Name) ?? entity.Name;
entity.Attributes.ForEach(attribute =>
attribute.Caption = resources.GetString(attribute.Caption) ?? attribute.Caption
);
Translate(entity.SubEntities, resources);
});
}
这可能不是本地化小部件的最有效方式。我还没找到更好的东西。请注意,我在缺少资源项
的情况下防止了错误对于我的担忧,本地化的运营商会很好,但不是强制性的。在进一步调查之前,他们一直保持英语。