Buscar..


Moneda

Currency currency = Currency.getInstance("USD");
NumberFormat format = NumberFormat.getCurrencyInstance();
format.setCurrency(currency);
format.format(10.00);

Añadiendo traducción a tu aplicación de Android

Tienes que crear un archivo strings.xml diferente para cada nuevo idioma.

  1. Haga clic derecho en la carpeta res
  2. Elegir NuevoArchivo de recursos de valores
  3. Seleccione una configuración regional de los calificadores disponibles
  4. Haga clic en el botón Siguiente (>>)
  5. Selecciona un idioma
  6. Nombra el archivo strings.xml

strings.xml

<resources>
    <string name="app_name">Testing Application</string>
    <string name="hello">Hello World</string>
</resources>

strings.xml (hi)

<resources>
    <string name="app_name">परीक्षण आवेदन</string>
    <string name="hello">नमस्ते दुनिया</string>
</resources>

Configurando el idioma programáticamente:

public void setLocale(String locale) // Pass "en","hi", etc.
{
    myLocale = new Locale(locale);
    // Saving selected locale to session - SharedPreferences.
    saveLocale(locale);
    // Changing locale.
    Locale.setDefault(myLocale);
    android.content.res.Configuration config = new android.content.res.Configuration();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        config.setLocale(myLocale);
    } else {
        config.locale = myLocale;
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        getBaseContext().createConfigurationContext(config);
    } else {
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    }
}

La función anterior cambiará los campos de texto a los que se hace referencia desde strings.xml . Por ejemplo, suponga que tiene las siguientes dos vistas de texto:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="@string/app_name"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="@string/hello"/>

Luego, después de cambiar la configuración regional, las cadenas de idioma que tienen los app_name y hello se cambiarán en consecuencia.

Tipo de directorios de recursos en la carpeta "res"

Al localizar diferentes tipos de recursos se requieren, cada uno de los cuales tiene su propio hogar en la estructura del proyecto de Android. A continuación se muestran los diferentes directorios que podemos colocar en el directorio \res . Los tipos de recursos colocados en cada uno de estos directorios se explican en la siguiente tabla:

Directorio Tipo de recurso
animador/ Archivos XML que definen animaciones de propiedades.
anim / Archivos XML que definen animaciones de interpolación. (Las animaciones de propiedades también se pueden guardar en este directorio, pero se prefiere el animador / directorio para que las animaciones de propiedades distingan entre los dos tipos).
color/ Archivos XML que definen una lista de colores de estado. Ver recurso de lista de estados de color
dibujable / "Archivos de mapa de bits (.png, .9.png, .jpg, .gif) o archivos XML que se compilan en los siguientes subtipos de recursos dibujables:: Bitmap files - Nine-Patches (re-sizable bitmaps) - State lists - Shapes - Animation drawables - Other drawables - "
mipmap / Archivos dibujables para diferentes densidades de iconos de lanzadores. Para obtener más información sobre la administración de los iconos del iniciador con mipmap / carpetas, consulte Administración de proyectos.
diseño/ Archivos XML que definen un diseño de interfaz de usuario. Ver recurso de diseño.
menú/ Archivos XML que definen menús de aplicaciones, como un menú de opciones, un menú contextual o un submenú. Ver recurso de menú.
crudo/ Archivos arbitrarios para guardar en su forma cruda. Para abrir estos recursos con un InputStream sin formato, llame a Resources.openRawResource () con el ID de recurso, que es R.raw.filename.
Sin embargo, si necesita acceder a los nombres de archivos originales y a la jerarquía de archivos, puede considerar guardar algunos recursos en el directorio de activos (en lugar deres / raw /). Los archivos en los activos / no tienen un ID de recurso, por lo que puede leerlos solo con AssetManager.
valores/ Archivos XML que contienen valores simples, como cadenas, enteros y colores, así como estilos y temas
xml / Archivos XML arbitrarios que se pueden leer en tiempo de ejecución llamando a Resources.getXML (). Aquí se deben guardar varios archivos de configuración XML, como una configuración de búsqueda.

Tipos de configuración y nombres de calificadores para cada carpeta en el directorio "res"

Cada directorio de recursos en la carpeta res (que se enumera en el ejemplo anterior) puede tener diferentes variaciones de los recursos contenidos en un directorio de nombre similar con un sufijo con diferentes qualifier-values de qualifier-values para cada configuration-type .

Ejemplo de variaciones del directorio `` con diferentes valores de calificador con sufijo que se ven a menudo en nuestros proyectos de Android:

  • dibujable /
  • drawable-en /
  • dibujable-fr-rCA /
  • drawable-en-port /
  • drawable-en-notouch-12key /
  • drawable-port-ldpi /
  • drawable-port-notouch-12key /

Lista exhaustiva de todos los diferentes tipos de configuración y sus valores calificadores para los recursos de Android:

Configuración Valores calificadores
MCC y MNC Ejemplos:
mcc310
mcc310-mnc004
mcc208-mnc00
etc.
Idioma y región Ejemplos:
en
fr
en-rUS
fr-rFR
fr-rCA
Dirección de diseño ldrtl
ldltr
Ancho más pequeño swdp
Ejemplos:
sw320dp
sw600dp
sw720dp
Ancho disponible wdp
w720dp
w1024dp
Altura disponible hdp
h720dp
h1024dp
Tamaño de pantalla pequeña
normal
grande
xlarge
Aspecto de la pantalla largo
No largo
Pantalla redonda redondo
cerca
Orientación de la pantalla Puerto
tierra
Modo de interfaz de usuario coche
escritorio
televisión
aparato
Modo nocturno noche
no de noche
Densidad de píxeles de la pantalla (dpi) ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
Tipo de pantalla táctil no tocar
dedo
Disponibilidad de teclado llave sujeta
llave oculta
keyssoft
Método de entrada de texto primario nokeys
QWERTY
12 teclas
Disponibilidad de la tecla de navegación navexposed
navhidden
Método de navegación no táctil principal nonav
dpad
bola de seguimiento
rueda
Versión de plataforma (nivel API) Ejemplos:
v3
v4
v7

Cambiar la configuración regional de la aplicación de Android programáticamente

En los ejemplos anteriores se entiende cómo localizar los recursos de la aplicación. El siguiente ejemplo explica cómo cambiar la configuración regional de la aplicación dentro de la aplicación, no desde el dispositivo. Para cambiar solo la configuración regional de la aplicación, puede utilizar la siguiente configuración de configuración regional.

import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.preference.PreferenceManager;
import android.view.ContextThemeWrapper;

import java.util.Locale;

/**
 * Created by Umesh on 10/10/16.
 */
public class LocaleUtils {

    private static Locale mLocale;

    public static void setLocale(Locale locale){
        mLocale = locale;
        if(mLocale != null){
            Locale.setDefault(mLocale);
        }
    }

    public static void updateConfiguration(ContextThemeWrapper wrapper){
        if(mLocale != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
            Configuration configuration = new Configuration();
            configuration.setLocale(mLocale);
            wrapper.applyOverrideConfiguration(configuration);
        }
    }

    public static void updateConfiguration(Application application, Configuration configuration){
        if(mLocale != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1){
            Configuration config = new Configuration(configuration);
            config.locale = mLocale;
            Resources res = application.getBaseContext().getResources();
            res.updateConfiguration(configuration, res.getDisplayMetrics());
        }
    }

    public static void updateConfiguration(Context context, String language, String country){
        Locale locale = new Locale(language,country);
        setLocale(locale);
        if(mLocale != null){
            Resources res = context.getResources();
            Configuration configuration = res.getConfiguration();
            configuration.locale = mLocale;
            res.updateConfiguration(configuration,res.getDisplayMetrics());
        }
    }




    public static String getPrefLangCode(Context context) {
        return PreferenceManager.getDefaultSharedPreferences(context).getString("lang_code","en");
    }

    public static void setPrefLangCode(Context context, String mPrefLangCode) {

        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();
        editor.putString("lang_code",mPrefLangCode);
        editor.commit();
    }

    public static  String getPrefCountryCode(Context context) {
        return PreferenceManager.getDefaultSharedPreferences(context).getString("country_code","US");
    }

    public static void setPrefCountryCode(Context context,String mPrefCountryCode) {

        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();
        editor.putString("country_code",mPrefCountryCode);
        editor.commit();
    }
}

Inicialice la configuración regional que el usuario prefiera, desde la clase de aplicación.

public class LocaleApp extends Application{

    @Override
    public void onCreate() {
        super.onCreate();

        LocaleUtils.setLocale(new Locale(LocaleUtils.getPrefLangCode(this), LocaleUtils.getPrefCountryCode(this)));
        LocaleUtils.updateConfiguration(this, getResources().getConfiguration());
    }
}

También necesita crear una actividad base y extender esta actividad a todas las demás actividades para que pueda cambiar la configuración regional de la aplicación solo en un lugar de la siguiente manera:

public abstract class LocalizationActivity extends AppCompatActivity {

    public LocalizationActivity() {
        LocaleUtils.updateConfiguration(this);
    }

    // We only override onCreate
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

}

Nota: Siempre inicialice la configuración regional en el constructor.

Ahora puedes usar LocalizationActivity como sigue.

public class MainActivity extends LocalizationActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
}

Nota: cuando cambia la configuración regional de la aplicación mediante programación, debe reiniciar su actividad para que tenga efecto el cambio de configuración regional Para que funcione correctamente para esta solución, use la configuración regional de las preferencias compartidas en el inicio de la aplicación android:name=".LocaleApp" en Usted Manifest.xml.

A veces, el mensaje de Lint checker para crear la versión de lanzamiento. Para resolver tal problema, siga las siguientes opciones.

Primero:

Si desea deshabilitar la traducción solo para algunas cadenas, agregue el siguiente atributo a la cadena predeterminada.xml

<string name="developer" translatable="false">Developer Name</string>

Segundo:

Ignore todas las traducciones faltantes del archivo de recursos. Añada el siguiente atributo. Es el atributo de ignorar del espacio de nombres de las herramientas en su archivo de cadenas, de la siguiente manera:

<?xml version="1.0" encoding="utf-8"?>
<resources
  xmlns:tools="http://schemas.android.com/tools"
  tools:ignore="MissingTranslation" >
http://stackoverflow.com/documentation/android/3345/localization-with-resources-in-android#
  <!-- your strings here; no need now for the translatable attribute -->

</resources>

Tercero:

Otra forma de deshabilitar la cadena no traducible

http://tools.android.com/recent/non-translatablestrings

Si tiene muchos recursos que no se deben traducir, puede colocarlos en un archivo llamado donottranslate.xml y lint los considerará todos recursos no traducibles.

Cuarto:

También puede agregar la configuración regional en el archivo de recursos

<resources
xmlns:tools="http://schemas.android.com/tools"
    tools:locale="en" tools:ignore="MissingTranslation">

También puede deshabilitar la comprobación de traducción faltante para la pelusa de app / build.gradle

lintOptions {
        
        disable 'MissingTranslation'
    }


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow