Your SlideShare is downloading. ×
  • Like
Webアプリケーションの国際化
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Webアプリケーションの国際化

  • 3,237 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,237
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
78
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Webアプリケーション の国際化 2007/08/09 - ウノウ株式会社 - 駒形真幸 <komagata@p0t.jp>
  • 2. GNU gettextを使おう
  • 3. GNU gettextのいいところ 多機能 ● (多過ぎて紹介しきれません・・・) 関連ツールが揃ってる ● 枯れてる ●
  • 4. 国際化の大体の手順 1. ソース中の文字列をgettext関数で置き 換える 2. 置き換えた部分を元にpotファイル (PO Template)を作る 3. potファイルから各言語用のpoファイル (Portable Object)にコピー・編集 4. poファイルをmoファイル (Machine Object)にコンパイル
  • 5. Rubyの例で説明 (他の言語でもあまり違わない)
  • 6. Ruby-GetTextで国際化 GNU gettextと共通のツールが使える ● (ファイルのパースはRacc) Railsをサポート ●
  • 7. Hello, Worldを国際化
  • 8. hello.rb: #!/usr/bin/env ruby require 'rubygems' require 'gettext' include GetText bindtextdomain('hello') puts _('Hello, World') # 文字列を_()関数で置き換える $ mkdir -p po/ja $ rgettext hello.rb -o po/hello.pot $ msginit -i po/hello.pot -o po/ja/hello.po -l ja msginitが言語によってpluralを設定してくれるので便利
  • 9. po/ja/hello.po (略) quot;Plural-Forms: nplurals=1; plural=0;nquot; #: hello.rb:8 msgid quot;Hello, Worldquot; msgstr quot;こんにちは、世界quot; _()関数の部分を自動的にmsgidとして抽出してくれてるので対応する文 字列をmststrに入れていく
  • 10. $ mkdir -p locale/ja/LC_MESSAGES $ rmsgfmt po/ja/hello.po -o locale/ja/LC_MESSAGES/hello.mo $ export GETTEXT_PATH='locale' $ ./hello.rb こんにちは、世界 rmsgfmtコマンドでpoファイルをmoファイルにコンパイルする。 $ export LANG=en_us.UTF-8 $ ./hello.rb Hello, World 環境変数の言語設定によって切り替わる。
  • 11. Railsアプリケーションの国際化
  • 12. デフォルトの状態
  • 13. Ruby-GetTextを利用
  • 14. config/environment.rb: の下の方 require 'gettext/rails' app/controller/application.rb class ApplicationController < ActionController::Base init_gettext 'rails_gettext' end
  • 15. Ruby-GetText自体がrailsのmoファイル を持ってるのでデフォルトのエラーメッセ ージなどがいきなり国際化
  • 16. アプリ固有部分も国際化
  • 17. lib/tasks/gettext.rake desc quot;Update pot/po files.quot; task :updatepo do require 'gettext/utils' GetText.update_pofiles( quot;rails_gettextquot;, Dir.glob(quot;{app,config,components,lib}/**/*.{rb,rhtml,rxml}quot;), quot;rails_gettext 0.0.1quot; ) end desc quot;Create mo-filesquot; task :createmo do require 'gettext/utils' GetText.create_mofiles(true, quot;poquot;, quot;localequot;) end こんな感じのtaskを作っておくと楽に。
  • 18. Webアプリケーションの場合 言語はどうやって選ばれるのか
  • 19. 優先順位 1. GetText.localeの値 2. QUERY_STRINGのlangの値 3. クッキーに保持されたlangという値 4. HTTPヘッダのAccept-Language (ブラウザで設定できるアレ) ※↑優先順位高 / ↓優先順位低
  • 20. 国際化で言語毎にDBを分ける という選択 (ソースは共通)
  • 21. ユーザーは知らない言語が画面に あると使ってくれない
  • 22. どうやってソース共通で DBを分けるか
  • 23. config/environment.rb: GetText.locale = ENV['RAILS_LANG'] config/database.yml: development: adapter: sqlite3 database: db/development<%= ENV['RAILS_LANG'] %>.sqlite3 timeout: 5000 ※環境変数RAILS_LANGは勝手に作った変数です。
  • 24. その発想は無かったわ
  • 25. Apache + mod_fcgidの場合: DefaultInitEnv RAILS_LANG en mongrelなどの場合: export RAILS_LANG=en; ruby script/server
  • 26. 翻訳作業を簡単に 翻訳はエンジニアがやるとは限らない ● gettextによる国際化は非エンジニアには ● 辛い(覚えるのに時間もかかる) 翻訳する人が複数いる場合の管理が大 ● 変 → そこでPootle
  • 27. Pootle Webからpoファイルの編集、svnへのコミ ● ットが出来る ユーザー管理や言語管理もWebから出 ● 来る Python製 ● パッケージがあれば一発インスール ● (無いとインストール地獄)
  • 28. まとめ • gettextは歴史があり、なんだかんだ いって便利。 • poの編集はPootleがおすすめ。