Árvore de páginas

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>.
LiteralLocaleTradução
universal.new.labelpt_BRNovo
en_USNew
es_ESNuevo


Agora a literal de tradução está mais simples, conforme apresentado pela tabela abaixo.

Literal sem o padrão, onde a literal é o próprio texto em português.
LiteralLocaleTradução
Novopt_BRNovo
en_USNew
es_ESNuevo

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 x

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:

  1. Classe I18nUtil.as
    Método getLabel

    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(uLabel);
                    
            if (trans == uLabel) {
                trans = label;
                if (runtimeMode != "production") {
                    trans += "#";
                }
            }
    	}
    	
    	return trans;
    }


  2. Classe I18NService.as
    Método translate

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



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:

<mx:Button label="{I18NService.translate('universal.save.button')}"
			   click="this.controller.saveCustomer()" styleName="focalButton" id="saveButton" />

Novo:

<mx:Button label="{I18NService.translate('Salvar')}"
			   click="this.controller.saveCustomer()" styleName="focalButton" id="saveButton" />

Antigo:

<mx:Button label="{I18nUtil.getLabel('Salvar', 'universal.save.button')}"
			   click="this.controller.saveCustomer()" styleName="focalButton" id="saveButton" />

Novo:

 <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.

<dependency> 
	<groupId>com.datasul.framework</groupId> 
	<artifactId>datasul-framework-i18n-flex</artifactId> 
	<version>${pom.version}</version> 
	<type>swc</type> 
	<scope>merged</scope> 
</dependency>

 

Met adados

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:

DEFINE VARIABLE translatedText AS CHARACTER. 
translatedText = GET-TRANSLATION("universal.close.button").

Novo:

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.

Importante

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.

Para o desenvolvedor Metadado, basta informar a literal em português nas propriedades correspondentes. Não será mais necessário informar a string Id para tradução.

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:

<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.

 

  • Sem rótulos