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'; } } |
| スポンサード リンク |