在运行时翻译验证消息
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;
}
});
});
});
}
我的第一个 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;
}
});
});
});
}