[Rhaco]時間がない人のためのアプリケーション日本語化メモ
2009.12 21

Rhacoは国際化機能も持っています。 setup画面のi18nメニューから自分で用意したテンプレートを利用することも可能なようです。 とはいえ、Viewsを拡張して作った部分をとりあえず日本語化したい人(というか自分) [...]

Rhacoは国際化機能も持っています。
setup画面のi18nメニューから自分で用意したテンプレートを利用することも可能なようです。

とはいえ、Viewsを拡張して作った部分をとりあえず日本語化したい人(というか自分)へのメモ。
これでvalidate後のメッセージなども日本語化されます。
以下の手順はRhaco本体をローカルに取得済みとします。

・Rhaco本体のresources/setup/po/message-ja.potをアプリケーション側のsetup/poに配置
・Rhaco本体のresources/locale/messages/message-ja.phpをアプリケーション側の同ディレクトリに配置
・アプリケーション側のindex.phpで以下の2行を追加

Rhaco::import("resources.Message");
Message::loadMessages("ja");

試しにconfirmedCreateで作成したフォームや一覧などで英語表記だった部分が日本語になっていればOKです。本当にとりあえずなので、エラーメッセージのカスタマイズ時の手順は、

POTファイル編集->setupのi18nからPHPファイル生成

となります。あまりにあっけなく終わりましたが、こういうのが嬉しかったりします。

関連記事

この記事へのコメント

[OSX]NetBeansからsvn+sshでリポジトリにアクセス
2009.11 18

ここに手順はありますが、解りづらいので自分でググって辿っていきました。 まずコマンドベースでsvn+sshできるところまで さくらインターネットの場合、SSHログインの際に$PATHに読み込まれるパスにユーザ制限がかけら [...]

ここに手順はありますが、解りづらいので自分でググって辿っていきました。

まずコマンドベースでsvn+sshできるところまで

さくらインターネットの場合、SSHログインの際に$PATHに読み込まれるパスにユーザ制限がかけられるそうです。
よって、任意に配置したプログラムについては、 $HOME/bin へシンボリックリンクを貼っておく事で
問題を解決できます。
私の場合は、svn関連のコマンドは $HOME/local/bin に配置されていますので、以下の手順になりました。


% ln -s $HOME/local/bin $HOME/bin

続いて、リポジトリの初期化を行います。Berkeley DBは使用していないので、ファイルシステムにFSFSを
利用することとします。


% mkdir -p $HOME/svn/repos
% svnadmin create $HOME/svn/repos --fs-type fsfs

クライアント側で鍵認証のための手続きを行っていきます。
公開鍵を作成し、サーバ側に配置。その後、パスフレーズのスキップまでをついでに行います。
初期ディレクトリは /Users/ とします。


$ ssh-keygen -t rsa #パスフレーズを聞かれるので、入力しておきます。
$ scp .ssh/id_rsa.pub  @.sakura.ne.jp:.ssh/id_rsa.pub

#続いて、サーバにSSHログイン
% cd .ssh
% cat id_rsa.pub >> authorized_keys
% chmod 600 authorized_keys
% rm id_rsa.pub

#ここからクライアント側
$ ssh-agent bash
$ ssh-add
$ ssh -l username username.sakura.ne.jp

これでパスフレーズの入力なしでログインできたらOKです。

NetBeansからsvn+sshでリポジトリにアクセスする

NetBeansのバージョンは6.7です。まずはローカルのsvnクライアントについて設定を加えます。
/Users//.subversion/config を編集。
[tunnels]の項目で

ssh = ssh -l username

を追加。
NetBeansからのインポート、コミット時などのメッセージで日本語があるとエラーが表示されるので、
/Applications/NetBeans/NetBeans 6.7.1.app/Contents/Resources/NetBeans/etc/netbeans.conf
を編集し、netbeans_default_optionsの最後尾に以下を追加。

-J-Dfile.encoding=UTF-8

次に、
/Users//.subversion/config を編集。
[miscellany]の項目で

log-encoding = utf-8

と編集。

その後、NetBeansを再起動。
[チーム] -> [Subversion] -> [リポジトリにインポート]

リポジトリURLの項目に

svn+ssh://username.sakura.ne.jp/home/username/svn/repos
トンネルコマンドの項目に

ssh -l username

これでリポジトリにプロジェクトがインポートされます。
他に注意するのは、日本語のファイル名を持つファイルです。
ファイル名自体がUTF-8となっていないと、コミット時にエラーとなります。

私はDreamweaverを使ってないのですが、これでDreamweaverからもリポジトリにアクセス
できるはずなので、協業の際には役立ちそうです。
#Dreamweaver CS4からsvnクライアントの機能があり、svn+sshにも対応しています。

参考

  • [ssh] さくらサーバでsvn+sshを利用する方法(Linux/Mac)

関連記事

この記事へのコメント

さくらインターネットで今更subversionをインストール
2009.11 17

すでにgitでプロジェクトのソースを運用していましたが、以下の理由でsubversion(以下、svn)を インストールすることに。 個人かつ一人での開発がほとんど デザイナーにバージョン管理を進めたいのだけど、IDEに [...]

すでにgitでプロジェクトのソースを運用していましたが、以下の理由でsubversion(以下、svn)を
インストールすることに。

  • 個人かつ一人での開発がほとんど
  • デザイナーにバージョン管理を進めたいのだけど、IDEに統合されてるのはsvnが主流

というわけで、さくらインターネットのサーバにインストール。
今回インストールするバージョンは最新の1.6.6。以下、注意点。

  • deps(依存関係にあるパッケージをまとめたもの)を解凍するとsvnのソースディレクトリ内に展開されるので、面倒が少なくなる。
  • svnのバージョンが1.4.xあたりだと、自分でaprなどのパッケージをインストールしていかないといけない模様。
  • また、その場合はaprのバージョンが0.9.xか1.xかでも分かれる。

  • httpでリポジトリにアクセスするためにserfかneonのどちらか一方が必要だが、今のsvnはdefaultでneon。
    configure時に–without-serfを今回はつけた。
  • configure時にBerkeley DBが入ってないと警告がでるけど、そもそもオプションのパッケージなので無視でOK。
  • 結局のところ、各詳細はINSTALLを読めばOK。(英語やだとか言うんじゃありません)

インストールまでのコマンド


% wget http://subversion.tigris.org/downloads/subversion-1.6.6.tar.gz
% wget http://subversion.tigris.org/downloads/subversion-deps-1.6.6.tar.gz
% tar xvfz subversion-1.6.6.tar.gz
% tar xvfz subversion-deps-1.6.6.tar.gz
% cd subversion-1.6.6
% ./configure --prefix=$HOME/local --with-ssl --without-serf
% make all install clean

参考

関連記事

この記事へのコメント

Shadowbox.jsをAjax.Updaterと併用する
2009.10 29

Lightbox系のライブラリとして任意のJavaScriptライブラリを使ってもOKなShadowbox.js。 非常に便利でおすすめ。私はprototype.jsをよく使うのでそれと併せています。jQuery対応のも [...]

Lightbox系のライブラリとして任意のJavaScriptライブラリを使ってもOKなShadowbox.js。
非常に便利でおすすめ。私はprototype.jsをよく使うのでそれと併せています。jQuery対応のものばかりで肩身が狭いですが。

Shadowbox.jsの仕様として、下記のようにheadタグ内のscriptタグで初期化する必要があります。

//日本語表示、画像とHTMLをレンダリング対象とする
Shadowbox.init({language : "ja", player: ["img", "html"]});

このためAjax.Updaterなどで部分的に反映された要素はShadowbox.jsのイベントハンドラ登録が行われていない状態です。

そこで、下記の要領でAjax.Updaterを使用後に再度イベントハンドラ登録を行うと要素の更新後もShadowbox.jsを利用できます。

私の場合はForm.EventObserverと併用しているので、その中でcallしているAjax.Updater内に記述しています。

new Ajax.Updater(id,
	url,
	{
		asynchronous:true,
		evalScripts:true,
		onComplete:function(request){
			//その他の処理
			//最後にイベントハンドラの登録をし直す
			Shadowbox.setup();
		},
		onLoading:function(request){
			//その他の処理
			//現在のイベントハンドラをすべてクリア
			Shadowbox.clearCache();
		},
		parameters:value
	})

prototype.js以外のライブラリを使用している場合も、同様にonCompleteやonLoadingに相当するイベントにフックさせれば大丈夫だと思います。

参考:

Shadowbox.js API

追記 2010.01.04

IE6, IE7の場合、Shadowbox.clearCache()を呼ばず、Shadowbox.setup()のみ呼び出すと
正常に動きます。原因はソースを追ってみないとわかりませんが、とりあえず。

また、Shadowbox.setup()の呼び出しタイミングはCGIから返されるHTMLの末尾でscriptタグ内に記述した方が良いです。
DOMのロードとJavaScript実行のタイミングを調整するためです。

関連記事

この記事へのコメント

第2回 Webマーケティングセミナーに参加しました
2009.10 03

10/2(金) 青森国際ホテルで青森県庁主催のWebマーケティングセミナーの第2回目に参加してきました。 今回の講師はdct-design代表 蝦名晶子さん、Internet Strategy代表 角掛健志さんのお二人。 [...]

    10/2(金) 青森国際ホテルで青森県庁主催のWebマーケティングセミナーの第2回目に参加してきました。
    今回の講師はdct-design代表 蝦名晶子さんInternet Strategy代表 角掛健志さんのお二人。

    特に角掛さんとはCSS-Nite in Aomori 2009以来で、色々な意味で相変わらずのようで安心しました。
    それぞれの内容について概要と雑感を。

    第1部 設置方法、見方、活用方法等がわかる『アクセス解析のキホン:ユーザの動向を知る!』
    講演者:蝦名さん

    概要:

    アクセス解析の必須ツールであるGoogle Analyticsの設置、利用方法を具体的に紹介。
    サンプルとして青森県庁のアクセス分析の結果を利用。
    製作発注者、Web管理者向けに基本的なGoogle Analyticsの使い方、アクセス解析に置いて注目するべきポイントを解説。

    雑感:

    アクセス解析を使いこなしていると言える製作発注者、Web管理者はどれだけいるでしょうか?
    製作者からすれば既知の内容かもしれませんが、製作者自身、Google Analyticsの導入を提案したとして、基本的な使い方だけでなく、クライアントの性質に合わせた適切な解析項目の洗い出し、運用のガイドラインを提供できているかどうか等、今一度、振り返ってみることが必要と思いました。
    ページビューやユニークユーザ数といった分かりやすい項目に比べ、サイト滞在時間をはじめ、目標値の設定方法と言ったところまで、提案した製作者が指導して行かないと宝の持ち腐れになるでしょう。

    的確な現状分析あってこそ次の一手が生きるという意味では、分析手法とクライアントの業態をどう結びつけるのか?結びつけてどう測定するのか?測定結果から何を導きだすのか?といった過程を製作者は分かりやすく説明できるようにならなければと思います。
    自分も見直しが必要です。

    第2部 サイトリニューアルは利益を追求する!
    講演者:角掛さん

    概要:

    サイトリニューアルの定義と進める上でのポイントについて解説。
    参加者に向けて事例を利用してのワークショップを行い、グループごとに結果を発表。
    それに対する評価と実際のリニューアル結果を公開、解説。

    雑感:

    CSS-Nite in Aomori 2009でのセッションでは、リニューアルの持って行き方として、そんなアプローチも考えられるのかと、いつの間にか自分の凝り固まっていた考え方をほぐされる感覚でした。今回もそれを期待していましたが、予想よりずっと楽しく、のめり込むことができました。

    目的の達成が大事なのであって、手段のために目的を選んではならないというのは、その通りだと思います。
    また、リニューアルという言葉の定義は「問題の解決」であるとしたのは共感できました。全面的なデザイン、コンテンツの入れ替えをリニューアルと捉えるのではなく、マイナス要素となっているポイントを的確に解決すること、少し改善して、また計測して、分析してまた改善してというサイクルを繰り返すのだという話は、システム開発も一緒だと思うばかりでした。

    個人的に印象に残ったのは、報酬についての考え方です。時間給などで考えるのではなく、発生する作業を投資と考え、回収する利益から適切な金額を導きだすというアプローチです。システム開発の業界で人月という悪しき習慣が有るのですが、結局の所、自分たちの開発内容についてその投資効果と、システム導入先においてどれだけの利益をあげることになるのか、計測できていないために人月という時給計算もどきのどんぶり勘定になっているのだと再確認させられました。

    日々の業務から、どれだけのコストが発生し、システムでどれだけ「儲けさせられるのか?」という側面をおざなりにしてきた報いなのだろうと思います。計測作業というのは思いのほか大事で、組織の大小に関わらず、日々の計測ができている組織は少ないと思います。個人も然り。
    今後のクライアントとの折衝で、そういった視点を押さえて行きたいですね。

    今回のワークショップは、角掛さん曰く「相当いじわる」ということでしたが、蓋をあけてみると思いのほか角掛さんの答えと近いものが多く、角掛さん自身も驚かれたようでした。
    といっても、お題に対する現状分析が非常に的確なものなので、考える側も取っ付きやすかったというのが本当だと思います。
    要求の聞き取り精度が高いかどうかでその後は決まってしまうので、そういう意味では角掛さんの手の平の上だったかと。
    角掛さんは「企画」という言い方、私は「要件」という言い方をしますが、どちらも本質は一緒です。

    改めて自分が今後、学ぶべき知識の指標もできたので、非常に有意義でした。

    関連記事

    この記事へのコメント

    [Rhaco]viewでPHPコード埋め込みがうまく動かない場合がある
    2009.09 03

    相変わらずRhacoで現プロジェクトの開発をぼちぼち進めている。 Rhacoのレンタルサーバでも大丈夫!というポリシーは素晴らしい。 専用サーバやVPSを提案しなくとも良いので、運用費がコストダウン。 今、開発で困ってい [...]

    相変わらずRhacoで現プロジェクトの開発をぼちぼち進めている。

    Rhacoのレンタルサーバでも大丈夫!というポリシーは素晴らしい。
    専用サーバやVPSを提案しなくとも良いので、運用費がコストダウン。

    今、開発で困っているのがviewへのPHP埋め込み。
    下記のような状況でだけ、うまく動いたり動かなかったりする。

    <a href=”<?php H::linkTo(‘hoge’) ?>”>どっかにリンク</a>

    Hはhtmlヘルパークラスへのショートカットで、linkToメソッドは引数を受け取って、各アクションへのURLを生成する。

    ググっても、なかなか情報がない。after railsならフレームワークだとしたら、上記のような書き方は真っ先に試しそうなものなのだけど、そうでもないのだろうか?

    関連記事

    この記事へのコメント

    Rhaco UrlsとFlowを利用して他クラスのメソッドを呼び出すときの注意事項
    2009.08 20

    Rhacoを使って開発してるのだけど、細かな情報はまだまだ把握しきれてないので手探りが多い。 自分用のメモ。 index.phpでやること generic.Urlsのインポート urlパターンの定義 取得したparser [...]

    Rhacoを使って開発してるのだけど、細かな情報はまだまだ把握しきれてないので手探りが多い。
    自分用のメモ。

    index.phpでやること

    • generic.Urlsのインポート
    • urlパターンの定義
    • 取得したparserでの実行
    
    $parser = Urls::parser($pattern);
    $parser->write();
    

    他クラスでやること

    • extends TagParse
    • flowでテンプレートと変数を定義
    • $flow->parser()みたくparserを返す

    関連記事

    この記事へのコメント

    IE7でAjaxのその後
    2009.06 27

    前回のエントリでIE7でAjaxリクエストの挙動がローカルとリモートで異なる件に触れた。 で、その後の調査結果。 IE7でJavaScriptを含んだプログラムを動かすと、ActiveXコントロールを含んでいるけど大丈夫 [...]

    前回のエントリでIE7でAjaxリクエストの挙動がローカルとリモートで異なる件に触れた。

    で、その後の調査結果。
    IE7でJavaScriptを含んだプログラムを動かすと、ActiveXコントロールを含んでいるけど大丈夫?というポップアップがブラウザ上で表示される。動いてくれないと困るので、「はい」と答える。これが落とし穴。

    この時点でActiveXObjectを使って動く前提とブラウザは思いこんでしまう模様。にも関わらず、XMLHttpRequest判定を前に持ってきているので、そっちでリクエストを投げようとするのが不整合の原因のようだ。

    そう、つまりリモートにコンテンツを配置した場合はXMLHttpRequestで扱うとブラウザが思ってくれるので、エラーはでなくなるということだろう。うん、やっぱりXMLHttpRequestに統一してくれとして言えない。

    ここからは最近なんとなく思うこと。Ajaxってもう、終わりな気がする。というかHTMLで何でも表現するのはいい加減限界だし、DojoやExt.jsのようなリッチUIを用意するのもブラウザ互換吸収とかで苦労するし、無理がきていると感じる。
    なのでUI部分をFlashにという流れが今は主流なのだけど、コントロールの出来でいったらSilverlightのが上だろと思うので、棲み分けを作る側が理解して使い分けるのが正解なんだという当たり障りのない結論に落ち着いた。

    とりあえず、業務アプリのUIはSilverlightでいきたい。今はまだFlashかなと思う。後々の浸透度次第か。

    関連記事

    この記事へのコメント

    IE7でローカルからXMLHttpRequestを使うとエラー?
    2009.06 19

    ActiveXObjectの判定タイミングは前か後か? とある案件でここと同じであろう現象に遭遇。 IE7からXMLHttpRequestとActiveXObject両方に対応するようになっており、ActiveXObje [...]

    ActiveXObjectの判定タイミングは前か後か?

    とある案件でここと同じであろう現象に遭遇。
    IE7からXMLHttpRequestとActiveXObject両方に対応するようになっており、ActiveXObjectの判定は後ろに持っていくべきと言われている。

    が、実際のところローカルで実行するとXMLHttpRequestの判定は通るけれども、GETリクエストを投げたところで「アクセスが拒否されました」というエラーが。これはバグと言いたい。

    で、結局ActiveXObjectの判定を前にもってくることで解決。腑に落ちない。

    
            if (window.ActiveXObject) {
                req = new ActiveXObject("Microsoft.XMLHTTP");
                if (req) {
                    req.open("GET", url, false);
                    req.send();
                }
            } else if (window.XMLHttpRequest) {
                req = new XMLHttpRequest();
                req.open("GET", url, false);
                req.send(null);
            }
    

    ちょっとしたテストをすると、XMLHttpRequestでもActiveXObjectでもtrueとIE7はなる。うーん、善し悪しだこれは。
    そうじゃない、ちゃんと仕様を統一してください。
    ちなみに、上記の修正を行う前にはFirefoxとChromeは問題なし。IE7とSafariはNG。

    やはりいらない子なのか。

    とある案件のクライアントは、それまでIE6を使用していたことを考慮すると、IE7の使用率が増えたことでこういった不具合が起きている可能性があるかもしれない。この案件のリリース時はIE7対応しないという契約だったので、よくよく考えてみればこれって、有償にしていいんじゃないか?

    冗談はさておき、ブラウザのバグとか仕様解釈の違いをこれだけシェアの大きいソフトウェアで製作者に押しつけたままというのは不満。だけど、それもプログラマの仕事という事実なのは否定できない。

    関連記事

    この記事へのコメント

    CSS Nite in Aomori 2009 で発表してきました
    2009.04 30

    まずは皆様お疲れさまでした。恒例のイベントとなってきましたが、まさか自分が発表することになると思っていなかったので、貴重な機会をいただいて感謝しています。 使ったスライドとか Ruby on JavaScript Vie [...]

    まずは皆様お疲れさまでした。恒例のイベントとなってきましたが、まさか自分が発表することになると思っていなかったので、貴重な機会をいただいて感謝しています。

    使ったスライドとか

    雑感

    今更ながらJSRubyを使ってみたんだけどという内容だったのですが、みんなでRuby勉強会@青森に来てみませんか?という前フリでした。HotRubyに興味をもっております。

    というのも前フリで、本題は異業種交流をもっとしましょうというのが言いたいことでした。業務知識でも何でもいいので、様々な知識や情報を交換、共有したいというのが切にあります。Give & Takeでそれぞれのビジネスに活かして行きたいと思っています。楽しんで仕事ができるというか、仕事すら道楽にできたら最高だよねと思っています。

    そもそも、CSS Niteは敷居をさげて多様な方々にWEBの世界やそこで活躍している人の様子を伝える場と捉えているので、変なことやってる奴がいるなと思ってもらいたいと考えました。「おもしろい」というモチベーションは大事だという裏テーマが伝わるとなお嬉しいですね。

    他に思ったことは、アクセシビリティという言葉が現れて久しい中、実際に音声ブラウザなどを利用してOS操作から何から実演で見ることができたのは非常に参考になりました。それを掘り下げて、考察をまた書いて行きたいと考えています。

    今後について

    とりあえず、交流会にそういう自分が足を運べない時期もあったので、もっとアクティブにしていこうと画策中です。初心者向けにという状況が多かったのですが、それによって基礎固めの機会に恵まれたことが資産になりました。次は自分が突き抜けて行くターンですかね。
    今年はただ作るというのではなくて「クライアントが本当に欲しいもの」について精度を上げて行く取り組みを考えたいというのがテーマです。個人だと形式化が弱いので、そこらを重点的に。

    目的の共有、要求の精査というものについてヒューマンスキル任せになりがちな反省が有るので、その視覚化とツール化に取り組んでいこうかなと。今のところはクライアントと直接交渉できる場合に限りですけど。そういうフィードバックを勉強会でも発信できたらと思います。

    関連記事

    この記事へのコメント

    Older Posts »

    作者について

    青森県内でソフトウェア・システム開発を行うフリーランスのプログラマー。元々は集中監視システム開発に従事。現在はウェブサイト製作・オンラインシステムの開発案件を中心に、プログラミングのスキルトレーニングや講演も行う。

    TEL 0172-55-7030  FAX 0172-55-7031
    10:00 - 18:00 土日祝休

    恐れ入りますが、お急ぎの場合を除いて、メールにてお問い合わせください。