Drupal 7.で多言語サイトを設定しました。7。テンプレートで、特定のコンテンツノードへのリンクを追加する必要があります。このノードには、次のような翻訳とパスエイリアスがあります。
_node/42 = pathalias_de (german version)
node/43 = pathalias_en (english version)
_
テンプレートでurl()
を呼び出して、現在の言語でコンテンツノードのエイリアスバージョンへのリンクを取得します。
ドイツ語のページでは_/de/pathalias_de
_に英語のページでは_/en/pathalias_en
_にリンクする必要があります
Nidを呼び出す、エイリアスを呼び出す、現在の言語オブジェクトをurl()
に渡すなど、いくつかのバリエーションを試しました。
これはurl()
で実行できるはずですか、別の関数が必要ですか?ありがとう!
「コンテンツ翻訳」モジュールのソースを調べた後、私はこのソリューションを思いつきました:
global $language;
$translations = translation_path_get_translations("node/42");
/*
Returns the paths of all translations of a node, based on its Drupal path:
array(2) {
["de"]=>string(7) "node/42"
["en"]=>string(7) "node/43"
}
*/
print l(t('Link Title'), $translations[$language->language]); //l() will return the alias to node/42
これにより、正しいノードエイリアスへのリンクが出力されます。機能し、過度に複雑ではありません-これをすでに実行する関数があるかどうか疑問に思います。
global $language;
$translation_node = translation_path_get_translations("42");
$nid = $translation_node[$language->language]->nid;
$path = "node/{$nid}";
drupal_get_path_alias fuction を見てください。
内部Drupalパスが指定されている場合、管理者が設定したエイリアスを返します。
パスが指定されていない場合、関数は現在のページのエイリアスを返します。
パラメーター
$ path:内部Drupalパス。
$ path_language:パスを検索するオプションの言語コード。
あなたが理解できるように、それはpath_languageパラメータを取ります。したがって、現在の言語を見つけて、この関数に渡すことができます。
または単に Multilink module を使用します
- 多言語サイト用に設計されています。すべてのコンテンツがすべての言語で利用できるわけではない、または後で利用可能になる(翻訳される)サイトに特に関連します。
- 他のノードへのコンテンツ内リンクを簡単に作成できます。これらのリンクは、利用可能な場合、参照されたノードの適切な翻訳バージョンを指すように自動的に更新されます。
上記の回答のいずれもi18n_pathを正しく使用していないようです。変換されたノードにリンクする場合は、i18n_pathモジュールを有効にしてパスをフォーマットするだけです。
drupal_get_path_alias('node/'.$node->nid, $node->language);
おそらく link function を使用する必要があります。言語をパラメーターとして渡すことができ、Drupalとのリンクを作成するための適切な関数です。
Translation Redirect を使用すると、言語接頭辞を持つノードにリンクできます。
これはそれが言うことです:
翻訳リダイレクトモジュールは、301リダイレクトコードを使用して、匿名ユーザー(Webクローラーを含む)を、リクエストされた言語(存在する場合)でのページの翻訳にリダイレクトします。たとえば、リクエストが/ de/node/23に対するもので、node/23が英語のページに対応している場合、ユーザーは英語のノードのドイツ語の翻訳にリダイレクトされます(存在する場合)。翻訳が存在しない場合は、ソースノードのコンテンツが表示されます。
たとえば、nid 22が英語バージョンで、フランス語とドイツ語のバージョンがある場合、fr/node/22およびde/node/22としてリンクするだけです。この22は、翻訳されたバージョンの任意のnidにもできます。
日本語を追加していない場合など、特定の翻訳が見つからない場合、ja/node/22は匿名ユーザーに404を提供します。
正しいプレフィックスパスを取得するには、次を使用します。
$node_url = url(drupal_get_path_alias('node/' . $row->nid));
Drupal_get_path_alias()はエイリアスのみを返し、url()はプレフィックス( "en /")を追加するものです。