Локализация Korzh EasyQuery в asp.net mvc

Я пытаюсь локализовать компонент Korzh EasyQuery. Я на самом деле на полпути, как мне удалось локализовать сообщения пользовательского интерфейса. Но имена сущностей, атрибуты и операторы отчаянно остаются на английском языке.

Вот что я сделал (см. Шаг, описанный на 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}"
        }
    };
}

Существуют и другие решения, использующие файлы ресурсов или свойств, но они не соответствуют моим потребностям. Как я понял, это не локализует имена сущностей.

Здесь заканчивается последняя попытка. Кто-нибудь встречал такую ​​же проблему?

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

Это может быть не самый эффективный способ локализации виджета. Я не нашел ничего лучше. Обратите внимание, что я предотвратил ошибку в случае отсутствия элемента ресурса

На мой взгляд, локализованные операторы были бы хорошими, но не обязательными. Они остаются на английском языке до дальнейшего расследования.

Другие вопросы по тегам