Angular – Internacionalização – Adicionando suporte RTL

Coleção AngularJs Meetup South London | Este artigo

Neste protocolo iremos implementar um suporte rtl básico. Vamos definir um sinalizador para usar em nossas classes css usando a mesma abordagem usada pela Modernizr . Você pode verificar o protocolo anterior para obter mais detalhes sobre a configuração inicial aqui .

Criação de uma função de sinalizador RTL

//language module
angular
.module('myapp.language', ['pascalprecht.translate'])

.config(function($httpProvider, $translateProvider) {
... //seen before
})

// Service definition
.factory('Language', function ($translate) {
//add the languages you support here. ar stands for arabic
var rtlLanguages = ['ar'];

var isRtl = function() {
var languageKey = $translate.proposedLanguage() || $translate.use();
for (var i=0; i<rtlLanguages.length; i+=1) {
if (languageKey.indexOf(rtlLanguages[i])>-1)
return true;
}
return false;
};

//public api
return {
isRtl
: isRtl
};
});

Mudanças em index.html

Usaremos o sinalizador rtl para adicionar uma classe ao elemento html. Isso será usado posteriormente como parte de um seletor de css.

<html ng-app="myapp" ng-class="{'rtl':Language.isRtl()}">

Mudanças no app.js

Precisamos adicionar a dependência do módulo de linguagem e expor o serviço à página.

angular.module('myapp', [ 
...
'myapp.language',
...
])
.run(function($rootScope, Language, ...) {
//make the service available
$rootScope
.Language = Language;
...
});

Uso de CSS

Para aplicar as mudanças direcionadas a diferentes classes ou elementos, use:

.className img { float:right; }
.rtl .className img { float:left; }

MENOS uso

.className { 
img
{ float: right; }

.rtl & {
img
{ float: left; }
}
}

Atributo dir HTML

Para nos ajudar durante o layout de textos específicos, também podemos definir o atributo de direção do texto. A sintaxe é <element dir="ltr|rtl|auto">. Iremos vinculá-lo ao sinalizador anterior para configurar todo o aplicativo. Ao definir este atributo, o navegador tenta obter o resultado desejado na maioria dos casos.

<html ng-app="myapp" ... dir="{{(Language.isRtl())?'rtl':'ltr'}}">

Recursos

Localidades angulares com suporte

Código de demonstração: link

Coleção AngularJs Meetup South London | Este artigo