L10n introduction

60
L10N Introduction Localization Workshop @ Mozilla Office by Tomoya Asai (dynamis)

description

ローカライズ勉強会で使用するスライド

Transcript of L10n introduction

Page 1: L10n introduction

L10N IntroductionLocalization Workshop @ Mozilla Office

by Tomoya Asai (dynamis)

Page 2: L10n introduction

about:me Tomoya ASAI (dynamis) Mozilla Japan - Technical mktg. http://dynamis.jp/ http://facebook.com/dynamis http://twitter.com/dynamitter dynamis mozilla-japan.org@

dynamis (古代ギリシャ語 dunamis) は「でゅなみす」と読みます

Page 3: L10n introduction

AgendaLocalizationMozilla's L10NRapid ReleaseJapanese L10NOther L10N

Page 4: L10n introduction

LocalizationWhat is Localization

Page 5: L10n introduction

国際化と地域化国際化: Internationalization (I18N)技術的変更なくソフトウェアを様々な言語や地域に適合可能にする設計プロセス地域化: Localization (L10N: えるてん)(国際化されているソフトウェアを)特定の言語や地域に適合させること

国際化 (I18N)

A国への地域化

B国への地域化

C国への地域化

Page 6: L10n introduction

国際化対応インターフェイスの国際化対応UI ラベルやメッセージを翻訳可能に分離

テキスト処理の国際化対応言語によって文字も表示も入力方法も異なる単なるマルチバイト文字列対応だけではない

文化的な国際化対応日時や単位系の違いが典型的

ドキュメントの国際化対応マニュアルなどの翻訳、リンク変更など

Page 7: L10n introduction

ex. テキスト処理文字種英数字、ラテン、ギリシャ、アラビア ...ひらがな、カタカナ、ハングル ...漢字(日本、韓国、簡体字、繁体字) ...Unicode でも旧字体のサポートなど ...

書字方向左から右(ltr) と 右から左(rtl) 左右交互も...横書き と 縦書き

文字入力直接、読み、部首、合成、コード ...

Page 8: L10n introduction

ex. テキスト分離gettext による国際化対応がもっとも標準的

翻訳テキストは次のような .pot ファイルに分離

L10N ではこのようなファイルの翻訳をする厳密には .pot を元に .po を生成して...

printf("This class is %s.\n", class_name);// gettext() またはそのエイリアス _() 関数で処理printf(_("This class is %s.\n"), class_name);

#: src/l10n.c:123msgid "This class is %s.\n"msgstr ""

http://www.gnu.org/software/gettext/

Page 9: L10n introduction

ソフトウェアの地域化地域化: Localization (L10N)(国際化されているソフトウェアを)特定の言語や地域に適合させること

オリジナル言語のファイルを翻訳する文脈不明な文字列翻訳は難しい ...

国、言語、文化に依存する設定を調整するフォント、日時、単位系 ...

ハードウェア依存の調整キーボードレイアウト ...

Page 10: L10n introduction

Localizability (L12y)地域化にどれだけ対応できているか全ての文字列が適切に翻訳可能か文字列長が変わっても問題ないかどの言語でも文字化けしないかIME などが問題なく動作するかフォントの違いで描画に問題が生じないかなどなど ...

Page 11: L10n introduction

L10N != 翻訳L10N では文脈判断が難しいex: "Open Window" の訳は?OS に依存するケースもあるex: "Cut" や "Paste" コマンド画面幅の制約で表現調整が必要ex: Android 版のメニューは全角 6 文字まで定訳のない語句、業界依存語句なども多いex: "Personas", "Panoramas" "Awesomebar"

Page 12: L10n introduction

L10N = LocalizationLocalization (地域化)は要するに各国語版の作成翻訳 (Translation)+設定や機能を各国用に調整長いので間の 10 文字略して L10N と表記I18N = Internationalization は国際化対応Firefox では現在 87 の Locale が作業中Locale とは個別に L10N を行う言語や国のこと最も多言語で同時リリースされる OSS

Page 13: L10n introduction

Mozilla's L10nMozilla's L10n System

Page 14: L10n introduction

言語リソースファイルUI 文字列は 言語リソースファイル で定義言語リソースファイルを訳すのが L10N の主な作業主に dtd と properties の二種類のファイルファイルの文字コードは原則として UTF-8

個々の UI 文字列の定義を エンティティ (実体) と呼ぶエンティティは ID (名前) と ラベル文字列 (値) のペア<!ENTITY fileMenu.label "ファイル">openFile = ファイルを開く

使用箇所は ID 名でコードを検索すれば大抵分かるコードの検索は MXR: http://mxr.mozilla.org/

Page 15: L10n introduction

Mozilla のテキスト分離DTD ファイルで実体参照を定義して XML に読み込むXML 文書で文字列を分離、一元管理する手法書式は少しややこしいが変数分離してるだけ

<!DOCTYPE overlay [ <!ENTITY % sampledtd SYSTEM "sample.dtd" > %sampledtd;]><window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <hbox pack="center" align="center" height="300"> <label value="&label.value;" style="&label.style;"/> </hbox></window>

<!ENTITY lable.value "(>.&lt;)"><!ENTITY label.style "font-size: 64px; font-weight: bold">

sample.dtd

Page 16: L10n introduction

Mozilla のテキスト分離DTD ファイルで実体参照を定義して XML に読み込むXML 文書で文字列を分離、一元管理する手法書式は少しややこしいが変数分離してるだけ

<!DOCTYPE overlay [ <!ENTITY % sampledtd SYSTEM "sample.dtd" > %sampledtd;]><window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <hbox pack="center" align="center" height="300"> <label value="&label.value;" style="&label.style;"/> </hbox></window>

<!ENTITY lable.value "(>.&lt;)"><!ENTITY label.style "font-size: 64px; font-weight: bold">

DTD での定義に従って実体参照は値に置き換え

分離した DTD ファイルを外部パラメータ実体として宣言して読み込む (include)

実体参照宣言により名前と値のペアを定義

sample.dtd

Page 17: L10n introduction

dtd ファイルの例<!ENTITY tabCmd.label "New Tab"><!ENTITY tabCmd.accesskey "T"><!ENTITY tabCmd.commandkey "t"><!ENTITY openLocationCmd.label "Open Location…⋯"><!ENTITY openLocationCmd.accesskey "L"><!ENTITY openFileCmd.label "Open File…⋯"><!ENTITY openFileCmd.accesskey "O"><!ENTITY openFileCmd.commandkey "o"><!ENTITY printSetupCmd.label "Page Setup…⋯"><!ENTITY printSetupCmd.accesskey "u"><!ENTITY printPreviewCmd.label "Print Preview"><!ENTITY printPreviewCmd.accesskey "v"><!ENTITY printCmd.label "Print…⋯">

Page 18: L10n introduction

dtd ファイルの例<!ENTITY tabCmd.label "新しいタブ"><!ENTITY tabCmd.accesskey "T"><!ENTITY tabCmd.commandkey "t"><!ENTITY openLocationCmd.label "URL を開く..."><!ENTITY openLocationCmd.accesskey "L"><!ENTITY openFileCmd.label "ファイルを開く..."><!ENTITY openFileCmd.accesskey "O"><!ENTITY openFileCmd.commandkey "o"><!ENTITY printSetupCmd.label "ページ設定..."><!ENTITY printSetupCmd.accesskey "u"><!ENTITY printPreviewCmd.label "印刷プレビュー"><!ENTITY printPreviewCmd.accesskey "v"><!ENTITY printCmd.label "印刷...">

Page 19: L10n introduction

dtd ファイルの例<!ENTITY tabCmd.label "新しいタブ"><!ENTITY tabCmd.accesskey "T"><!ENTITY tabCmd.commandkey "t"><!ENTITY openLocationCmd.label "URL を開く..."><!ENTITY openLocationCmd.accesskey "L"><!ENTITY openFileCmd.label "ファイルを開く..."><!ENTITY openFileCmd.accesskey "O"><!ENTITY openFileCmd.commandkey "o"><!ENTITY printSetupCmd.label "ページ設定..."><!ENTITY printSetupCmd.accesskey "u"><!ENTITY printPreviewCmd.label "印刷プレビュー"><!ENTITY printPreviewCmd.accesskey "v"><!ENTITY printCmd.label "印刷...">

ID 名には次のような規則がある *.label: UI 文字列 *.accesskey: アクセスキー *.commandkey: ショートカットキー

Page 20: L10n introduction

properties ファイルの例# RSS Pretty PrintfeedNoFeeds = Page has no feedsfeedShowFeedNew = Subscribe to '%S'…⋯feedHasFeedsNew = Subscribe to this page…⋯

# History menumenuOpenAllInTabs.label = Open All in TabsmenuOpenAllInTabs.accesskey = o

# Unified Back-/Forward PopuptabHistory.current = Stay on this pagetabHistory.goBack = Go back to this pagetabHistory.goForward = Go forward to this page

# Star buttonstarButtonOn.tooltip = Edit this bookmarkstarButtonOff.tooltip = Bookmark this page

Page 21: L10n introduction

properties ファイルの例# RSS Pretty PrintfeedNoFeeds = ページにはフィードがありません。feedShowFeedNew = '%S' を購読...feedHasFeedsNew = このページを購読します

# History menumenuOpenAllInTabs.label = タブですべて開くmenuOpenAllInTabs.accesskey = o

# Unified Back-/Forward PopuptabHistory.current = 現在のページですtabHistory.goBack = このページに戻りますtabHistory.goForward = このページに進みます

# Star buttonstarButtonOn.tooltip = このページのブックマークを編集しますstarButtonOff.tooltip= このページをブックマークに追加します

Page 22: L10n introduction

properties ファイルの例# RSS Pretty PrintfeedNoFeeds = ページにはフィードがありません。feedShowFeedNew = '%S' を購読...feedHasFeedsNew = このページを購読します

# History menumenuOpenAllInTabs.label = タブですべて開くmenuOpenAllInTabs.accesskey = o

# Unified Back-/Forward PopuptabHistory.current = 現在のページですtabHistory.goBack = このページに戻りますtabHistory.goForward = このページに進みます

# Star buttonstarButtonOn.tooltip = このページのブックマークを編集しますstarButtonOff.tooltip= このページをブックマークに追加します

*.properties ファイルでは %S などのプレースホルダが頻繁に使用される

Page 23: L10n introduction

黙々と・・・

Page 24: L10n introduction
Page 25: L10n introduction
Page 26: L10n introduction
Page 27: L10n introduction
Page 28: L10n introduction
Page 29: L10n introduction
Page 30: L10n introduction
Page 31: L10n introduction

Rapid ReleaseRapid Release & L10N

Page 32: L10n introduction
Page 33: L10n introduction
Page 34: L10n introduction

開発チャンネルRelease, Beta, Aurora, NightlyRelease になるまでに L10N を完了L10N は通常 Aurora で行うNightly は日々 en-US が変化するAurora からは原則 en-US 変更なし重要な修正は Beta でも行うことありen-US との過不足はマージしてビルドされる過不足あると起動しなくなるので

Page 35: L10n introduction

リポジトリL10N は基本的に Aurora が対象Aurora リポジトリ

http://hg.mozilla.org/releases/mozilla-aurorahttp://hg.mozilla.org/releases/comm-auroraAurora L10N リポジトリ

http://hg.mozilla.org/releases/l10n/mozilla-aurora/jahttp://hg.mozilla.org/releases/l10n/mozilla-aurora/ja-JP-macmozja リポジトリ (ja/ja-JP-mac 訳し分け前)

https://code.google.com/p/mozja/

Page 36: L10n introduction

Japanese L10nja L10n System

Page 37: L10n introduction

ja & ja-JP-macWindows/Linux/Android と Mac は別ロケールMac だけ OS の用語・訳語が大きく異なるFirefox 1.0 以前から日本語だけ訳し分けコミュニティの要望から個別リクエストで実現

共通 ja ファイルからそれぞれのファイルを生成訳し分けは ja.filters ファイルで定義共通ファイルでは @@変数名@@ を使うex. @@Cut@@ → 切り取り or カット

Page 38: L10n introduction

元に戻すvs

取り消す

ja (Windows) or ja-JP-mac (Mac) ?

Page 39: L10n introduction

名前を付けて保存vs

別名で保存

ja (Windows) or ja-JP-mac (Mac) ?

Page 40: L10n introduction

既定の Web ブラウザvs

デフォルト Web ブラウザ

ja (Windows) or ja-JP-mac (Mac) ?

Page 41: L10n introduction

新しいフォルダvs

新規フォルダ

ja (Windows) or ja-JP-mac (Mac) ?

Page 42: L10n introduction

ごみ箱vs

ゴミ箱

ja (Windows) or ja-JP-mac (Mac) ?

Page 43: L10n introduction

ウィンドウvs

ウインドウ

ja (Windows) or ja-JP-mac (Mac) ?

Page 44: L10n introduction

L10N 環境についてGoogle Code を使っていますhttp://code.google.com/p/mozja/権限さえあればブラウザだけで編集可能フィードバックや議論には L10N フォーラムhttp://forums.firehacks.org/l10n/各種ドキュメントは modest に揃ってますhttps://dev.mozilla.jp/l10n/docs/

Page 45: L10n introduction

試してみましょうここから本題。(^^;modest のドキュメントを参照Mozilla の L10N システム (説明済み)https://dev.mozilla.jp/l10n/system/日本語リソースを修正するにはhttps://dev.mozilla.jp/l10n/update/最新の英語リソースと同期するにはhttps://dev.mozilla.jp/l10n/sync/

Page 46: L10n introduction

QA TestTesting with Langpack

Page 47: L10n introduction

言語パックを作るLocalization Tools で L10N 環境を作る:

言語パックを作る

en-US からマージした言語パックを作る

その他: https://dev.mozilla.jp/l10n/lot/

hg clone https://code.google.com/p/mozja.lot/ lot; cd lotant setupl10n

ant auto onlyfx buildfx

ant auto convert insertnew pack

Page 48: L10n introduction

ユーザプロファイルユーザの設定やデータを収めたファイル群のこと設定、ブックマーク、履歴、拡張機能などFirefox では複数プロファイルを使い分けできるOS に複数のユーザを登録できるのと同じ別プロファイルで複数の Firefox を同時起動可L10N テスト用プロファイルを作るとよい万一起動しなくなったりしても安心

初心者は特に専用のプロファイルで開発することを強く推奨します

Page 49: L10n introduction

プロファイルマネージャプロファイルの新規作成や選択を行う管理画面Firefox を -P オプション付きで起動する

-no-remote をつけると別プロファイルで同時起動Vista 以降ではスタートメニューの検索ボックスにXP 以前では「ファイル名を指定して実行」に入力:

Mac ではターミナルで次のコマンドを実行:

firefox.exe -no-remote -P

/Applications/Firefox.app/Contents/MacOS/firefox -P

Page 50: L10n introduction

プロファイルマネージャプロファイルの新規作成や選択を行う管理画面Firefox を -P オプション付きで起動する

-no-remote をつけると別プロファイルで同時起動Vista 以降ではスタートメニューの検索ボックスにXP 以前では「ファイル名を指定して実行」に入力:

Mac ではターミナルで次のコマンドを実行:

firefox.exe -no-remote -P

/Applications/Firefox.app/Contents/MacOS/firefox -P

Page 51: L10n introduction

プロファイルマネージャプロファイルの新規作成や選択を行う管理画面Firefox を -P オプション付きで起動する

-no-remote をつけると別プロファイルで同時起動Vista 以降ではスタートメニューの検索ボックスにXP 以前では「ファイル名を指定して実行」に入力:

Mac ではターミナルで次のコマンドを実行:

firefox.exe -no-remote -P

/Applications/Firefox.app/Contents/MacOS/firefox -P

Page 52: L10n introduction

テスト用プロファイルテスト用プロファイルを作るl10n という名前でプロファイルを新規作成「今後このプロファイルを使用する」を無効に-P オプション無しでプロファイルマネージャ起動

Page 53: L10n introduction

テスト用プロファイルテスト用プロファイルを作るl10n という名前でプロファイルを新規作成「今後このプロファイルを使用する」を無効に-P オプション無しでプロファイルマネージャ起動

Page 54: L10n introduction

プロファイルディレクトリユーザプロファイルのデータを収めるディレクトリ

%APPDATA% は Windows Vista/7 では C:¥Users¥<username>¥AppData¥Roaming¥%APPDATA% は Windows XP/2000 では C:¥Documents and Settings¥<username>¥Application Data¥xxxxxxxx.l10n の xxxxxxxx はランダムな 8 文字 (salt)xxxxxxxx.l10n の l10n はプロファイル名デフォルトのプロファイル名は l10n でなく default

OS フォルダパス

Win 2000~ %APPDATA%¥Mozilla¥Firefox¥Profiles¥xxxxxxxx.l10n

Mac OS X ~/Library/Application support/Firefox/Profiles/xxxxxxxx.l10n

Linux ~/.mozilla/firefox/xxxxxxxx.l10n

Page 55: L10n introduction

Other LocalizationWeb Site, Fx Home etc...

Page 56: L10n introduction

Verbatim で L10NVerbatim: https://localize.mozilla.org/ja/Web サイトや一部製品の L10NAdd-ons for Firefox (https://addons.mozilla.org)Firefox Input (http://input.mozilla.com)Firefox Home (iPhone アプリ、更新停止)SUMO (http://support.mozilla.com)MDN (https://developer.mozilla.org)WoW (http://webofwonder.allizom.org)

Page 57: L10n introduction

Verbatimアカウント作って誰でも翻訳「提案」可能レビュー権限のある人が「査読」して採用レビュー権限のある人が「査読」する自分の翻訳を即時決定するには「送信」する一段落したら「VCS にコミット」する連携している SVN などにコミットされるプロジェクト毎のタイミングでサイトに反映タイミングはプロジェクト次第...

Page 58: L10n introduction
Page 59: L10n introduction

Any Question (・・)?

Page 60: L10n introduction

end.