2010-10-12 29 views
1

Existe-t-il un moyen de sonder le ICU library pour tous les symboles UChar's représentant les symboles de devise pris en charge par la bibliothèque?ICU Probe Tous les symboles monétaires

Ma solution actuelle est Itère tous les paramètres régionaux et pour chaque lieu, faire quelque chose comme ceci:

const DecimalFormatSymbols *formatSymbols = formatter->getDecimalFormatSymbols(); 
UnicodeString currencySymbol = formatSymbols->getSymbol(DecimalFormatSymbols::kCurrencySymbol); 

sauver ensuite de chaque UChar dans currencySymbol dans une carte (donc pas de doublons).

+1

et la monnaie ne sont pas la même :) – kennytm

+0

Vous cherchez tous les UChar qui pourraient être dans toutes les monnaies possibles dans toutes les locales possibles? Forme longue ou courte du symbole? Votre code ci-dessus considérera uniquement la devise par défaut pour cet environnement local, par exemple. (En passant, vous voudrez peut-être utiliser UnicodeSet quelque part) –

+0

Je ne suis concerné que par la forme abrégée par défaut des locales. Je ne suis pas familier avec UnicodeSet mais je regarde maintenant. Je vous remercie. – Ternary

Répondre

2

Tous les symboles monétaires ont la catégorie Sc (Symbole, Devise), vous pouvez donc énumérer tous les caractères de cette catégorie. concurrency

#include <cstdio> 
#include <icu/unicode/uchar.h> 

UBool print_all_currency_symbols(const void* context, UChar32 start, UChar32 limit, UCharCategory type) { 
    if (type == U_CURRENCY_SYMBOL) { 
     for (UChar32 c = start; c < limit; ++ c) 
      printf("%04x\n", c); 
    } 
    return TRUE; 
} 

int main() { 
    u_enumCharTypes(print_all_currency_symbols, NULL); 

     return 0; 
} 

+0

Pouvez-vous élaborer un peu plus? Je ne suis pas familier avec "catégorie" comme il s'applique à UnicodeStrings ou les paramètres régionaux. – Ternary

+0

@Travis: Voir mise à jour. – kennytm

+0

Cela a l'air génial. Je n'avais aucune idée des fonctions auxiliaires comme le u_enumCharTypes() existait. Je vais jouer avec ça. Je vous remercie. – Ternary