URLなしの国際化

最近仕事で、私は面白い、私の意見では、タスクに遭遇しました。 開発されたサイトでは、3つの言語(ウクライナ語、ロシア語、英語)の使用が暗示されています。 この問題はsymfony 1.2フレームワークを使用して解決されました。 原則として、1つのポイントを除く標準。 ロシア語版のURLは次のようになっているはずです。frontend_dev.php / articles /英語とウクライナ語、それぞれfrontend_dev.php / eng / articles / about frontend_dev.php / ukr / articles / about



このようにして問題を解決しました。 まず最初に、routing.ymlファイルに2つのパスを作成します。1つはURLに言語自体を表示しないデフォルトの言語バージョン用で、もう1つは他のすべてのパス用です。 次のようになります。

page:

url: /:sf_culture/:first/:second/:third

requirements: { sf_culture: (?:rus|eng|ukr) }

param: { module: page, action: list, first: none, second: none, third: none}



page_no_lang:

url: /:first/:second/:third

param: { module: page, action: pageNoLang, first: none, second: none, third: none}











明らかに、2つのアクションを作成し、そのうちの1つにpageNoLangSuccess()希望の言語に翻訳文字列を挿入します。

$culture = $this->getUser()->setCulture('rus');

// -









2番目では、通常どおりにデータに対してアクションを実行します。 ただし、アクションは両方のアクションで同じなので、繰り返さないように別の関数に入れます。

スイッチング言語へのリンクはほとんど標準に見えます:

<?php echo @link_to('rus', '@page_no_lang?sf_culture=rus'.$link, '') ?> |

<?php echo @link_to('en', '@page?sf_culture=eng'.$link) ?> |

<?php echo @link_to('ukr', '@page?sf_culture=ukr'.$link) ?>







ただし、デフォルト言語への切り替えは、パス@page_no_langを介して行われます

唯一の不快な瞬間は、内部構造への参照です。 次に、link_toを放棄して、ロシア語に手動で登録する必要がありました。

<?php if($sf_user->getCulture() == 'rus' ): ?>

a href="frontend_dev.php/articles">






<?php else:?>

<?php echo link_to( 'Link'、 '@articles); ?>

<?php endif; ?>





それがすべてのようです。 私の意見では、解決策はあまりエレガントではありませんが、うまくいきます。 誰もがこれをより美しく実装する方法についてアイデアを持っている場合-事前に感謝します。



All Articles