[openpne-dev:556] [OpenPNE3] プラグインから SNS 名称変更機能を利用する

66 views
Skip to first unread message

Kousuke Ebihara

unread,
Sep 29, 2009, 1:13:55 PM9/29/09
to openp...@ml.pne.jp
開発チームの海老原です。

OpenPNE3 の master に SNS 名称変更機能が追加されまし
た。この機能は今週中のリリースを予定している OpenPNE 3.1.3
に含まれる予定です。

この機能をプラグインから利用する方法について以下に解説をするので参
考にしてください。

プログラムから、定義されている名称を使用する
============================================

現状、 OpenPNE3 Platform 側では以下の名称設定に対応していま
す。
 ・フレンド
 ・マイフレンド
 ・コミュニティ
 ・ニックネーム
これらの定義は、 lib/config/config/sns_term.yml にて知ること
ができます。
たとえばフレンドの場合の定義は、
friend:
caption:
ja_JP: "フレンド"
en: "Friend"
というようになっています。一番上の friend が識別子となり、プ
ログラムから利用されます。

現状の対応言語は日本語と英語です。なお、英語は条件によって形を変え
ることがあります。

基本的な使用例
--------------

この friend を使用した文章を記述したい場合、たとえばテンプ
レート上では以下のように記述します。
<?php echo __('This is your %friend%') ?>

__() ヘルパー関数の内部でコールされる opI18N::__() メソッド
によって、 %friend% が自動的に、設定された名称に置換されま
す。

文頭の単語が置換対象となる場合は、以下のように最初の文字を大文字に
して記述してください。
<?php echo __('%Friend% is removed'); ?>

もちろんテンプレートだけでなく、 opI18N によって翻訳をおこな
うすべての場面で置換がおこなわれます。(フォームラベルは自動的に各
単語の最初の文字が大文字になります)

複雑な使用例
------------

ほとんどの場合、「基本的な使用例」に示したとおりの記述で事足りると
思いますが、語を複数形にする必要があるシチュエーションなども考えら
れます。

その場合、テンプレート上で以下のように記述してください。

<?php echo __('They are your %friend%', array('%friend%' => $op_term
['friend']->pluralize())); ?>

また、語が文頭に来て、かつ複数形にしたい場合は、以下のように記述す
ることで対応できます。

<?php echo __('%friend% are removed.', array('%friend%' => $op_term
['friend']->pluralize()->fronting())); ?>

$op_term は名称変更設定を管理する SnsTermTable のインスタン
スで、 ArrayAccess インターフェースを実装しています。
$op_term['friend'] のように指定することで、 friend の名称変
更設定に対応した SnsTerm モデルのインスタンスが取得できま
す。 SnsTerm は語形変化のためのいくつかのメソッドを実装して
います。二番目の例のように、これらのメソッドはメソッドチェーンする
ことができます(個人的には好きな言葉ではないのですが、いわゆる
fluent interface という奴です)。

語形を変化させる用途で利用できる SnsTerm のメソッドを以下に
挙げます。

* fronting() : 文頭にくる語として適切な形に変換する(英語の場合、
最初の文字を大文字にする。日本語の場合は変化なし)
* titleize() : 表題として用いる語として適切な形に変換する(英語の
場合、すべての単語の最初の文字を大文字にする。日本語の場合は変化な
し)
* pluralize() : 語を複数形にする(日本語の場合は変化なし)
* withArticle() : 冠詞を付ける(日本語の場合は変化なし)

プラグイン独自の名称を定義する
==============================

プラグイン内に config/sns_term.yml を作成し、 OpenPNE3
Platform と同じように記述することで独自の名称を追加することができ
ます。

その後、デフォルト値を fixture ファイルで SnsTerm モデ
ルに保存してください。
以下に、 pc_frontend 向けに friend の名称のデフォルト
値を定義するための fixture ファイルのサンプルを示します。

SnsTerm:
term_friend_pc_frontend:
name: "friend"
application: "pc_frontend"
Translation:
ja_JP:
value: "フレンド"
en:
value: "friend"

name が識別子と対応する値、 application が使用するアプリケー
ションになります(現状、 pc_frontend か
mobile_frontend)。

Translation の各言語の value に、デフォルトの名称を記述して
ください。

本機能の対応をおこなったコミット
================================

以下でこの機能への対応をおこなったので、参考にしてください。

http://redmine.openpne.jp/projects/op3/repository/revisions/5ecb7af0975a191d9dd70f2590e79000a3dd77e5
(名称変更機能の追加)

http://redmine.openpne.jp/projects/op3/repository/revisions/6f5b0d4b806c16a39e528b6e75cb019fc35affbe
(自動的に名称の置換をおこなうようにした)

http://redmine.openpne.jp/projects/op3/repository/revisions/16f75d42b8378166f0d8ff2b1b9a1b23f9a8e8c0
(自動的にフォームラベルの置換をおこなうようにした)

http://redmine.openpne.jp/projects/op3/repository/revisions/ac37e10480795f0e5e87eae932b91e8f4d09fe9e
(共通部分を名称変更のために変更した)

http://redmine.openpne.jp/projects/op3/repository/revisions/8374d6ea788ed571cfc5c729855fc8afaf06851c
(pc_frontend を名称変更のために変更した)

http://redmine.openpne.jp/projects/op3/repository/revisions/32cf69c776cd4bbca59be60481b95941f8dac156
(mobile_frontend を名称変更のために変更した)

--
海老原昂輔 (Kousuke Ebihara)
ebi...@tejimaya.com
http://sns.openpne.jp/?a=page_f_home&target_c_member_id=807
OpenPNEプロジェクト http://www.openpne.jp
株式会社手嶋屋 http://tejimaya.com

Reply all
Reply to author
Forward
0 new messages