まだPokéDia-1.3のアップデート審査が通っていないのですが、 次期バージョンで実装予定のデータバックアップ・リストアについて、 実装方法を考えてみます。

データをバックアップする方法として最初に考えた方法は、 指定したメールアドレスにデータファイルを添付して送信するというものだったのですが、この場合、データをリストアするフローが以下のように面倒になってしまいます。

  1. メールの中の添付ファイルをダウンロード
  2. 添付されたデータファイルをどこかにアップロード
  3. データファイルをpokedia://restore?url={url to data file}でPokéDiaにダウンロードしてリストア

次に考えた方法は、バックアップデータファイルをアップロードするアップローダサービス(例えば backup.s21g.com)を用意して、

  1. PokéDiaからbackup.s21g.comに直接HTTP POSTでデータファイルをアップロード(メールアドレスをキーにする)すると、リストアURL(pokedia://restore?url={url to data file})を含んだメールがキーとして指定されたメールアドレスに届く。
  2. 届いたメールの中のリストアURLをタップすればリストア完了。

という流れです。今の所これが良さそうかな。 汎用的なサービスになりそうなので、http://appli.st で提供する方が良いかもしれないですね。

posted by Png genki on Sun 22 Mar 2009 at 15:41

会社設立以来ほとんど更新していなかったのですが、 iPhoneアプリ等の開発で製品を紹介するページを置く場所が必要になったので、 Rails-2.3.2がリリースされた事もあり、I18nを使って国際化仕様のサイトを作りました。

http://ja.www.s21g.com/ 日本語 ss1

http://en.www.s21g.com/ 英語 ss2

従来通り、http://www.s21g.com/にアクセスすると、ブラウザの設定に従って、自動的に日本語か英語のサイトに振り分けられます。 localizationファイルをもっと用意すれば、ISOで定義されてる言語なら何語でも大丈夫なのですが、とりあえずはjaとenのみサポートです。

I18nの使い方

ローカライズファイルは、デフォルトではconfig/locales/*.ymlに配置します。 mutohさんの、 localelocale_rails を使うと色々と便利です。 EdgeバージョンはRails-2.3.2でも利用出来ました。

自動的にロケールを判別するために、以下のようなコードを ApplicationControllerに書きました。

   1  class ApplicationController < ActionController::Base
   2    before_filter :set_locale
   3  
   4    (..snip..)
   5  
   6    def set_locale
   7      I18n.locale = @original_locale = fallback_locale(I18n.locale)
   8      if request.host =~ /^([\w-]+)\.#{HOST.split(':')[0]}/i
   9        I18n.locale = fallback_locale($1)
  10      end
  11    end
  12  
  13  private
  14    def fallback_locale(locale)
  15      locale = locale.to_s
  16      @available_locales ||= Set.new(I18n.available_locales)
  17      until locale.empty? || @available_locales.include?(locale.intern)
  18        locale = locale.split(/([-_])/)[0..-3].join
  19      end
  20      locale.present? ? locale.intern : I18n.default_locale
  21    end

実際にローカライズする手順は、以下のような感じになります。

文字列のローカライズ

*.ymlファイルで定義されているメッセージキーに対して、

   1  ja:
   2    "hello": "こんにちわ"

こんな感じにt(...)ヘルパーメソッドを使います。

   1    t("hello") #=> "こんにちわ"

時刻などのローカライズ

時刻の場合もほぼ同様で、以下のような*.ymlファイルで定義されている設定に対応して、

   1  ja:
   2    date:
   3      formats:
   4        default: "%Y/%m/%d"
   5        short: "%m/%d"
   6        long: "%Y年%m月%d日(%a)"

以下のようにl(...)ヘルパーメソッドを使ってローカライズします。

   1  l(Date.today, :format => :short) #=> "03/22"

テンプレートのローカライズ

Viewテンプレートを丸ごとローカライズする場合は、

  • top/index.ja.html.erb
  • top/index.en.html.erb

のようなファイル名すればOKです。

posted by Png genki on Sun 22 Mar 2009 at 10:04
Contents
(PokéDia-1.4)データバックアップについて考える
Rails-2.3.2とI18nを使って会社サイトを作り直しました
Comments
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
tkawa: http://devcenter.heroku.com/articles/rails31_he... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ