Changer d'application de la langue par programmation sous Android
Est-il possible de changer la langue de l'application par programme tout en continuant d'utiliser Android ressources?
Si non, est-il possible de demander une ressource dans une langue spécifique?
Je voudrais permettre à l'utilisateur de changer la langue de l'app de l'app.
- Vous pouvez utiliser la bibliothèque suivante, qui fournit la liste des langues, de la préférence pour votre écran des paramètres, et remplace la langue de votre demande: github.com/delight-im/Android-Languages
- Savez-vous si Android-Langues fonctionne avec Android 5.0 Lollipop?
- Oui, il fonctionne sur Android 5.0 sans aucun problème.
- J'ai déjà répondu à cette question dans un autre fil, vérifiez ici: stackoverflow.com/a/33079919/2612536
- Vous pouvez utiliser la bibliothèque suivante: github.com/zeugma-solutions/locale-helper-android
Vous devez vous connecter pour publier un commentaire.
C'est possible. Vous pouvez définir les paramètres régionaux. Cependant, je ne recommanderais pas que. Nous avons essayé, au début, en gros, c'est se battre contre le système.
Nous avons la même exigence pour changer la langue, mais a décidé de s'installer sur le fait que l'INTERFACE utilisateur doit être le même que le numéro de téléphone de l'INTERFACE utilisateur. C'est en travaillant via le réglage des paramètres régionaux, mais c'était trop buggé. Et vous devez le régler à chaque fois que vous entrez dans l'activité (activité) à partir de mon expérience. voici un code si vous avez encore besoin de cette (encore une fois, je ne le recommande pas)
Si vous avez de la langue de contenu spécifique, vous pouvez changer de base sur le réglage.
Activity
et de construire votre application les activités de ce sous-classe. Ce qui, certes, peut être difficile si vous utilisez beaucoup de Android presupplied des sous-classes deActivity
, mais ce n'est pas autant de travail que vous faites, il semble.Context.createConfigurationContext()
, qui peut être utilisé pour envelopper le contexte par défaut avec les paramètres régionaux de configuration puis de l'appelergetResources
sur que sans avoir à mettre à jour la configuration sur les ressources des objets eux-mêmes.updateConfiguration
méthode, je viens de terminer et redémarrer mon application. Il fonctionneconf.setLayoutDirection(locale)
, vous pouvez remplacerconf.locale = new Locale(...))
avecconf.setLocale(new Locale(...))
. Il sera interne appellesetLayoutDirection
.@deprecated See {@link android.content.Context#createConfigurationContext(Configuration)}.
- updateConfiguration est obsolèteonCreate
n'était pas assez pour moi, j'ai dû ajouter àonResume
. Je ne sais pas pourquoi.updateConfiguration
méthode a été abandonnée, toute solution à la place?C'est vraiment du travail:
Entrez le code de votre langue dans
languageToLoad
variable:Vous pouvez trouver un exemple ici
Resources.updateConfiguration
méthode. J'ai indenté le code pour le rendre plus clair.Je cherchais un moyen pour changer la langue du programme.
Alors que je comprends qu'une application normale ne devrait jamais le faire et à la place, soit:
il faut vraiment changer la langue du système programmtically.
C'est sans-papiers de l'API et ne devraient donc pas être utilisé pour le marché/les applications d'utilisateur final!
De toute façon, voici la solution que j'ai trouvé:
android.permission.CHANGE_CONFIGURATION
ne peut être accordée que par l'app signé avec effectuer les principales.Operation not allowed: java.lang.SecurityException: Permission android.permission.CHANGE_CONFIGURATION is not a changeab le permission type
Si vous voulez mantain la langue évolué au cours de votre application que vous devez faire deux choses.
Tout d'abord, créez une base de l'Activité et de réaliser toutes vos activités s'étendent à partir de ce:
Noter que j'ai enregistrer la nouvelle langue dans un sharedPreference.
Ensuite, créez une extension de l'Application comme ceci:
Noter que getLocale() c'est la même que ci-dessus.
C'est tout!
J'espère que cela peut aider quelqu'un.
Application
est et comment l'utiliser. mobomo.com/2011/05/how-to-use-application-object-of-androidconfiguration.locate
est obsolète, setLocale nécessite API 17+ et updateConfiguration est obsolèteJuste l'ajout d'une pièce supplémentaire qui a déclenché moi.
Tandis que les autres réponses fonctionnent très bien avec "de" pour l'exemple
Le ci-dessus ne fonctionnent pas avec pour exemple
"fr_BE"
locale de sorte qu'il serait d'utiliser lavalues-fr-rBE
dossier ou similaire.Besoins suivants léger changement de travailler avec
"fr_BE"
activity.recreate()
android.content.res.Configuration conf = res.getConfiguration();
au lieu de créer un nouveauConfiguration
exemple? Est-il un avantage pour l'utilisation d'une nouvelle?countrycode
, qui a fonctionné pour moi!Je suis changé de langue allemande pour mon appli commencer à lui-même.
Voici mon code est correct. Quelqu'un veut utiliser ce même pour moi..
(Comment changer de langue dans android par programmation)
mon code:
Je sais que c'est tard pour répondre, mais j'ai trouvé cet article ici
. Ce qui explique l'ensemble du processus très bien et vous offre un bien structuré code.
Paramètres régionaux de la classe Helper:
Vous avez besoin de remplacer attachBaseContext et appel LocaleHelper.onAttach() pour initialiser les paramètres régionaux de votre application.
Tout ce que vous avez à faire est d'ajouter
où vous voulez modifier les paramètres régionaux.
createConfigurationContext
, qui a été utileCréer une classe qui Étend
Application
et de créer une méthode statique.Ensuite, vous pouvez appeler cette méthode dans toutes les activités avant
setContentView()
.Utilisation dans les activités:
en
travaillé au lieu deen_US
Selon cet article. Vous aurez besoin de télécharger
LocaleHelper.java
référencé dans cet article.MyApplication
classe qui étendApplication
attachBaseContext()
pour mettre à jour la langue.Inscrire cette classe dans le manifeste.
Créer
BaseActivity
et remplaceronAttach()
pour mettre à jour la langue. Nécessaires pour Android 6+Faire toutes les activités sur votre application s'étend à partir de
BaseActivity
.Pour Android 7.0 Nougat (et inférieure) de suivre cet article:
Changer la Langue par programmation sous Android
Vieille réponse
Cette comprennent RTL/LTR support:
Si vous écrivez
Dans chaque activité (dans le fichier de manifeste) alors pas besoin de le mettre à chaque fois que vous entrez
Activity
.configChanges
utilisé pour un hack pour préserver l'Activité de l'état sur les rotations/etc.La seule solution qui marche pour moi, c'est une combinaison de Alex Volovoy du code avec l'application mécanisme de redémarrage:
activity.recreate()
J'ai été confronté au même problème. Sur GitHub, j'ai trouvé la Android-LocalizationActivity bibliothèque.
Cette bibliothèque, il est très simple de changer la langue de votre application au moment de l'exécution, comme vous pouvez le voir dans l'exemple de code ci-dessous. Un exemple de projet, y compris l'exemple de code ci-dessous et plus d'informations peuvent être trouvées à la page github.
La LocalizationActivity s'étend AppCompatActivity, de sorte que vous pouvez également l'utiliser lorsque vous êtes à l'aide de Fragments.
Mise à jour importante:
Noter que, sur SDK >= 21), vous devez appeler " des Ressources.updateConfiguration()', sinon, les ressources ne seront pas mis à jour.
Context ctx = createConfigurationContext(args);
et d'obtenir des ressources à partir de ceactivity.recreate()
Locale
configuration
doit être définie dans chaqueactivity
avant de définir le contenuthis.setContentView(R.layout.main);
activity.recreate()
Au premier abord créer des multi string.xml pour les différentes langues; puis utiliser ce bloc de code dans
onCreate()
méthode:Le temps pour cause de mise à jour.
Tout d'abord, le obsolète liste avec les API dans laquelle il a été rendu obsolète:
configuration.locale
API (17)updateConfiguration(configuration, displaymetrics)
API (17)La chose pas de réponse à la question a récemment obtenu le droit est l'utilisation de la nouvelle méthode.
createConfigurationContext est la nouvelle méthode pour updateConfiguration.
Certains l'ont utilisé autonome comme ceci:
... mais qui ne fonctionne pas. Pourquoi? La méthode renvoie un contexte, qui est ensuite utilisé pour traiter Strings.xml traductions et d'autres ressources localisées (images, mises en page, quel que soit).
Le bon usage, c'est comme cela:
Si vous il suffit de copier-collé qui dans votre IDE, vous pouvez voir un message d'avertissement que l'API nécessite de ciblage de l'API de 17 ou plus. Cela peut être contourné en le mettant dans une méthode et de l'ajout de l'annotation
@TargetApi(17)
Mais attendez. Quel est le plus vieux de l'API?
Vous avez besoin pour créer une autre méthode à l'aide de updateConfiguration sans TargetApi annotation.
Vous n'avez pas besoin de retourner un contexte ici.
Maintenant, la gestion de ces peut être difficile. Dans l'API 17+ vous devez le contexte créé (ou les ressources à partir du contexte de création) pour obtenir les ressources nécessaires en fonction de la localisation. Comment gérez-vous cela?
Bien, c'est la façon dont je le fais:
Ce code fonctionne en ayant une méthode qui permet d'appeler la méthode appropriée basée sur ce que l'API. C'est quelque chose que j'ai fait avec beaucoup de différents obsolète appels (y compris Html.fromHtml). Vous avez une méthode qui prend les arguments nécessaires, qui répartit ensuite dans l'un des deux (ou trois ou plus) les méthodes et renvoie le résultat approprié basé sur l'API de niveau. Il est flexible, car vous n'avez pas à vérifier plusieurs fois, la méthode "entry" le fait pour vous. La méthode ici est
setLanguage
VEUILLEZ LIRE CECI AVANT DE L'UTILISER
Vous devez utiliser le Contexte retourné lorsque vous obtenir des ressources. Pourquoi? J'ai vu d'autres réponses ici qui utilisent createConfigurationContext et n'utilisez pas le contexte, il renvoie. Pour le faire fonctionner comme ça, updateConfiguration doit être appelé. Qui est obsolète. Utiliser le contexte retourné par la méthode pour obtenir des ressources.
Exemple d'utilisation:
Constructeur ou dans un endroit similaire:
Et puis, où vous le voulez pour obtenir les ressources que vous faites:
À l'aide de n'importe quel autre contexte (en théorie) de rompre cette.
Autant que je sache, vous avez encore d'utiliser un contexte d'activité pour afficher les boîtes de dialogue ou des Toasts. pour cela, vous pouvez utiliser une instance d'activité (si vous êtes à l'extérieur)
Et enfin, l'utilisation
recreate()
sur l'activité pour actualiser le contenu. Raccourci pour ne pas avoir à créer une intention d'actualiser.Voici un code qui fonctionne pour moi:
Source: ici
Alex Volovoy réponse ne fonctionne que pour moi, si c'est dans la méthode onCreate de l'activité.
La réponse qui fonctionne dans toutes les méthodes est dans un autre thread
Changer la langue par programmation sous Android
Ici est l'adaptation du code
Espère que cela aide.
Prendre note que cette solution à l'aide de
updateConfiguration
ne sera pas fonctionne plus avec Android M libération à venir dans quelques semaines. La nouvelle façon de faire, c'est maintenant à l'aide de laapplyOverrideConfiguration
méthode deContextThemeWrapper
voir la doc de l'API
Vous pouvez trouver ma solution ici depuis que j'ai rencontré le problème moi-même:
https://stackoverflow.com/a/31787201/2776572
C'est quand j'appuyez sur le bouton pour changer la langue de mon TextView.(strings.xml dans les valeurs de dossier)
Il ya quelques étapes que vous devez mettre en œuvre
Tout d'abord, vous devez modifier les paramètres régionaux de votre configuration
Deuxième, si vous souhaitez que vos modifications s'appliquent directement à la page qui est visible, vous pouvez mettre à jour les points de vue directement ou vous pouvez les appeler de l'activité.recréer() pour redémarrer l'activité en cours.
Et aussi que vous avez à persister vos changements parce que, après que l'utilisateur ferme de votre application, puis vous perdriez le changement de langue.
Je l'ai expliqué plus détaillée de la solution sur mon blog Changer la Langue par programmation sous Android
Fondamentalement, il vous suffit d'appeler LocaleHelper.onCreate() de votre classe d'application et si vous voulez modifier les paramètres régionaux à la volée, vous pouvez appeler LocaleHelper.setLocale()
similaire à la accepté répondu, mais 2017 version et a ajouté redémarrer (sans redémarrer, parfois la prochaine Activité rend l'anglais):
activity.recreate()
3) le contexte retourné, je pense, doit être utilisée pour obtenir les ressourcesD'abord vous créer un répertoire de nom de valeurs-"nom de la Langue", comme l'hindi que d'écrire "salut" et même chaîne de nom de fichier à copier dans ce répertoire et le changement de la valeur ne change pas de paramètre après set code ci-dessous dans votre action comme le bouton, etc....
conf.locale
est obsolèteDans l'exemple, nous avons défini la langue anglaise:
S'il vous plaît, rappelez-vous cela ne fonctionne que si la langue est trouvé dans le système des instruments aussi, pas seulement en application
Juste la poignée dans la méthode
Suivez les Lien
Je pense qu'il est utile
J'ai rencontré le même problème: je devais définir ma langue à une langue choisie dans mon application.
Mon fix: le
_fr (utilisez les minuscules!)
XML
Exemple:
De ces XML, vous pouvez toujours extraire le besoin des chaînes de ressources.