1

我正在尝试本地化 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}"
        }
    };
}

还有其他使用资源或属性文件的解决方案,但它不符合我的需求。据我了解,它不会本地化实体名称。

最后的尝试到此结束。有没有人遇到过同样的问题?

4

1 回答 1

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);
    });
}

这可能不是本地化小部件的最有效方式。我还没有找到更好的东西。请注意,我在缺少资源项的情况下防止了错误

就我而言,本地化运营商会很好,但不是强制性的。在进一步调查之前,他们仍然使用英语。

于 2015-09-18T14:53:19.940 回答