I18n for Your Web application

568 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
568
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

I18n for Your Web application

  1. 1. i18nのはなしWebアプリケーションを国際 化 門屋 亮 @ryokdy
  2. 2. 自己紹介• サイボウズ株式会社 勤務• 手がけた製品 – サイボウズ ガルーン – サイボウズ Office – サイボウズ デヂエ – サイボウズ メールワイズ など
  3. 3. 世界の主要言語 Top 10 母語人口 公用語人口1 中国語 (1,000) 1 英語 (1,400)2 英語 (350) 2 中国語 (1,000)3 スペイン語 (250) 3 ヒンディー語 (700)4 ヒンディー語 (200) 4 スペイン語 (280)5 アラビア語 (150) 5 ロシア語 (270)6 ベンガル語 (150) 6 フランス語 (220)7 ロシア語 (150) 7 アラビア語 (170)8 ポルトガル語 (135) 8 ポルトガル語 (160)9 日本語 (120) 9 マレー語 (160)10 ドイツ語 (100) 10 ベンガル語 (150)
  4. 4. どうでもいい話Internationalization国際化(i18n) は、ソフトウェアに技術的な変更を加えることなく多様な言語や地域に適合できるようにする、ソフトウェア設計の工程である。Localization地域化(L10N)は、地域固有の構成部品や翻訳テキストを追加することによって、ソフトウェアを特定の地域や言語に適合させる工程である。
  5. 5. 罠国際化 ≠ 多言語化
  6. 6. What language do you speak?Accept-Language: en-us,en;q=0.7,ja;q=0.3できれば英語で。なかったら日本語でいいよ!
  7. 7. Enabled Locales for java.util and java.text FunctionalityLanguage Country Locale IDArabic Saudi Arabia ar_SAChinese (Simplified) China zh_CNChinese (Traditional) Taiwan zh_TWDutch Netherlands nl_NLEnglish Australia en_AUEnglish Canada en_CAEnglish United Kingdom en_GBEnglish United States en_USFrench Canada fr_CAFrench France fr_FRGerman Germany de_DEHebrew Israel iw_ILHindi India hi_INItalian Italy it_ITJapanese Japan ja_JPKorean South Korea ko_KRPortuguese Brazil pt_BRSpanish Spain es_ESSwedish Sweden sv_SEThai (Western digits) Thailand th_THThai (Thai digits) Thailand th_TH_TH
  8. 8. ロケールてなに? RFC 3066で定義 言語(ISO639) + 地域(ISO3166) たとえば ja_JP 詳しくはこちらにCLDR(Common Locale Data Repository) http://cldr.unicode.org/
  9. 9. Script Codesr_Latn_RS セルビアのラテン表記セルビア語az_Cyrl_AZ アゼルバイジャンの キリル表記アゼルバイジャン語zh_Hans_CN 中国の簡体字中国語zh_Hant_HK 香港の繁体字中国語
  10. 10. 日本のひらがな日本語Ja_HIRA_JP
  11. 11. localization (en_US, en_CA) vs. localisation (en_GB, en_AU)
  12. 12. とりあえずはこれで。。en = en_USzh = zh_CN
  13. 13. なにはさておきHTML5<html lang="ja"><head><meta charset="UTF-8">
  14. 14. 日本語しか考慮しない実装<div> 新しいメッセージが <%= @items.count %> 件あります!</div>
  15. 15. <span> <%= I18n.t :newmessage, :count => @items.count %></span>
  16. 16. 日本語リソースja: newmessage: “新しいメッセージが ${count}件あります!”
  17. 17. 英語リソースen:newmessage: one: “You got a new message!” other: “You got ${count} new messages!”
  18. 18. フォントによって表記が変わるFor Japanese<div style="font: 30px MS Pゴシック"> 上海</div>For Chinese<div style="font: 30px SimHei"> 上海</div>
  19. 19. 左へ受け流す言葉
  20. 20. 受け流したくない場合body { direction:rtl; unicode-bidi:bidi-override;}
  21. 21. 「カ゛」と「ガ」は同じ文字 U+030AA COMBINING RING NFC正規化 ÅU+0041 → U+00C5 ABOVE U+3099 COMBININGカ KATAKANA- NFC正規化 ガU+30AB → U+30AC HIRAGANA VOICED SOUND MARK 評価する前に正規化が必要
  22. 22. 「ガ」と「ガ」は同じ文字?カ ゙ NFKC正規化 ガU+FF76 U+FF9E → U+30AC㍉ NFKC正規化 ミリU+3349 → U+30DF U+30EA⑳ NFKC正規化 20U+2473 → U+0032 U+0030検索キーなど正規化しておいた方 がいい場合がある
  23. 23. 数字 Positive NegativeCountry Locale Number Number日本 ja_JP 1,234.567 -1,234.567アメリカ en_US 1,234.567 -1,234.567スイス de_CH 1’234.567 -1’234.567フランス fr_FR 1 234,567 -1 234,567マケドニア mk_MK 1.234,567 (1.234,567)ドイツ de_DE 1.234,567 -1.234,567スウェーデン sv_SE 1 234,567 −1 234,567
  24. 24. いちいち調べてられん ICUのライブラリを使いますhttp://userguide.icu-project.org/
  25. 25. かんたんかんたんULocale locale = new ULocale("en_US");double myNumber = 1234.56;NumberFormat format = NumberFormat.getInstance(locale);try { System.out.print(((DecimalFormat) format).toPattern() + " -> " + format.format(myNumber));} catch (Exception e) {}
  26. 26. でもこれってまずいんじゃ。。 Positive NegativeCountry Locale Number Number日本 ja_JP 1,234.567 -1,234.567アメリカ en_US 1,234.567 -1,234.567スイス de_CH 1’234.567 -1’234.567フランス fr_FR 1 234,567 -1 234,567マケドニア mk_MK 1.234,567 (1.234,567)ドイツ de_DE 1.234,567 -1.234,567スウェーデン sv_SE 1 234,567 −1 234,567
  27. 27. そうCSVファイルをカンマ区切りに できない。
  28. 28. ちなみに CSVファイルをUTF-8で入出力するのもアウト。
  29. 29. 日付Country Locale DateTime Full DateTime Short 2009年10月24日日曜日日本 ja_JP 09/10/24 16:23 16時23分58秒JST Sunday, October 24,アメリカ en_US 10/24/09 4:23 PM 2009 4:23:58 PM Japan Time 200910月24日星期日中国 zh_CN 09-10-24 下午4:23 下午04时23分58秒 日本ロシア ru_RU среда, 24 ноября 2009 г. 18:23:00 24.10.09 16:23 Японское стандартное время domingo 24 de octubre de 2009スペイン es_ES 24/10/09 16:23 16H2358" Japón
  30. 30. 当然ICUで。DateFormat format =DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, locale);try { System.out.println(format.format(new Date()));} catch (Exception e) {}
  31. 31. 細かい日付のフォーマットは きにしない。和暦?なにそれ!
  32. 32. 全部CLDRに定義 されてます!
  33. 33. タイムゾーン• UTC + 0 (イギリス、ポルトガル)• UTC + 9 (日本)• UTC + 8:45 (オーストラリア)• UTC – 0:25 (1916年までアイルランドで採 用)• UTC + 4:51 (1955年までボンベイで採用)• UTC + 14 (キリバス)
  34. 34. Tz(Olson) database• ほとんどのOSやプログラミング言語で採 用• 世界各地域の標準時(time zone、タイム ゾーン)情報をボランティアの共同作業 により収録したデータ• 2011年10月からICANNとIANAの管理へ移行。 – 今はIANAタイムゾーンDBともいうらしい
  35. 35. めっちゃ更新されてる
  36. 36. なんで?
  37. 37. Daylight saving timeがむずい• 年によって開始/終了日が異なる• ブラジルでは毎年開始1か月くらい前に発 表• 同じ国でも地域によって適用されないと ころがある• 同じ予定を複数のタイムゾーンで共有す るようなシステムは死ねる• 特に複数国のDSTが被っているような予定 – Google カレンダーはがんばっている。
  38. 38. 未来の予定を作成後にタイムゾーンのルールが変更されたらどうなる?
  39. 39. 毎日15:00からおやつの予定。DST期間中はどうなる?東京〜ニューヨーク間で毎週AM10:00にミーティングの予定を作成。ニューヨークがDST期間中になるとどうなる?
  40. 40. 24時間以上時刻差のあるタイムゾーンでの終日予定はどうなる??
  41. 41. まとめ• 国際化にはある程度割り切りが重要• とりあえずICU使っとけばいい• 予定共有の国際化はハマる

×