Histórico da Página
Apresentação
O Usuário Internacional surgiu para possibilitar que usuários de diferentes localidades utilizem o Datasul. Considere uma empresa brasileira com filial na Argentina: enquanto os usuários do Brasil podem visualizar os textos de tela em português, os usuários argentinos podem visualizar estes mesmos textos no idioma espanhol.
Para atender a esta necessidade, foi preciso adaptar o método de tradução já existente das interfaces Flex e Metadados.
Para entender melhor o que há de novo, segue um exemplo:
Antes a literal de tradução era composta conforme apresentado pela tabela abaixo:.
Literal criada utilizando o padrão <CONTEXTO DE NEGÓCIO>.<LITERAL>.<CONTEXTO DE UTILIZAÇÃO>. | ||
---|---|---|
Literal | Locale | Tradução |
universal.new.label | pt_BR | Novo |
en_US | New | |
es_ES | Nuevo |
Agora a literal de tradução está mais simplificadasimples, conforme apresentado pela tabela abaixo: .
Literal sem o padrão, onde a literal é o próprio texto em português. | ||
---|---|---|
Literal | Locale | Tradução |
Novo | pt_BR | Novo |
en_US | New | |
es_ES | Nuevo |
Nota |
---|
Não haverá mais tratamento de contexto por literal de tradução; Atualmente não está sendo tratado a exceção da tradução de uma literal. |
...
Fle
Âncora | ||||
---|---|---|---|---|
|
Para não prejudicar o legado já desenvolvido em Flex, na utilização da metodologia de tradução, foram reaproveitados os métodos já existentes.
São eles:
Classe I18nUtil.as
Método : getLabel.Bloco de código theme Eclipse language javascript linenumbers actionscript3 true /** * Retorna o String Id traduzido. Caso não encontre o mesmo * será retornado o label informado como parametro * * @param label * @param stringID * @return * */ public static function getLabel(label:String, stringID:String=null):String { var uLabel:String = ""; var runtimeMode:String = PropertyUtil.getInstance().getProperty("runtime.mode", "production"); var trans:String = ""; if(stringID==null){ if(label!=null){ uLabel = stringReplaceAll(label, " ", "_"); trans = I18NService.translate(uLabel); }else{ label = ""; } if(trans == uLabel){ trans = label; } }else{ uLabel = stringReplaceAll(stringID, " ", "_"); trans = I18NService.translate(stringIDuLabel); if (trans == stringIDuLabel) { trans = label; if (runtimeMode != "production") { trans += "#"; } } } return trans; }
Classe I18NService.as
Método translateBloco de código theme Eclipse language javascript linenumbers true public static function translate(key:String):String { var result:String = strings.getValue(key) as String; if (result == null) { result = literals[key] as String; } if(result == null){ result = key; } return trans; }result; }
Informações |
---|
Os métodos são do tipo "static", portanto, para utilizá-los, não há necessidade de instanciar a classe onde os mesmos foram definidos. |
Em ambos os métodos o desenvolvedor pode optar por utilizar a string id ou a própria literal em português. As formas de utilização são as seguintes:
Antigo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
<mx:Button label="{I18NService.translate('universal.save.button')}"
click="this.controller.saveCustomer()" styleName="focalButton" id="saveButton" /> |
Novo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
<mx:Button label="{I18NService.translate('Salvar')}"
click="this.controller.saveCustomer()" styleName="focalButton" id="saveButton" /> |
Antigo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
<mx:Button label="{I18nUtil.getLabel('Salvar', 'universal.save.button')}"
click="this.controller.saveCustomer()" styleName="focalButton" id="saveButton" /> |
Novo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
<mx:Button label="{I18nUtil.getLabel('Salvar')}"
click="this.controller.saveCustomer()" styleName="focalButton" id="saveButton" /> |
Os métodos utilizados nos exemplos acima funcionam tanto no modo de utilização antiga quanto na nova.
Para utilizar as classes citadas acima é necessário adicionar a dependência abaixo no arquivo pom.xml do seu projeto Flex.
Bloco de código | ||
---|---|---|
| ||
<dependency>
<groupId>com.datasul.framework</groupId>
<artifactId>datasul-framework-i18n-flex</artifactId>
<version>${pom.version}</version>
<type>swc</type>
<scope>merged</scope>
</dependency> |
Met
Âncora | ||||
---|---|---|---|---|
|
ABL Script
Foi atualizado o método de tradução GET-TRANSLATION.
Este método deixou de receber como parâmetro a literal de tradução em formato stringId (<contexto de negócio>.<literal>.<contexto de utilização>) e passou a receber a palavra/texto em português como parâmetro, conforme abaixo.
Antigo:
Bloco de código | ||
---|---|---|
| ||
DEFINE VARIABLE translatedText AS CHARACTER.
translatedText = GET-TRANSLATION("universal.close.button"). |
Novo:
Bloco de código | ||
---|---|---|
| ||
DEFINE VARIABLE translatedText AS CHARACTER.
translatedText = GET-TRANSLATION("Fechar"). |
IDE Metadados
A tradução de literais em formulários Metadados também sofreu alteração visando adequar-se à funcionalidade do Usuário Internacional.
Aviso | ||
---|---|---|
| ||
As alterações relativas ao Usuário Internacional contemplam apenas CRUD FreeForm e FreeForm. Formulários do tipo CRUD antigo não são suportados pela nova técnica. |
Section | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
Ao instalar o formulário Metadado, será criada uma versão para cada idioma/localidade cadastrada no produto. Ao ser executado pelo menu ou pela IDE, será utilizada a versão correspondente ao idioma do usuário corrente.
Cada versão de formulário será armazenada em uma pasta distinta no servidor de aplicação, conforme segue:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
<pasta raiz metadado>
|
+- MD ou MD_CUSTOM ou MD_DES
|
+- <versão>
|
+- <usuário>
|
+- view
|
+- <aplicação>
|
+- crudfreeform ou freeform
|
+- <formulários pt_BR>
|
+- es_ES ou en_EN
|
+- <formulários outros idiomas> |
O idioma pt_BR é o padrão para o produto, por isso, os formulários correspondentes serão armazenados diretamente abaixo da pasta freeform/crudfreeform. Os formulários nos demais idiomas serão armazenados em pastas correspondentes, abaixo da pasta freeform/crudfreeform.