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:
...
Agora a literal de tradução está mais simplificadasimples, conforme apresentado pela tabela abaixo.
...
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 getLabelBloco de código theme Eclipse language javascript linenumbers actionscript3true 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 I18NService.as
Método translateBloco de código theme Eclipse language javascript linenumbers trueactionscript3 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 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 para .
Este método deixou de receber como parâmetro não mais o stringId, e sim 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 pode-se visualizar no exemplo parâmetro, conforme abaixo.
Antigo:
Bloco de código | ||
---|---|---|
| ||
DEFINE VARIABLE translatedText AS CHARACTER.
translatedText = GET-TRANSLATION("universal.close.button"). |
...
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.