11
votes

Symbole de devise locale

J'ai des problèmes pour obtenir le symbole de devise par défaut du système. Je reçois le symbole monétaire de cette façon: xxx

lorsque la langue du système est dans anglais (États-Unis) Le bon symbole apparaît ( $ ). Mais quand je choisis la langue portugais (Portugal) il renvoie ce symbole ¤ .

Qu'est-ce qui peut causer cela?


3 commentaires

Peut-être que vous utilisez UTF-8 au lieu de UTF-16? Je ne vois pas comment cela pourrait arriver, mais c'est une pensée.


Je pense que ce sera une bonne solution à votre réponse à votre réponse.GetInstance (Nouveaux local ("Votre langue", CountryCode)). Getymbol ();


Vous pourriez avoir une réponse à votre question de ce Link


3 Réponses :


2
votes

quelques pensées;

  1. pourrait-il être que vous obtenez le bon symbole pour (euro) mais votre police / votre journal ne l'a pas et cela ressemble seulement à ce symbole?

  2. Locale est une jolie classe fragile, ses constructeurs n'ont aucune vérification erronée. Vous pouvez facilement voir des locaux qui ne sont pas pris en charge ou n'existent pas vraiment dans les normes (telles que «de_us» pour «allemand comme parlé aux États-Unis»).

  3. Notez que les données locales ne sont pas nécessairement disponibles pour aucun des locales prédéfinies comme constantes de cette classe, à l'exception de l'EN_US, qui est la seule locale, les garanties Java sont toujours disponibles et diffère dans différentes versions Android, et peut également être limité par l'opérateur ou des constructions personnalisées. pT_PT a été ajouté à 2.3 .

  4. Concernant l'option que vous avez présentée, si vous consultez Les normes UNICODE < / a> Comme ils ont été mis en œuvre dans API8 et en hausse, le Portugal n'existe que comme territoire (et non la combinaison).

  5. Cela peut être meilleur si vous créez donc une instance locale partielle à partir du code de pays, puis obtenez le symbole monétaire du Portugal par exemple. Vous ne serez pas en mesure de vous conformer au prédéfini statique de la classe locale comme Il soutient assez étroitement des locaux différents (c'est une liste courte), mais cela devrait fonctionner car ce paramètre locale dispose des données que vous recherchez dans le système.

  6. J'essaierais également de voir si la devise.Tostring () renvoie l'EUR (le code ISO 4217 de la devise, généralement un acronyme de trois lettres).


0 commentaires

15
votes

Cela semble être un problème connu ( http://code.google.com/p / Android / Problèmes / Détails? ID = 38622 . Je suis venu à une solution éventuelle de cette façon:

Étant donné que le problème est dans le symbole et non du code de devise, j'ai résolu ce problème de créer une carte code> statique code> où la clé est le moneydcode et la valeur est le symbole em>. p> xxx pré>

afin d'obtenir tout (ou presque) les codes de devises disponibles dans les informations locales que vous pouvez faire quelque chose comme ceci: p>

Currency currency = Currency.getInstance(Locale.getDefault());
String curSymbol = MYCURRENCIES.get(currency.getCurrencyCode());


1 commentaires

C'est assez cool, merci. PS: pour tout le monde: au lieu de log.v simplement myCurrences.put (A.GetCurrencyCode (), A.Getsymbol ());



1
votes
    String currency = cur.replaceAll("[0-9.,]","");

0 commentaires