Slide 1

Slide 1 text

.NETアプリケーションの 国際化入門 2014/08/10 Code 2014 CLR/H 素敵なおひげ

Slide 2

Slide 2 text

自己紹介  H/N  素敵なおひげ  Twitter - @stknohg  Blog - http://d.hatena.ne.jp/stknohg  何者?  CLR/Hの裏方。  札幌でSIerやってます。  インフラ構築からアプリ製造、運用まで色々やってま す。

Slide 3

Slide 3 text

国際化と地域化  Wikipedia  http://ja.wikipedia.org/wiki/国際化と地域化  地域化  地域固有の構成部品や翻訳テキストを追加することによって、 ソフトウェアを特定の地域や言語に適合させる工程 →本発表ではこちらについて主に触れる  国際化  ソフトウェアに技術的な変更を加えることなく多様な言語や地 域に適合できるようにする、ソフトウェア設計の工程 ※以下は発表時の間違っていた定義なので削除  オレオレ定義  地域化 – Localization (l10n)  特定のリソース(だいたい言語)のみを国別に対応する  国際化 – Internationalization(i18n)  リソースに加え、アプリケーションの内容も国別に対応する

Slide 4

Slide 4 text

国際化で扱う主なリソース  地域  言語  日付  時刻  通貨  商習慣・文化

Slide 5

Slide 5 text

.NETでの国際化対応  System.Globalization名前空間  CultureInfoクラス  http://msdn.microsoft.com/ja- jp/library/System.Globalization.CultureInfo.aspx  スレッドカルチャとUIカルチャ  スレッドカルチャ  各スレッド毎のカルチャ  CultureInfo.CurrentCulture  UIカルチャ  UI用(多分UIスレッド)のカルチャ  CultureInfo.CurrentUICulture

Slide 6

Slide 6 text

.NETでの国際化対応  カルチャの種類  インバリアントカルチャ  カルチャ未指定の場合  カルチャ指定  [言語]-[地域]  ja-JPなど  カルチャ名はRFC4646に準ずる  言語=ISO639 地域=ISO3166  [言語]  jaなど  言語のみ指定するカルチャ=ニュートラルカルチャ  .NET3.5まではカルチャをニュートラルカルチャにすることがで きなかった。

Slide 7

Slide 7 text

地域  地域と言語  OS上は地域と言語はセットで扱われることが多い。  .NETのカルチャ指定も「言語-地域」。  ja-JP / en-US / en-GB  現実は地域と言語はバラバラである。  ja-USだったりen-JPな場合はままある  ※上記の様なカルチャ指定はできないので注意  システムとしてどの地域を採用するか?  PCやサーバーが物理的に置かれている場所?  OSの設定上の地域?

Slide 8

Slide 8 text

言語(言語表記)  言語リソース  .NET Frameworkではカルチャ別にリソースを持てる。  リソース無し=デフォルト  対応したいカルチャに対してリソースを作成する。  リソース上はニュートラルカルチャと個別のカルチャは別 扱いになる  jaカルチャとja-JPカルチャでは別リソース  個別のカルチャ➡ニュートラルカルチャでリソースは参照される  ResourceファイルとResxファイル  .NETではXML形式のResxファイルがリソースの基本  従来のテキストベースのResourceファイルも使用可能  リソースコンパイラで別途リソースを作る必要はある

Slide 9

Slide 9 text

言語(文字コード)  文字コード  国際化対応するならシステムで扱う文字コードは ユニコードにせざるを得ない。  UTF-8?UTF-16?  システム要件次第。  採用するデータベースにも左右される。  照合順序  文字や数字の並び順。  アプリケーションでは意識することは少ないが データベースによっては意識する必要がある。

Slide 10

Slide 10 text

言語(文字について)  1文字は何バイトか?  UTF-8で文字を扱う場合、1文字のバイト数を意識する必 要がある。  画面の入力上限  データベース設計  1文字に見える文字  サロゲートペア  合成文字  アクセント記号、濁点・半濁点  ハングル文字やタイ文字など  補足  日本語の半角・全角  外字、拡張ASCII領域

Slide 11

Slide 11 text

日付  日付書式  国が違えば日付書式も異なる。  日本 – yyyy/MM/dd  アメリカ – MM/dd/yyyy  ドイツ – dd.MM.yyyy  CultureInfo.DateTimeFormat  暦  今年は何年何月何日?  西暦(グレゴリオ暦) - 2014年8月9日  和暦 - 平成26年8月9日  タイ太陽暦 – 2557年8月9日 (西暦+543年)  NewCulture.DateTimeFormat.Calendar

Slide 12

Slide 12 text

日付  データベースでの日付  極力日付型を使う。  必要があればTimezone付きの型を使用する。  CHAR(8)…  既存システムとの連携などでCHAR(8)で日付を格納しな ければならない場合はそれなりにある。  この場合の書式はシステム全体で統一する必要がある。

Slide 13

Slide 13 text

時刻  時刻書式  時刻書式も国別に分かれるが、時-分-秒なのは大体同じ。  CultureInfo.DateTimeFormat  時差  国をまたぐアプリケーションでは時差を考慮する必要があ る。  システム上はUTC基準で動くと良い。  何の時刻を扱っているか常に意識する必要がある。  地域の実際の時刻  クライアントPCのローカル時刻  WEBサーバやDBサーバーのローカル時刻

Slide 14

Slide 14 text

通貨  通貨  国が違えば通貨も違う  (私の知る範囲では)システム上通貨は国ごとに個別に扱う  国別に法人が違うため。  通貨の単位  補助単位  システム上小数で扱う通貨。セント等。  €0.10 = 10c  桁区切り・小数点  “,”区切りの国と”.”区切りの国  桁区切りの桁数も国によって異なる。

Slide 15

Slide 15 text

通貨  通貨書式(≒数値書式)  CultureInfo.NumberFormat  通貨記号  CultureInfo.NumberFormat.CurrencySymbol  負号  CultureInfo.NumberFormat.NegativeSign  通貨の表記  日本(漢数字) – 金五千円也  タイ語 – ห้าพันบาทห้าสิบสตางค์ (5000バーツ50サタン)  ExcelにBAHTTEXT関数なんてものもある http://office.microsoft.com/ja-jp/excel-help/HP010342197.aspx

Slide 16

Slide 16 text

商習慣・文化  国が違えば文化や習慣、法律が違う  共通の業務ロジックが使用出来ない  システムとしての対処法  業務ロジックはリソース化できない。  国別に処理を分けるか、アプリケーション自体を分け るか?  ケースバイケースだが個人的にはアプリケーション自体を 分けた方が良いと思う。  Order.dllとOrder.en.dllの様な感じで。  リソースではないので切り替えは自前で行う。

Slide 17

Slide 17 text

(捕捉)Windows独自の事情  アプリケーションで国際化対応できないもの  コモンダイアログなどの共用リソース  OpenFileDialog  PrintDialog  Etc…  一部コントロールの外観  カレンダコントロールのカレンダー部分  OSの言語設定に依存