2012-10-02 7 views
9

Ich habe einige Probleme, das Standardwährungssymbol des Systems zu erhalten. Ich erhalte das Währungssymbol auf diese Weise:Gebietsschema-Währungssymbol

Currency currency = Currency.getInstance(Locale.getDefault()); 
Log.v("TAG",currency.getSymbol()); 

Wenn die Systemsprache in English (United States) das richtige Symbol erscheint ($). Aber wenn ich die Sprache Portuguese (Portugal) wähle, gibt es dieses Symbol ¤ zurück.

Was kann das verursachen?

+0

Vielleicht verwenden Sie UTF-8 anstelle von UTF-16? Ich sehe nicht, wie das passieren könnte, aber es ist ein Gedanke. – AedonEtLIRA

+0

ich denke, das ist eine gute Lösung für Ihre Antwort Currency.getInstance (neues Gebietsschema ("Ihre Sprache", countryCode)). GetSymbol(); –

+0

Sie könnten Antwort auf Ihre Frage von diesem erhalten [link] (https://stackoverflow.com/questions/16832655/getting-currency-code-if-we-have-only-country-code-in-database/16833419# 16833419) –

Antwort

2

Einige Gedanken;

  1. Könnte es sein, dass Sie das richtige Symbol für (Euro) sind immer aber Ihre Schrift/log haben es nicht und es sieht nur aus wie dieses Symbol?

  2. Locale ist eine ziemlich verspielte Klasse, ihre Konstruktoren haben keine Fehlerüberprüfung. Sie können leicht Lokalisierungen sehen, die nicht unterstützt werden oder in den Standards nicht existieren (wie "de_US" für "Deutsch wie in den USA gesprochen").

  3. Beachten Sie, dass Gebietsschema-Daten nicht unbedingt für alle Gebietsschemas verfügbar sind, die als Konstanten in dieser Klasse vordefiniert sind, mit Ausnahme von en_US, das einzige Gebietsschema, für das Java-Garantien immer verfügbar sind und das in verschiedenen Android-Versionen unterschiedlich ist kann auch durch den Bediener oder benutzerdefinierte Builds begrenzt werden. pt_PT was added in 2.3.

  4. In Bezug auf die Option, die Sie vorgestellt haben, wenn Sie Unicode's standards auschecken, da sie in API8 und höher implementiert wurden, existiert Portugal nur als ein Gebiet (und nicht die Kombination).

  5. Es kann besser sein, wenn Sie daher nur eine Teilgebietsschemainstanz aus dem Ländercode erstellen und dann beispielsweise das Währungssymbol für Portugal abrufen. Sie werden nicht in der Lage sein, die vordefinierte statics of Locale's class zu erfüllen, da es sehr eng verschiedene Gebietsschemas unterstützt (es ist eine kurze Liste), aber es sollte funktionieren, da dieses Gebietsschema die Daten enthält, nach denen Sie im System suchen.

  6. Ich würde auch versuchen zu sehen, wenn currency.toString() den EUR (der ISO 4217 Code der Währung, in der Regel ein Drei-Buchstaben-Akronym) zurückgibt.

13

Dies scheint ein bekanntes Problem zu sein (http://code.google.com/p/android/issues/detail?id=38622 ich auf eine mögliche Lösung kam so:.

Da das Problem in dem Symbol und nicht der Währungscode, löste ich dieses Problem einer Schaffung statisch Map wo der Schlüssel ist CurrencyCode und der Wert ist Symbol.

public static final Map<String, String> MYCURRENCIES = new HashMap<String, String>(){ 
     { 
      put("EUR","€"); 
      put("USD","$"); 
      (..) 
     } 
}; 

Um all (oder fast) die Währungen Codes in den Gegenden Informationen zu erhalten Sie so etwas tun können:

for (Locale ll: Locale.getAvailableLocales()){ 
    try { 
     Currency a = Currency.getInstance(ll); 
     Log.v("MyCurrency",a.getCurrencyCode()+"#"+a.getSymbol()); 
    }catch (Exception e){ 
     // when the locale is not supported 
    } 
} 

Nach dem Erstellen Sie Karte mit dem Currency und Symbol Sie müssen nur so etwas wie dieses:

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

das ist ziemlich cool, danke. ps: für alle anderen: anstelle von Log.v einfach MYCURRENCIES.put (a.getCurrencyCode(), a.getSymbol()); –

2
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(); 
    String cur = currencyFormatter.format(yourValue); 

dies Ihre int/double zu einer Währung auf dem Gerätesprache

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

Und das ist basierte Formate wie nur das Währungssymbol zu erhalten, indem alle Zahlen, Punkte und Kommas ersetzen