組み込みソフトの国際化対応

目次

はじめに

組み込みソフトであっても、日本国外で使用される可能性がある場合は、国際化対応というものをある程度考えておく必要があります。これがパソコンやスマートフォンのOS上で動くソフトウェアなら、OSから設定を読み出して処理できますが、組み込みソフトなら自ら選択肢を設けて処理する必要があります。国際化対応で最低限気を付けなければならないのは、下記の3点です。

  1. 日付のフォーマット
  2. 時間のフォーマット
  3. 小数点の記号

日付のフォーマット

日付の国際化対応で気を付けなければならないのは、年月日の並びと区切り記号です。

スクロールできます
項目選択肢
年月日の並びyyyy mm dd(年、月、日)
mm dd yyyy(月、日、年)
dd mm yyy(日、月、年)
年月日の区切り記号/(スラッシュ)
-(ハイフン
.(ピリオド)
日付の国際化対応

特に注意が必要なのは年月日の並びで、月と日の並びが国によって変わります。これにより「02/11/2000」という日付をみたとき、「11月2日」と認識する国と、「2月11日」と認識する国があるのです。

時間のフォーマット

時間の国際化対応で気を付けなければならないのは、時間の並びと区切り記号です。

スクロールできます
項目選択肢
時間の並びhh mm ss(時、分、秒)
hh mm ss tt(時、分、秒、午前午後)
tt hh mm ss tt(午前午後、時、分、秒)
時間の区切り記号:(コロン)
-(ハイフン)
.(ピリオド)
時間の国際化対応

時間の並びは「午前午後」の有無があります。しかし時間は24時間制とし、12時間制の対応は考えません。午前午後の表記は国ごとに異なる文字が使われ、対応が困難だからです。このため時間の並びについては、実質選択肢は「時、分、秒」の1択です。

小数点の記号

国際化対応を考えるうえでもっとも障害となるのが、この小数点の記号です。

スクロールできます
項目選択肢
小数点の記号.(ピリオド)[イギリス式]
,(コンマ)[フランス式]
その他
小数点の記号の国際化対応

日本ではピリオドが用いられていますが、世界の半分はコンマです。そしてこれが思わぬ障害となります。データをコンマで区切れなくなるのです。これにより昔からよく用いられてきた簡易データフォーマットであるCSV(character-separated values)を使う場合が注意が必要な他、電文のフォーマットにコンマを用いるのも避ける必要があります。なお小数点の記号にはその他という例外もありますが、そこまでは対応しません。

printf関数の小数点の記号を変更する

C言語でよく用いられるprintf系関数は、(日本においては?)デフォルトの小数点記号がピリオドになっています。これをコンマにするには、setlocale関数でロケール(国情報)を変更します。

#include <locale.h>
#include <stdio.h>

void func(void)
{
  char *s1, *s2;

  // 小数点の記号をピリオドにする
  setlocale(LC_NUMERIC, "JPN");  // 日本式
  sprintf(s1, "%5.3f", 1.234);   // s1 = "1.234"

  // 小数点の記号をコンマにする
  setlocale(LC_NUMERIC, "FRA");  // フランス式
  sprintf(s2, "%5.3f", 1.234);   // s2 = "1,234"
}

処理系によっては国の選択肢がJPNしかないなど、「locale.h」にまともに対応していないものもあります。そのような場合は文字列に変換したあとにコンマに置き換えるか、下記のように自作することを考えてください。

CSV(character-separated values)

簡易的なデータフォーマットとしてよく用いられるCSV(comma-separated values)ですが、先のとおり小数点の記号がコンマの国では使えません。この代替手段として、コンマ以外の記号で区切る必要があります。代表的な区切り記号としては下記表のものがあり、これらをまとめてCSV(character-separated values)と呼ぶこともあります。

スクロールできます
区切り記号略称正称
コンマCSVcomma-separated values
タブTSVtab-separated values
セミコロンSSVsemicolon-separated values
スペースSSVspace-separated values
代表的な区切り記号

コメント

コメントする

CAPTCHA


目次