Olá, neste post irei demonstrar como você pode deixar a sua aplicação Xamarin.Forms Multilíngue, respeitando o idioma padrão definido nas configurações do dispositivo.
ADICIONANDO O NUGET PACKAGE
Para este exemplo irei utilizar o Nuget Package “Plugin.Multilingual“, para adicionar em seu projeto, clique com o botão direito em cima de sua Solution e selecione “Manage NuGet Packages for Solution…”
Digite “Plugin.Multilingual” e selecione o plugin como demonstrado na imagem a seguir.
Selecione todos os projetos e clique no botão “Install”.
TranslateExtension
Após a instalação do nuget, é possivel observar que uma pasta chamada “Helpers” foi criada, contendo um arquivo chamado “TranslateExtension.txt”, é necessário que esse arquivo seja uma classe.
Para isso, renomeie o arquivo, modificando a sua extensão para “.cs”, como demonstrado na imagem a seguir:
AppResources
O passo seguinte é adicionar os arquivos Resources em seu projeto Portable, para isso clique com o botão direito em cima do seu projeto Portable, selecione “add” e na sequência “New Item…”.
Os arquivos de Resources, possuem a extensão “.resx”, porém não temos essa opção de arquivo, mas isso não será problema, selecione “Text File” e na hora de nomear o arquivo, mude a extensão para “.resx”, como demonstrado a seguir:
O arquivo AppResources.resx servirá como como um “dicionário” para o app, você terá que adicionar um para cada idioma que desejar, nele irá conter basicamente 3 campos, sendo eles:
Name – Nome dado para o seu texto, esse nome terá que ser o mesmo em todos os arquivos “.resx”.
Value – Esse campo será o texto em si, de acordo com o idioma desejado. Esse campo deverá ser diferente de acordo com cada arquivo “.resx”, respeitando o idioma.
Coment – Campo para adicionar algum comentário, esse campo não é obrigatório.
Definindo o idioma padrão.
Para definir quais idiomas a sua aplicação irá suportar, escolha primeiro o idioma padrão, os textos com o idioma padrão deverá ficar no arquivo “AppResources.resx”, caso algum usuário utilize em um dispositivo com um idioma que a sua aplicação não preste suporte, o app irá utilizar o idioma padrão, ou seja, o arquivo “AppResources.resx”.
Para este exemplo defini como idioma padrão o inglês, e adicionei uma mensagem de bem-vindo.
Português
Adicione outro arquivo “.resx”, porém com o seguinte nome: “AppResources.pt-BR.resx”, adicione novamente a mensagem “WelcomeMessage”, porém no campo “Value” informe “Bem-vindo”, como demonstrado a seguir:
Francês
Adicione outro arquivo “.resx”, porém com o seguinte nome: “AppResources.fr.resx”, adicione novamente a mensagem “WelcomeMessage”, porém no campo “Value” informe “Bienvenue”, como demonstrado a seguir:
App.cs
Adicione as informações de cultura definida no dispositivo para o AppResources.
using Plugin.Multilingual; | |
using Xamarin.Forms; | |
namespace Multilingual | |
{ | |
public partial class App : Application | |
{ | |
public App() | |
{ | |
InitializeComponent(); | |
AppResources.Culture = CrossMultilingual.Current.DeviceCultureInfo; | |
MainPage = new MainPage(); | |
} | |
… |
Xaml
No arquivo xaml, referencie o namespace “Helpers” e adicione uma Label, na propriedade Text da label, adicione WelcomeMessage , como demonstrado a seguir:
<?xml version="1.0" encoding="utf-8" ?> | |
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" | |
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" | |
xmlns:local="clr-namespace:Multilingual" | |
x:Class="Multilingual.MainPage" | |
xmlns:translator="clr-namespace:Multilingual.Helpers"> | |
<ContentPage.Content> | |
<StackLayout> | |
<Label Text="{translator:Translate WelcomeMessage}" | |
VerticalOptions="CenterAndExpand" | |
HorizontalOptions="CenterAndExpand" /> | |
</StackLayout> | |
</ContentPage.Content> | |
</ContentPage> |
Resultado
Inglês
Português
Francês
Esse e todos os exemplos deste blog encontram-se disponíveis no GitHub.
E como eu faço com imagens ?
CurtirCurtir
Olá Renan,
Não sei se entendi a sua pergunta direito, mas a ideia desse plugin é montar um “dicionário de textos” para utilizar de acordo com a língua especificada. Acredito não ser possível com esse plugin manipular textos de uma imagem.
CurtirCurtir