よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

March 25, 2006 [おもひで]

[Rails] Ruby-GetText-PackageでActionWebServiceのサポート

Ruby-GetText-Package-1.3.0とActionWebServiceを一緒に使うとエラーになるとレポートがありましたので修正しました。ActionWebServiceを使ってる方でかつRuby-GetText-Packageを使おうと考えている方はCVS版を使ってください。

その際に(需要があるかどうかは疑問だったのですが)、ActionWebServiceでlangパラメータを指定してあげると、controller側でローカライズができるようにしてみました。

# app/apis/product_api.rb
class ProductApi < ActionWebService::API::Base
  api_method :find_product_by_id, :expects => [:lang => :string],
                                  :returns => [{:string => String}]
end
 
# app/controller/backend_controller.rb
class BackendController < ApplicationController
  wsdl_service_name 'Backend'
  web_service_api ProductApi
  def find_product_by_id(id)
   _("foo") + ...
  end
end

[Rails] config/routes.rbで言語を指定する

こちらはRuby-GetText-Package-1.3.0ですでにサポートしているのですが、以下のようにするとURL内で言語を指定することができます。

ActionController::Routing::Routes.draw do |map|
 map.connect 'main_ja', :lang=>'ja', :controller=>'blog', :action=>'list'
 map.connect ':controller/:lang/:action/:id'
end

1つめのmap.connectでは、http://yourhost/main_ja とするとblog_controller.rbのlistアクションを呼び出すのですが、その際に@params["lang"]に"ja"が指定されるため、Ruby-GetText-Packageは日本語を強制的に表示し(ようとし)ます。

同様に2つめのmap.connectでは、http://yourhost/blog/ja/list/等とすると日本語を表示し(ようとし)ます。


編集