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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

3,293

Published on

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

No Downloads
Views
Total Views
3,293
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
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がおすすめ。

×