Visual C++の金額書式情報・完全版に続き、Visual C++の金額書式情報 その2の調査し直したものです。EnumSystemLocalesExで得られたすべてのロケールに対するmoneypunctの結果を一覧にしています。
一番下に使用したプログラムのソースコードを載せています。
今回、正の場合と負の場合とで書式が異なる地域が存在することに気付きました(前回はプログラムのミスもありましたが)。
国・地域 | 正 | 負 | ||||||
---|---|---|---|---|---|---|---|---|
[0] | [1] | [2] | [3] | [0] | [1] | [2] | [3] | ARA_SAU | symbol | space | value | sign | symbol | value | sign | none |
ASM_IND | symbol | sign | space | value | symbol | sign | space | value |
BNG_IND | ||||||||
DAN_DNK | ||||||||
FOS_FRO | ||||||||
FYN_NLD | ||||||||
GUJ_IND | ||||||||
HIN_IND | ||||||||
KAL_GRL | ||||||||
KDI_IND | ||||||||
KNK_IND | ||||||||
MAR_IND | ||||||||
MYM_IND | ||||||||
NLD_NLD | ||||||||
NON_NOR | ||||||||
NOR_NOR | ||||||||
NOR_NOR | ||||||||
ORI_IND | ||||||||
PAN_IND | ||||||||
SAN_IND | ||||||||
SME_NOR | ||||||||
TAM_IND | ||||||||
TEL_IND | ||||||||
AFK_ZAF | symbol | sign | space | value | symbol | sign | value | none |
HAU_NGA | ||||||||
HAU_NGA | ||||||||
HEB_ISR | ||||||||
IBO_NGA | ||||||||
NSO_ZAF | ||||||||
RMC_CHE | ||||||||
TSN_ZAF | ||||||||
XHO_ZAF | ||||||||
ZUL_ZAF | ||||||||
BOB_CHN | symbol | sign | value | none | symbol | sign | value | none |
CHS_CHN | ||||||||
CHS_CHN | ||||||||
III_CHN | ||||||||
KUR_IRQ | ||||||||
KUR_IRQ | ||||||||
MNG_CHN | ||||||||
UIG_CHN | ||||||||
FAR_IRN | symbol | value | sign | none | symbol | value | sign | none |
PAS_AFG | ||||||||
PRS_AFG | ||||||||
URD_PAK | ||||||||
ITA_ITA | sign | symbol | space | value | sign | symbol | space | value |
LVI_LVA | ||||||||
MPD_CHL | ||||||||
PAN_PAK | ||||||||
PTB_BRA | ||||||||
QUB_BOL | ||||||||
SIN_LKA | ||||||||
SIN_PAK | ||||||||
SIN_PAK | ||||||||
YOR_NGA | ||||||||
AMH_ETH | sign | symbol | value | none | sign | symbol | value | none |
CHT_HKG | ||||||||
CRE_USA | ||||||||
CRE_USA | ||||||||
CYM_GBR | ||||||||
ENU_USA | ||||||||
FPO_PHL | ||||||||
GLA_GBR | ||||||||
HAW_USA | ||||||||
IND_IDN | ||||||||
IRE_IRL | ||||||||
IUK_CAN | ||||||||
IUK_CAN | ||||||||
IUS_CAN | ||||||||
IVL_IVC | ||||||||
JPN_JPN | ||||||||
KKZ_KAZ | ||||||||
KOR_KOR | ||||||||
MLT_MLT | ||||||||
MRI_NZL | ||||||||
MSL_MYS | ||||||||
MWK_CAN | ||||||||
NEP_NEP | ||||||||
QUT_GTM | ||||||||
SWK_KEN | ||||||||
THA_THA | ||||||||
AZC_AZE | sign | value | space | symbol | sign | value | space | symbol |
AZE_AZE | ||||||||
AZE_AZE | ||||||||
BAS_RUS | ||||||||
BEL_BLR | ||||||||
BGR_BGR | ||||||||
BRE_FRA | ||||||||
BSB_BIH | ||||||||
BSB_BIH | ||||||||
BSC_BIH | ||||||||
CAT_ESP | ||||||||
COS_FRA | ||||||||
CSY_CZE | ||||||||
DEU_DEU | ||||||||
DSB_GER | ||||||||
ELL_GRC | ||||||||
ESP_ESP | ||||||||
ETI_EST | ||||||||
EUQ_ESP | ||||||||
FIN_FIN | ||||||||
FRA_FRA | ||||||||
FUL_SEN | ||||||||
FUL_SEN | ||||||||
GLC_ESP | ||||||||
GSW_FRA | ||||||||
HRV_HRV | ||||||||
HSB_GER | ||||||||
HUN_HUN | ||||||||
HYE_ARM | ||||||||
ISL_ISL | ||||||||
KAT_GEO | ||||||||
KIN_RWA | ||||||||
KYR_KGZ | ||||||||
LAO_LAO | ||||||||
LBX_LUX | ||||||||
LTH_LTU | ||||||||
MKI_MKD | ||||||||
MNN_MNG | ||||||||
MON_MNG | ||||||||
OCI_FRA | ||||||||
PLK_POL | ||||||||
ROM_ROM | ||||||||
RUS_RUS | ||||||||
SKY_SVK | ||||||||
SLV_SVN | ||||||||
SMB_SWE | ||||||||
SMK_SWE | ||||||||
SMN_FIN | ||||||||
SMS_FIN | ||||||||
SQI_ALB | ||||||||
SRB_SRB | ||||||||
SRM_SRB | ||||||||
SRO_SRB | ||||||||
SVE_SWE | ||||||||
SYR_SYR | ||||||||
TAJ_TAJ | ||||||||
TAJ_TAJ | ||||||||
TRK_TUR | ||||||||
TTT_RUS | ||||||||
TZM_DZA | ||||||||
TZM_DZA | ||||||||
TZM_MAR | ||||||||
UZB_UZB | ||||||||
UZB_UZB | ||||||||
UZB_UZB | ||||||||
VIT_VNM | ||||||||
WOL_SEN | ||||||||
KHM_KHM | sign | value | symbol | none | sign | value | symbol | none |
SAH_RUS | ||||||||
TUK_TKM | ||||||||
UKR_UKR | ||||||||
DIV_MDV | value | space | symbol | sign | value | space | symbol | sign |
TIR_ERI | value | sign | symbol | none | sign | symbol | value | none |
以下がプログラムです。相変わらず汚いですが。
#include <iostream> #include <locale> #include <vector> #include <string> #include <array> #include <codecvt> #include <utility> #include <tuple> #include <windows.h> #include <boost/range/algorithm.hpp> using namespace std; void PutPart(ostream& os, int p) { switch (p) { case money_base::none: os << "none"; break; case money_base::space: os << "space"; break; case money_base::symbol: os << "symbol"; break; case money_base::sign: os << "sign"; break; case money_base::value: os << "value"; break; } } int main() { typedef pair<wstring, wstring> CountryAndLanguage; vector<CountryAndLanguage> locs; ::EnumSystemLocalesEx([](LPWSTR localeName, DWORD /*flags*/, LPARAM lParam) { array<WCHAR, 4> language; ::GetLocaleInfoEx(localeName, LOCALE_SABBREVLANGNAME, language.data(), language.size()); array<WCHAR, 4> country; ::GetLocaleInfoEx(localeName, LOCALE_SABBREVCTRYNAME, country.data(), country.size()); reinterpret_cast<vector<CountryAndLanguage>*>(lParam)->push_back({country.data(), language.data()}); return TRUE; }, LOCALE_NEUTRALDATA, reinterpret_cast<LPARAM>(&locs), nullptr); sort(locs.begin(), locs.end()); typedef tuple<array<char, 8>, string> MoneyPattern; vector<MoneyPattern> moneyPatterns; for (auto const& countryAndLang : locs) { wstring locW = countryAndLang.second + L'_' + countryAndLang.first; string loc(locW.begin(), locW.end()); locale l(loc); auto const& m = use_facet<moneypunct<char>>(l); array<char, 8> format; auto it = boost::copy(m.pos_format().field, format.begin()); boost::copy(m.neg_format().field, it); moneyPatterns.emplace_back(format, loc); } boost::sort(moneyPatterns); for (const auto& pattern : moneyPatterns) { cout << std::get<1>(pattern); for (int p : std::get<0>(pattern)) { cout << '\t'; PutPart(cout, p); } cout << '\n'; } } |
スポンサード リンク |