Mise à jour Finale:
Après l'ouverture d'un bug rapport sur Google Incorrect resource resolution strategy above Android N, defaulting to en_GB and not default strings.xml, ils ont mentionné que cela dans le comportement prévu pour Android N ci-dessus.en_UK
est considéré comme "un représentant de l'anglais international". Les chaînes retourneront aux chaînes "International English" ou à leur représentant avant de passer aux chaînes en
par défaut. Je cite leur réponse ici:
À partir de N, tous les paramètres régionaux anglais (sauf pour les territoires américains et américains comme Porto Rico et les Samoa américaines) se replient à une variante internationale anglais si un tel lieu est disponible. Donc, pour en-CA, nous essaierons d'abord ces locales, avant de retomber sur en-GB (qui est considéré comme un représentant de l'anglais international s'il n'y a pas de meilleur anglais international): en-rCA (anglais canadien) , b + en + 001 (anglais international), en (anglais). Si vous ne voulez pas que les chaînes en-GB soient capturées pour en-CA, vous devez placer les ressources dans l'un de ces trois répertoires, car elles seraient considérées comme une meilleure correspondance pour en-CA.
Mise à jour 1:
Il semble que ce ne se limite pas à en_CA
. Il existe une autre question similaire pour les autres paramètres régionaux anglais: Android 7.0 Nougat picks up default strings when device language is en_US. Ressemble à un bug de plate-forme à ce stade.
Réponse d'origine:
Je ne sais pas si son un bug ou une fonction. A partir du niveau d'API 24 (Android 7.0), ils ont mis à jour comment Android résout les chaînes comme mentionné Improvements to Resource-Resolution Strategy . Prenons un exemple de la documentation ci-dessous:
Avant Android 7.0:
Disons que si l'utilisateur a des paramètres de fr_CH
et suivants sont les ressources disponibles dans l'application i.e. de_DE
, es_ES
, fr_FR
, it_IT
. Pour les API antérieures à Android 7.0, Android a essayé de trouver une correspondance exacte et si une correspondance exacte n'a pas été trouvée, la valeur par défaut est values/strings.xml
, i.e en
. Donc, pour en_CA
cas, si une chaîne n'est pas trouvée dans res/values-en-rCA/strings.xml
, on peut s'attendre à en
par défaut.
Après Android 7.0
Cependant maintenant dans Android 7.0 et plus, pour la situation des fr_CH
, il retombera au dialecte parent le plus proche i.e. fr_FR
.
En appliquant la même logique à la situation des en_CA
et en_GB
présent dans l'application, je pense que Android pense que en_GB
est le plus proche dialecte-en_CA
et est en baisse revenir au lieu de la valeur par défaut en
premier. Je suis confronté au problème dans mon application et c'est la seule explication plausible que je peux expliquer pourquoi ce problème se produit uniquement sur les nouvelles versions d'API et non sur celles antérieures à Android N.
Je rencontre le même problème. Peut-être qu'il y a un bug avec les modifications apportées dans Android N https://developer.android.com/formation/bases/support-devices/languages.html. Sur les anciennes API, cela fonctionne très bien, mais les nouvelles comme 7.1.1, il se comporte de la même manière que vous avez mentionné ci-dessus. Peut-être devrions-nous ouvrir un rapport de bogue? –
Cochez [Android 7.0 Nougat récupère les chaînes par défaut lorsque la langue du périphérique est en_US] (https://stackoverflow.com/q/40906548/1306419) question qui a soulevé une préoccupation similaire avec d'autres locales en anglais. –
J'ai créé un rapport de bug ici: https://issuetracker.google.com/issues/64429534. N'hésitez pas à suggérer des changements pour l'améliorer ou le commenter/starter afin qu'il puisse être regardé. Merci. –