Drupalと多言語、プログラムで言語切り替えを追加する方法

次の多言語サイトを作成するときに、標準の言語切り替えユニットを使用せずに言語切り替えを追加するタスクが発生しました。



一見、複雑なことは何もありません。

しかし、いくつかの試みを行った後、ビューを通じて作成されたページ、分類用語のページでのアナウンスメントの選択、およびコンテンツ変換モジュールによってノードに関連付けられた翻訳をサポートするタスクに直面しました。 また、上記のページ(ノード)と分類法の用語にエイリアスがあるという事実を考えると、役に立ちました。



驚いたことに、Googleは期待した結果を出さず、Drupalカーネルのソーイングに関するアドバイスを断固として受け入れません(このAPIと少し想像力があります)。



数杯のコーヒーを吸って、複数のタバコ(ユーモア)を飲んだ後、彼は問題を解決し、そのような熊手を踏みつけた人々と解決策を共有する準備ができています。





では行きましょう:



実装するには、テーマの2つのファイル( page.tpl.phpおよびtemplate.php )が必要です。



template.phpファイルで、関数を作成します。



 function __lang_front_lang($foo){ switch($foo) { case 'uk': $output = '/ua'; break; case 'ru': $output = '/'; break; case 'en': $output = '/en'; break; default: $output = '/'; break; } return $output; } function __link_lang($foo, $path, $path_alt, $nid){ if(strlen($path)){ $path = 'node/'.$nid; $path_lang = translation_path_get_translations($path); $path = array( 'ru' => drupal_get_path_alias($path_lang[ru], $path_language = 'ru'), 'uk' => drupal_get_path_alias($path_lang[uk], $path_language = 'uk'), 'en' => drupal_get_path_alias($path_lang[en], $path_language = 'en'), ); } elseif(strlen($path_alt[2])) { $path_tax = $path_alt[0].'/'.$path_alt[1].'/'.$path_alt[2]; }elseif(strlen($path_alt[1])) { $path_tax = $path_alt[0].'/'.$path_alt[1]; } elseif(strlen($path_alt[0])) { $path_tax = $path_alt[0]; } else { $path_tax = ''; } if(!strlen($path) || !strlen($nid)){ } else { if(!strlen($path[uk])){ $path[uk] = 'not_translated_uk.html'; } if(!strlen($path[ru])){ $path[ru] = 'not_translated_ru.html'; } if(!strlen($path[en])){ $path[en] = 'not_translated_en.html'; } } $output = '<li><a href="/ua/'.$path[uk].$path_tax.'">ua</a></li> <li><a href="/'.$path[ru].$path_tax.'">ru</a></li> <li><a href="/en/'.$path[en].$path_tax.'">eng</a></li>'; return $output; }
      
      











さらに、スイッチを表示する必要がある場所のpage.tpl.phpファイルに、次を追加します。



 <ul class=" img_link_list lang_li"> <?php if($is_front){ $path_alt = ''; } else { $path_alt = array(arg(0), arg(1), arg(2)); } print __link_lang($language->language, $node->path, $path_alt, $node->nid); ?> </ul>
      
      











メインの追加へのリンクを含むロゴを表示したい場所:

 <div id="logo"><a href="<?php print __lang_front_lang($language->language); ?>"><img src="<?php echo $base_path . $directory; ?>/images/logo.jpg" width="140" /></a></div>
      
      











主な魔法はそこで終わります。

パスは、ノードまたは用語分類のページであるかどうかに関係なく、配置されているページを考慮して形成されます。



残っているのは、分類法のページで資料をフィルタリングし、切り替えられた言語を含むアナウンスを提供することです。



これを行うにはいくつかの方法があります。 最も単純なものの1つを説明します(初心者がこのソリューションを実装する機会のため)。



行こう:

「Views」モジュールとテーマの1つのファイル( node.tpl.php )を使用します。

ビューのリスト「ビュー」(/ admin / build / views)のページに移動し、カーネルに含まれているビューを、まだ含まれていない場合は「taxonomy_term(デフォルト)」という名前で含めます。

「ページ(ページ)」形式の資料の出力が、フィールドではなく資料の発表を表示するように構成されていることを確認します。



その後、 node.tpl.phpファイルに移動して、間にあるものを編集します

 <?php if (!$page): ?>
      
      









そして

 <?php endif; ?>
      
      











その結果、次のようになります。

 <div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?> clear-block"> <?php print $picture ?> <?php if (!$page): ?> <?php global $language; ?> <?php if ($language->language == $node->language): ?> <div class="items_page"> <h3><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h3> <?php print $content; ?> </div> <?php endif; ?> <?php endif; ?> <?php if ($page): ?> <div class="meta"> <?php if ($submitted): ?> <span class="submitted"><?php print $submitted ?></span> <?php endif; ?> </div> <div class="content"> <?php print $content ?> </div> <?php print $links; ?> <?php endif; ?> </div>
      
      











これで私たちは魔法のように成功します。

すべてを正しければ、結果を楽しんでコーヒーを飲み続けるだけです



誇らしげに頭を上げて



Drupalの多言語。



おっと:

テーマファイルに変更を加えた後、トピックのリスト(/ admin / build / themes)を再保存することを忘れないでください。



それらでキャッシュを更新することで、もちろん、一般的なキャッシュ(/ admin / settings / performance)を消去するだけです。



できた! これで完了です!



All Articles