« デュランデュランが Second Life 世界でコンサート | メイン | Ajax Desktop の比較記事 »

2006年08月08日

世界の「,」(カンマ)と「.」(ピリオド)を解き明かす

エキサイトニュースの 「,」(カンマ)と「.」(ピリオド)の不思議な関係 という記事で、世界各国で数値の表記がどう違うかという話題を取り上げている。

「そしてギリシャは……ギリシャ語がわからん! 調査断念。」

なんて書いてあるけど、こういうのはウェブで各国語を検索するよりも、国際化されたアプリケーションを見てみると回答が得やすい。

たとえば、Windows だと[コントロールパネル]-[地域と言語]-[地域オプション] で「使う言語」を切り替えると、各国での数値のフォーマットや通貨単位、時間の表記などを知ることができる。実際に切り替えなくても選択するだけで表示は変わるので、フォーマットを確認したらキャンセルしてもいい。

各国向けに国際化されたアプリケーションでは、それぞれの国の人がバグレポートを出してくるので、自然に間違いが正されることが多い。ま、メジャーなアプリケーションじゃないと直らないけど。

Java も国際化の扱いは充実してるので、こういった一覧を取ることができる。

国名数字表記
アラブ首長国連邦1,234,567.89
バーレーン1,234,567.89
アルジェリア1,234,567.89
エジプト1,234,567.89
イラク1,234,567.89
ヨルダン1,234,567.89
クウェート1,234,567.89
レバノン1,234,567.89
リビア1,234,567.89
モロッコ1,234,567.89
オマーン1,234,567.89
カタール1,234,567.89
サウジアラビア1,234,567.89
スーダン1,234,567.89
シリア1,234,567.89
チュニジア1,234,567.89
イエメン1,234,567.89
インド१,२३४,५६७.८९
イスラエル1,234,567.89
日本1,234,567.89
大韓民国1,234,567.89
タイ1,234,567.89
タイ๑,๒๓๔,๕๖๗.๘๙
ベトナム1.234.567,89
中華人民共和国1,234,567.89
香港1,234,567.89
台湾1,234,567.89
ベラルーシ1 234 567,89
ブルガリア1 234 567,89
スペイン1.234.567,89
チェコ1 234 567,89
デンマーク1.234.567,89
オーストリア1.234.567,89
スイス1'234'567.89
ドイツ1.234.567,89
ルクセンブルク1.234.567,89
ギリシア1.234.567,89
オーストラリア1,234,567.89
カナダ1,234,567.89
イギリス1,234,567.89
アイルランド1,234,567.89
インド1,234,567.89
ニュージーランド1,234,567.89
南アフリカ1,234,567.89
アルゼンチン1.234.567,89
ボリビア1,234,567.89
チリ1.234.567,89
コロンビア1,234,567.89
コスタリカ1,234,567.89
ドミニカ共和国1,234,567.89
エクアドル1,234,567.89
スペイン1.234.567,89
グアテマラ1,234,567.89
ホンジュラス1,234,567.89
メキシコ1,234,567.89
ニカラグア1,234,567.89
パナマ1,234,567.89
ペルー1.234.567,89
プエルトリコ1,234,567.89
パラグアイ1.234.567,89
エルサルバドル1,234,567.89
ウルグアイ1.234.567,89
ベネズエラ1.234.567,89
エストニア1 234 567,89
フィンランド1 234 567,89
ベルギー1.234.567,89
カナダ1 234 567,89
スイス1'234'567.89
フランス1 234 567,89
ルクセンブルク1 234 567,89
クロアチア1.234.567,89
ハンガリー1 234 567,89
アイスランド1.234.567,89
スイス1'234'567.89
イタリア1.234.567,89
リトアニア1.234.567,89
ラトビア1 234 567,89
マケドニア1.234.567,89
ベルギー1.234.567,89
オランダ1.234.567,89
ノルウェー1 234 567,89
ノルウェー1 234 567,89
ポーランド1 234 567,89
ブラジル1.234.567,89
ポルトガル1.234.567,89
ルーマニア1.234.567,89
ロシア1 234 567,89
スロバキア1 234 567,89
スロベニア1.234.567,89
アルバニア1.234.567,89
スウェーデン1 234 567,89
トルコ1.234.567,89
ウクライナ1.234.567,89
アメリカ合衆国1,234,567.89

コードは以下。最近 Java 使ってなかったので、いろんなものが思い出せなくて苦労した。書き方とか使ってるクラスとか古臭いかったら申し訳ない。


import java.util.List;
import java.util.ArrayList;
import java.util.Locale;
import java.text.NumberFormat;
import java.io.FileOutputStream;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;

/**
* show number formats example in all Java-available countries
*
* usage:
* > javac WorldNumberFormats.java
* > java WorldNumberFormats
* (open result.txt with UTF-8 compatible editors/browsers)
*
*/
public class WorldNumberFormats {
public static void main(String argv[]) {
double amount = 1234567.89;

PrintWriter writer = null;
try {
writer =
new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("result.txt"), "UTF-8"
)
)
);

Locale[] allLocales = Locale.getAvailableLocales();
for (Locale oneLocale : allLocales) {
String localeCountry = oneLocale.getDisplayCountry();
if (localeCountry == null || localeCountry == "") {
// this locale is language-locale so ignore it
continue;
}

NumberFormat oneFormat =
NumberFormat.getNumberInstance(oneLocale);
writer.println(
localeCountry + " :\t" + oneFormat.format(amount));
}
writer.flush();
writer.close();
} catch (Exception ex) {
if (writer != null) {
writer.flush();
writer.close();
}
ex.printStackTrace();
}
}
}

投稿者 秋元 : 2006年08月08日 17:09

トラックバック

このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/738

 
mg src="http://img.awasete.com/image.phtml?u=http%3A%2F%2Flabs.cybozu.co.jp%2Fblog%2Fakky%2F" width="160" height="140" alt="あわせて読みたい" border="0">

著書

PHPxWebServiceAPIConnections.jpg

プロフィール

週三日勤務で、残りは個人で活動しています