Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Exgettextの話

2,149 views

Published on

Published in: Technology
  • DOWNLOAD THI5 BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Exgettextの話

  1. 1. exgettextの話 @k1complete shinjuku.ex #10
  2. 2. 発表者について • 元某ISPでのプログラマ • 現在は情マネ社畜 orz • 数年前にelixirを発見して今に至る • マクロ大好き
  3. 3. • 地域化とGNU gettextフレームワークについて • Exgettextについて • inside Exgettext 内容について
  4. 4. 地域化とGNU gettextフレー ムワークについて https://blogs.apache.org/OOo/tags/l10n
  5. 5. Internationalization(i18n)と Localization(L10n)とGNU gettext • i18n(国際化)とは、プログラムに技術的な変更を加えることなく様々な言語に 適用できるような仕組み • かつては、文字列が下位7bitしか通らなかったりして苦労していたが、現在 は8bitクリーンとなり、文字コードの問題もunicode/UTF-8のおかげで特 別なことはほとんどなくなってる(と思う) • L10n(地域化)とは、ある特定の言語に適合させること • メッセージの翻訳、通貨、数値、年月など • GNU gettextとは • L10n対応するためのツールの一つ(他にはPOSIX NLSライブラリがあるが … ) http://www.javacodegeeks.com/2013/02/internationalization-vs-localization-i18n-vs-l10n.html
  6. 6. GNU gettextの使い方 • GNU gettextは何をするか • 実行時にメッセージをロケールに合わせて用意された翻訳 メッセージに置き換える • 翻訳メッセージカタログのメンテナンス • なので、登場人物は2種類 • プログラマ • 翻訳チーム
  7. 7. プログラマ • プログラムを書くが、以下を行う。 • gettextヘッダファイルのインクルード(gettextマクロを有効に する) • 翻訳したほうがよいメッセージをマーキングする。Cだと、 _( foo message )のようなマーキングをすることが多い。 • xgettext(3)により、pot(Portable Object Template)を生成する (_( foo message )のような文字列をpotファイルとして保存する) • リリースする!以上!
  8. 8. 翻訳チーム • リリースファイル中のpotファイルを使い、ターゲッ ト言語用のメッセージカタログ(poファイル)を生成 する。 • msginitコマンドで行う。
  9. 9. 翻訳チーム つづき • ターゲット言語のpoファイルを翻訳していく • poファイルのフォーマット msgid foo msg msgstr となっているのでmsgstrに翻訳結果を記述する。 • po-mode(emacs)が便利(vimユーザ向けは…) • 翻訳終了後、msgfmtでmo(machine object)へ変換。 • 詳しくは、https://www.gnu.org/software/gettext/manual/html_node/ index.html#Top を参照ください。
  10. 10. ワークフロー .cなど .pot xgettext .po msginit .mo msgfmtmsgmerge 旧 .po 実行ファ イル gettext(3) .pox 手動で msgmerge --update
  11. 11. Exgettextについて http://uniki.bg/services/internationalization/
  12. 12. Exgettextとは • GNU gettextのPOファイルサポートをelixir向けに 行うライブラリ • MOファイルは互換性はないため、exmo(中身は detsテーブル)という拡張子にしている(適当) • msginitやmsgfmt、msgmergeといった翻訳者が 使うコマンドはmixタスクにしている • Elixirドキュメントも翻訳対象!!
  13. 13. 使い方(プログラマー) • 翻訳対象のプロジェクトのmixでdepsにexgettextを加える • プロジェクトのcompilersをMix.compilers ++ [:po]とする • これをするとmix compileで自動的にl10n.msgfmtが行われる • mix do deps.get,deps.compileするとexgettext関連のローカルタスク が登録される。mix helpすると l10n.*といったタスクが表示される • ソース中でuse Exgettextとして、プログラムの先頭で Exgettext.setlocaleを呼び出す(これでその時点のロケールで動作する) • ソースファイル中のリテラルテキストを Tでマークアップしてmix l10n.xgettextを行う(potファイルができる)
  14. 14. 使い方(翻訳チーム) • mix l10n.msginitを行い、初期poファイルを作成 する。初期poファイルの翻訳を行う • mix l10n.msgfmtを行い、exmoファイルを作成す る • 元のプロジェクトが変更されたら、mix l10n.msgmerge --update で新しいpotファイル をpoにマージする
  15. 15. ワークフロー *.ex .pot l10n.xgettext .po l10n.msginit .exmo l10n.msgfmt l10n.msgmerge --update 旧 .po *.beam Exgettext.Runtime.gettext/2 .poxl10n.msgmerge 手動
  16. 16. ディレクトリ構成 プログラム中に Tでマークアップ された、テキストリテラル (sample.pot)とlang.po ソースツリーに対応したディレクト リ構造があり、ソースファイル中の @moduledocと@docについてのマー クアップ(sample.ex.pot)と、 lang.poが置かれる exmoファイル が格納される 以前のバージョンでは、テキストリテラルも、 ドキュメントもすべてマージされた単一のpo ファイルだったが、先日、分離しちゃった
  17. 17. inside Exgettext • 内容 • 翻訳対象のマークアップ • IExへの組み込み
  18. 18. 翻訳対象のマークアップ • 既述のとおり、Elixirの機能である、ユーザ定義sigil を使う • 開発者は T foo, bar とすることで、 foo, bar を翻訳してほしいことを示す。 • Cでは_( foo, bar )なので、ほとんど面倒は変わら ない(はず)。1ストローク減ってるし。
  19. 19. • sigilとは、単なるリテラルに神秘の力()を与える印 • 組み込みで正規表現の rなどあるが、ユーザが定義することもできる • 今回の Tについて、神秘()の中身 • コンパイル時にやりたいことは、 • poファイルを作成するための文字列を登録する • 実行時にやりたいことは、 • ロケールに合わせてexmoを参照した結果を返す sigil_T https://www.shroudoftheavatar.com/forum/index.php?threads/quick-and-dirty-mod-to-the-magic-sigil.3583/
  20. 20. ということで、レッツ defmacro sigil_T @doc """ ~T is detect to translate target string. """ defmacro sigil_T({:<<>>, _line, [string]}, options) do binary = Macro.unescape_string(string) case options do [] -> quote do: txt(unquote(binary)) options -> options = List.to_atom(options) v = {:"var!", [], [{options, [], nil}]} quote do txt(unquote(binary), unquote(v)) end end end 本当の神秘はtxt/2 var = ja ; T foo var などとすると、動的 に言語指定できるための仕組み リテラル文字列のAST表現(バ イナリ)
  21. 21. 本体はこちら @doc """ translate target string by lang. """ defmacro txt(s, lang) do r = __CALLER__ path = System.get_env("PWD") app = get_app() put_dets(s, %{line: r.line, file: Exgettext.Util.relative(r.file, path), function: r.function }) quote bind_quoted: [app: app, s: s, lang: lang] do Exgettext.Runtime.gettext(app, s, lang) end end • コンパイル時にマクロ展開の副作用と して、detsへ文字列が登録される。 • プログラム実行時は影響なし。 • line, fileなどは、マクロ呼び出し元 • コンパイル時、マクロはこのASTを返し、コード生成される。 • したがって、プログラム実行時はコレが実行され、gettext/3 関数を呼び出し、langに合わせた翻訳文に変換される。
  22. 22. ドキュメントの地域化 • @docや@moduledocも翻訳対象にすると、IExや ex_docとかでマニュアルも地域化できるかも • ということで、これらも対象にしたいので、 l10n.xgettextタスク中で、Code.get_docs/2を 使って収集
  23. 23. iexのhコマンド • iexのhコマンドは、単なるimportされたマクロに 過ぎないので、別モジュールでh/1として作成し importすれば上書きできる • Exgettext.Helper.h(module.fun / arity)もただの マクロとしてIEx.Helperを参考に実装 • iexから利用するときにimport Exgettext.Helper することで有効になる
  24. 24. 実験: オレオレh/2の作成 defmodule Exgettexttalk do require IEx.Helpers defmacro h() do quote do IEx.Helpers.h() end end defmacro h({:/, _, [:iiiii, 0]}) do "you success :overwritting iex helper." end defmacro h(call) do quote do IEx.Helpers.h(unquote(call)) end end end h :iiiii/0という独自コマンドの定義 その他は、本物のhコマンドを呼び出 す
  25. 25. 実験: オレオレh/2の組み込み $ iex -S mix Eshell V6.3 (abort with ^G) Interactive Elixir (1.1.0-dev) - press Ctrl+C to exit (type h() ENTER for help) iex(1)> import Exgettexttalk nil iex(2)> h :iiiii/0 "you success :overwritting iex helper." iex(3)> h Enum.reverse/1 def reverse(collection) Reverses the collection. Examples ┃ iex> Enum.reverse([1, 2, 3]) ┃ [3, 2, 1] iex(4)> ちゃんと割り込んで仕込んだメッセージを 表示できた。 その他のコマンドのヘルプは通常どおり表 示された。ということで、原理的には翻訳 できなかったら、本物を呼び出して表示す ればよい!
  26. 26. 実演 • サンプルプロジェクトのl10n化(ja) • IExでのドキュメントのl10n化(ja)
  27. 27. まとめ • exgettextつかうと、GNU gettextライブラリとほ ぼ同じように地域化できる • ついでにelixirのドキュメントも地域化したからIEx から参照できるよ。exgettext入れて、おまじない (import Exgettext.Helper)すればね(ただし翻訳品 質は、…お察しください) http://www.mageewp.com/make-wordpress-themes-translation-ready.html
  28. 28. ご静聴ありがとうございました • リソース • elixir/iex/ex_unitリファレンスマニュアル • http://www.maqcsa.org/elixir/docs/ • elixirリファレンス(上記)の日本語翻訳ソース • https://github.com/k1complete/l10n_elixir • exgettextソース • https://github.com/k1complete/exgettext

×