在运行时转换验证消息

时间:2015-03-20 06:38:43

标签: breeze

我在这里的第一篇文章所以请善待:)

我们正在使用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

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

此致

安德烈亚斯

1 个答案:

答案 0 :(得分:0)

回答我自己的问题..

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

我“修复”它的方式是在元数据中找到的每个实体的每个属性上的每个验证器上设置消息。

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