Diferencia entre revisiones de «Internacionalización»
| (No se muestran 6 ediciones intermedias de otro usuario) | |||
| Línea 119: | Línea 119: | ||
| − | * | + | * Cando queiramos empregar un texto cunha función que non acepte un recurso da clase R de tipo R.string.nome_recurso, deberemos facer uso da función getResources().getString("R.string.nome_recurso") a cal devolvería unha cadea (String) no idioma adecuado. |
| − | : | + | : A través desta función (getResources()) podemos recuperar, chamando a diferentes métodos, todo tipo de recurso gardado en /res/. |
| + | : <u>Nota</u> Tamén se podería empregar directamente a función getString("R.string.nome_recurso"). | ||
| + | : Máis información [https://wiki.cifprodolfoucha.es/index.php?title=PDM_Acceso_a_recursos na sección da Wiki de Acceso a Recursos] | ||
| + | |||
| + | |||
| + | |||
| + | <br /> | ||
| + | *<u>Nota:</u> Lembra que ata o de agora as Acitivities creadas teñen un label 'posto a man' por nos no arquivo '''AndroidManifiest.xml'''. | ||
| + | : Deberían ir referenciadas nun arquivo externo de tipo 'values' => 'string'. Lembra cambialo no teu proxecto (soamente debería levar etiqueta a nivel de proxecto, non de activity). | ||
| Línea 136: | Línea 144: | ||
<u>Nota</u>: a letra r fai referencia á rexión. | <u>Nota</u>: a letra r fai referencia á rexión. | ||
| − | Para facilitarnos o traballo, | + | Para facilitarnos o traballo, Android Studio dispón dunha pantalla na que podemos indicar que 'características' queremos que teña o noso arquivo de recursos e automaticamente xa engade por nós os sufixos necesarios. |
| + | |||
| + | |||
| + | <gallery caption="Creando un novo arquivo de recursos" widths="350" heights="300px" perrow="2"> | ||
| + | Image:PDM_Internacio_5.jpg| Prememos o botón dereito sobre o cartafol /res/ ou /res/values/. Se o facemos sobre /res/ aparecerá unha combo extra na que teremos que escoller o tipo 'values'. | ||
| + | Image:PDM_Internacio_5b.jpg| Debemos pasar a 'propiedade' SIZE dende a lista da esquerda á dereita (premendo o botón coa dirección dereita) | ||
| + | Image:PDM_Internacio_6.jpg| Neste exemplo estamos a crear un recurso de tipo layout para pantallas de 7-10 pulgadas (tamaño x-large), entón teríamos que crear un layout nun cartafol ‘layout-xlarge’. Ó facelo, podedes observar como na parte baixa aparece o nome co sufixo correcto. Ademais crearase un cartafol físico có dito sufixo. | ||
| + | Image:PDM_Internacio_7.jpg| Podemos combinar varias propiedades no mesmo arquivo. No exemplo, soamente se cargarán as entradas definidas no arquivo xml cando o dispositivo sexa x-large, o idioma estea configurado como español y o dispositivo teña unha orientación horizontal. Fixarse que o sufixo (e por tanto o cartafol a nivel de S.O.) será: -es-xlarge-land | ||
| + | </gallery> | ||
| + | |||
| − | |||
| − | |||
| − | + | *Na versión '''Lollipop''' (API 21, android 5.0) xa se inclúe o idioma galego. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | < | + | * Tamén temos a opción de crear estes arquivos de idiomas directamente nun Editor. |
| + | : A través desta ferramenta podemos editar calquera arquivo en /res/values e asociarlle diferentes idiomas graficamente e introducir a súa tradución: | ||
| + | <gallery caption="Creando novos arquivos de idiomas có Translation Editor" widths="350" heights="300px" perrow="2"> | ||
| + | Image:PDM_Internacio_1.jpg| Sobre un arquivo xml do cartafol /res/values prememos o botón dereito e escollemos a opción '''Open Translations Editor'''. | ||
| + | Image:PDM_Internacio_2.jpg| Premendo no botón + creamos unha nova entrada no arquivo XML. | ||
| + | Image:PDM_Internacio_3.jpg| Se queremos crear un novo arquivo cun idioma diferente debemos premer o botón '''Add Locale'''. | ||
| + | Image:PDM_Internacio_4.jpg| Unha vez engadido o idioma aparecerá unha nova columna para cada unha das entradas do arquivo. Crearase o arquivo no cartafol do idioma engadido e poderemos indicar si algunha das entradas non ten tradución (<u>opción Untranslatable</u>) có que indicaremos que dita entrada collerá o valor do arquivo default en calquera idioma que esteamos. | ||
| + | </gallery> | ||
| − | |||
| − | |||
| − | |||
| − | < | + | <br /> |
| + | '''[https://wiki.cifprodolfoucha.es/index.php?title=Programaci%C3%B3n_de_dispositivos_m%C3%B3biles#UNIDADE_2:_A_interface_de_usuario. Enlace a la página principal de la UD2]''' | ||
| + | <br /> | ||
| + | <br /> | ||
| + | '''[https://wiki.cifprodolfoucha.es/index.php?title=Programación_de_dispositivos_móbiles Enlace a la página principal del curso]''' | ||
| + | <br /> | ||
| − | |||
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]] e [[Usuario:Carrion|Carlos Carrión Álvarez]] -- (2015). | <br> -- [[Usuario:angelfg|Ángel D. Fernández González]] e [[Usuario:Carrion|Carlos Carrión Álvarez]] -- (2015). | ||
Revisión actual del 12:59 21 nov 2020
Sumario
Introdución
- Tamén temos outras formas de personalizar as nosas aplicacións en base a unha serie de sufixos.
- Se queremos que as cadeas de constantes estean traducidas a varios idiomas, só temos que crear un cartafol novo de nome values-?? onde ?? é o idioma.
- Para o inglés teriamos /res/values-en, /res/values-es para o español,....
- O idioma por defecto será o que estea gardado en /res/values.
- So se deben cambiar os valores das contanstes, os identificadores deben ser os mesmos.
- Referencias:
Caso práctico
- Crear un novo proxecto: U2_41_Internacional
- Imos en /res/values definimos as cadeas de texto en galego e esas mesmas cadeas as definimos en inglés en /res/values-en.
- Para probar a aplicación hai que cambiar o idioma do sistema como se viu na Unidade 1.
- TableLayout Dinánico
strings.xml de /res/values
1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3
4 <string name="app_name">U2_41_Internacional</string>
5 <string name="action_settings">Settings</string>
6 <string name="idioma">Esta aplicación, por defecto, está en galego!</string>
7 <string name="boton">Preme aquí</string>
8 <string name="mensaxe_toast">Premeches o botón!</string>
9
10 </resources>
strings.xml de /res/values-en
1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3
4 <string name="app_name">U2_41_Internacional</string>
5 <string name="action_settings">Settings</string>
6 <string name="idioma">This app is by default in galician language!</string>
7 <string name="boton">Click here</string>
8 <string name="mensaxe_toast">You have clicked on the button!</string>
9
10 </resources>
O XML do layout
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical" >
6
7 <TextView
8 android:layout_width="wrap_content"
9 android:layout_height="wrap_content"
10 android:text="@string/idioma" />
11
12 <Button
13 android:layout_width="wrap_content"
14 android:layout_height="wrap_content"
15 android:text="@string/boton"
16 android:onClick="onBotonClick" />
17
18
19 </LinearLayout>
- Liñas 10 e 15: Agora temos que traballar con constantes, non podemos poñer o texto a lume.
O código Java
1 package com.example.u2_41_internacional;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.Menu;
6 import android.view.View;
7 import android.widget.Toast;
8
9 public class U2_41_Internacional extends Activity {
10
11 @Override
12 protected void onCreate(Bundle savedInstanceState) {
13 super.onCreate(savedInstanceState);
14 setContentView(R.layout.activity_u2_41__internacional);
15 }
16
17 @Override
18 public boolean onCreateOptionsMenu(Menu menu) {
19 // Inflate the menu; this adds items to the action bar if it is present.
20 getMenuInflater().inflate(R.menu.u2_41__internacional, menu);
21 return true;
22 }
23
24 public void onBotonClick(View v) {
25 Toast.makeText(this, R.string.mensaxe_toast, Toast.LENGTH_SHORT).show();
26 }
27 }
- Liña 25 observar como o toast tamén colle a cadea de texto dos recursos tipo string.
Consideracións a ter en conta
- Cando queiramos empregar un texto cunha función que non acepte un recurso da clase R de tipo R.string.nome_recurso, deberemos facer uso da función getResources().getString("R.string.nome_recurso") a cal devolvería unha cadea (String) no idioma adecuado.
- A través desta función (getResources()) podemos recuperar, chamando a diferentes métodos, todo tipo de recurso gardado en /res/.
- Nota Tamén se podería empregar directamente a función getString("R.string.nome_recurso").
- Máis información na sección da Wiki de Acceso a Recursos
- Nota: Lembra que ata o de agora as Acitivities creadas teñen un label 'posto a man' por nos no arquivo AndroidManifiest.xml.
- Deberían ir referenciadas nun arquivo externo de tipo 'values' => 'string'. Lembra cambialo no teu proxecto (soamente debería levar etiqueta a nivel de proxecto, non de activity).
Estes sufixos que estamos a utilizar (-land; -es) poden ser combinados entre eles e con outros moitos diferentes.
No seguinte enlace aparece dita orde de prefixos.
Por exemplo:
- res/values-en-rUS/strings.xml
- res/values-en-rUK/strings.xml
Onde o segundo sufixo fai referencia a inglés ‘americano’ (en-rUS) ou ‘ inglés’ do Reino Unido (en-rUK).
Nota: a letra r fai referencia á rexión.
Para facilitarnos o traballo, Android Studio dispón dunha pantalla na que podemos indicar que 'características' queremos que teña o noso arquivo de recursos e automaticamente xa engade por nós os sufixos necesarios.
- Creando un novo arquivo de recursos
Neste exemplo estamos a crear un recurso de tipo layout para pantallas de 7-10 pulgadas (tamaño x-large), entón teríamos que crear un layout nun cartafol ‘layout-xlarge’. Ó facelo, podedes observar como na parte baixa aparece o nome co sufixo correcto. Ademais crearase un cartafol físico có dito sufixo.
Podemos combinar varias propiedades no mesmo arquivo. No exemplo, soamente se cargarán as entradas definidas no arquivo xml cando o dispositivo sexa x-large, o idioma estea configurado como español y o dispositivo teña unha orientación horizontal. Fixarse que o sufixo (e por tanto o cartafol a nivel de S.O.) será: -es-xlarge-land
- Na versión Lollipop (API 21, android 5.0) xa se inclúe o idioma galego.
- Tamén temos a opción de crear estes arquivos de idiomas directamente nun Editor.
- A través desta ferramenta podemos editar calquera arquivo en /res/values e asociarlle diferentes idiomas graficamente e introducir a súa tradución:
- Creando novos arquivos de idiomas có Translation Editor
Unha vez engadido o idioma aparecerá unha nova columna para cada unha das entradas do arquivo. Crearase o arquivo no cartafol do idioma engadido e poderemos indicar si algunha das entradas non ten tradución (opción Untranslatable) có que indicaremos que dita entrada collerá o valor do arquivo default en calquera idioma que esteamos.
Enlace a la página principal de la UD2
Enlace a la página principal del curso
-- Ángel D. Fernández González e Carlos Carrión Álvarez -- (2015).