Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
ola pessoal
tenho que fazer uma I18N num site, no front-end tudo bem ate agora, me virei com o Java e JSTL.
Porem, no JS estou me "complicando um pouco"
o que pensei em fazer, catalogar todas as mensagem que envio ao usuario em funcao, e chamar a funcao.
por exemplo
function alertObligatory(fieldName){
if(this.locality=='br'){ return 'O campo '+fieldName+' é obrigatorio'};
if(this.locality=='en'){ return 'the field '+fieldName+'is obligatory'};
return 'the field '+fieldName+'is obligatory';
}
a idéia é mais ou menos essa, crio o variavel "global" como this.locality e a partir dela,passo o alert ao usuario.
pensei nisso, porem, existe algo melhor?
alguem teria outra ideia melhor?
acho que é so por enqto
abs
T+
>
Pensei em algo como:
http://cleigomes.net/powersource/Output.aspx?fl=u1janoos.x5w
Para usar basicamente seria assim, no load da página marcaria o idioma, algo como:
Localization.Culture = 'br';
E depois bastaria chamar as funções normalmente deixando para elas decidir qual string receber.
*Note que neste primeiro exemplo a função alertObligatory possui a lógica de decisão.
Um outro exemplo, seria algo como:
http://cleigomes.net/powersource/Output.aspx?fl=qzt5le2z.emd
Um pouco mais complexo, porém mais inteligente. Onde a classe Localization, decide qual string retornar.
*uso
Localization.Culture = 'br';
alert(Localization.alertObligatory.getMessage())
klaygomes
entendi mais ou menos, é que a forma de programacao esta "diferente" da que costumo utilizar.
Culture:'en',//set here culture
DefaultCulture: 'en',
alertObligatory:
....
aqui você
1-cria a variavel Culture e passa o valor 'en' para ela
2-cria a variavel DefaultCulture e passa o valor 'en' para ela
3-cria a variavel alertObrligatory e passa a funcao pra ela
é isso mesmo?
e caso eu queira mudar o valor da variavel Culture eu utilizaria
Localization.Culture = 'br'
é isso?
na parte
var messages = {
br:'O campo {0} é obrigatório.',
en:'the field {0} is obligatory.'
}
aqui você cria um "array" é isso?
e depois sobreescreve na messages com return "String.Format(messages[Localization.Culture], fieldName)"?
é isso?
porem, em casos que eu tenha mais de um {0}, como eu fazia?
atraves do
String.Format = function(str) {
var args = Array
.prototype
.slice
.call(arguments,1);
return str
.replace(/{(\d+)}/g,
function(){return args[RegExp.$1]});
};ele entenderia isso?
me desculpe fazer tantar perguntas, mas como eu te disse, você tem um estilo diferente de programar, o meu em js é o mais "comum" mesmo
nunca utilizei "br:'O campo {0} é obrigatório.'", nao sei muito bem como isso funciona, e se você tiver algum artigo que explique isso, seria muito grato tb
abs
e obrigado pela ajuda
T+
>
(...)e caso eu queira mudar o valor da variavel Culture eu utilizaria
Localization.Culture = 'br'
é isso?
Esta correto,
CODE
var messages = {
br:'O campo {0} é obrigatório.',
en:'the field {0} is obligatory.'
}
aqui você cria um "array" é isso?
e depois sobreescreve na messages com return "String.Format(messages[Localization.Culture], fieldName)"?
é isso?
Na verdade não criei um Array, mas sim um objeto literal, cada propriedade deste objeto fica sendo então uma culture para aquela função em especifico.
Te peço desculpas esta parte do código esta errada, fiz na pressa e não corrigi um pequeno problema que também responde a sua outra dúvida.
A versão correta e sem erros pode ser encontrada aqui:
http://www.cleigomes.net/powersource/Outpu...fl=jxgh3wcs.zhv
Sobre a utilização do String.Format, procure informações no meu blog, endereço claygomes.blogspot.com (não te passo o link direto porque estou no trabalho e blogs são bloqueados)
Pensei em algo como:
http://cleigomes.net/powersource/Output.aspx?fl=u1janoos.x5w
Para usar basicamente seria assim, no load da página marcaria o idioma, algo como:
Localization.Culture = 'br';
E depois bastaria chamar as funções normalmente deixando para elas decidir qual string receber.
*Note que neste primeiro exemplo a função alertObligatory possui a lógica de decisão.
Um outro exemplo, seria algo como:
http://cleigomes.net/powersource/Output.aspx?fl=qzt5le2z.emd
Um pouco mais complexo, porém mais inteligente. Onde a classe Localization, decide qual string retornar.
*uso
Localization.Culture = 'br';
alert(Localization.alertObligatory.getMessage())