在运行时翻译验证消息

Translating validation messages in runtime

我的第一个 post 在这里所以请善待 :)

我们正在开发一个商业应用程序,使用 breeze 作为实体管理器,该应用程序需要翻译成几种不同的语言。用户应该能够在不刷新页面的情况下更改语言。翻译 breeze 验证消息非常简单,但在创建实体管理器后应用一段时间后,它们似乎没有任何效果。说明问题的代码:

breeze.Validator.messageTemplates["maxLength"] = "This will be displayed";

var manager = new breeze.EntityManager();

breeze.Validator.messageTemplates["maxLength"] = "This will also be displayed, overriding the first one";

setTimeout(function(){
    breeze.Validator.messageTemplates["maxLength"] = "This will not be displayed however";
    console.log("is set now");
}, 10000); // or sometime in the future when user changes language

有没有办法在应用程序运行时随时更改验证消息?

此致

安德烈亚斯

回答我自己的问题..

显然在加载元数据后修改 "breeze.Validator.messageTemplates" 数组没有任何效果。

我 "fixed" 的方式是在元数据中找到的每个实体的每个 属性 上的每个验证器上设置消息。

function loadTranslatedValidationMessages() {
    var manager = datacontext.manager;
    var entityTypes = manager.metadataStore.getEntityTypes();

    angular.forEach(entityTypes, function(entityType){
        var properties = entityType.getProperties();
        angular.forEach(properties, function(property){
            var validators = property.validators;
            angular.forEach(validators, function(validator){
                if (we have translation for this validation){
                    var newMessage = call translation;
                    validator.context.messageTemplate = newMessage;
                }
            });
        });
    });
}