2016-04-03 10 views
4

SilverStripe Fluentモジュールには、フロントエンドに簡単な言語切り替えメニューを表示する既製のテンプレートがあります。SilverStripe Fluentメニューテンプレート

<% loop Locales %> 
<li class="$LinkingMode"> 
    <a href="$Link.ATT" hreflang="$LocaleRFC1766"<% end_if %>> 
    $Title.XML 
    </a> 
</li> 
<% end_loop %> 

それがループした場合、「ロケール」それは技術的に何をループしていますか? "ロケール"と呼ばれるデータベーステーブルはありません。

私の目標は、言語の省略形(国ではありません)を返す変数を最終的に見つけることです(または関数を記述すること)。だからnl-NLではなくnlのような返すものが必要です($LocaleRFC1766として返す)。 FluentExtension延長で

答えて

5

Locales is a function

$data = array(
    'Locale' => $locale, 
    'LocaleRFC1766' => i18n::convert_rfc1766($locale), 
    'Alias' => Fluent::alias($locale), 
    'Title' => i18n::get_locale_name($locale), 
    'LanguageNative' => Fluent::locale_native_name($locale), 
    'Language' => i18n::get_lang_from_locale($locale), 
    'Link' => $link, 
    'AbsoluteLink' => $link ? Director::absoluteURL($link) : null, 
    'LinkingMode' => $linkingMode 
); 

Language最近ちょうど言語の略語を取得可能にするために追加されました:

/** 
* Templatable list of all locales 
* 
* @return ArrayList 
*/ 
public function Locales() 
{ 
    $data = array(); 
    foreach (Fluent::locales() as $locale) { 
     $data[] = $this->owner->LocaleInformation($locale); 
    } 
    return new ArrayList($data); 
} 

これはLocaleInformation functionによって返されたデータがあります。我々は$Language変数を使用するカスタムLocaleMenu.ssテンプレートを作成することができますこれを利用するために

:ファンタスティック

<% if $Locales %> 
<div class="left">Locale <span class="arrow">&rarr;</span> 
    <nav class="primary"> 
     <ul> 
      <% loop $Locales %> 
       <li class="$LinkingMode"> 
        <a href="$Link.ATT" <% if $LinkingMode != 'invalid' %>rel="alternate" hreflang="$Language"<% end_if %>>$Title.XML</a> 
       </li> 
      <% end_loop %> 
     </ul> 
    </nav> 
</div> 
<% end_if %> 
+1

は、働いていました。私はあなたのプルリクエストがマスターにもそれを作ったのを見ます。 – Faloude

関連する問題