正しい言語接頭辞で絶対URLを取得する最良の方法は何ですか? url()
関数は言語パラメーターを受け入れますが、プレフィックスの生成には使用していないようです-翻訳されたエイリアスを取得するためだけです。エイリアスは気にしません-正しいドメインプレフィックスが必要です。
にいるときhttp://en.example.com/something
とこのコードを使用:
<?php
$all_languages = language_list();
url('something-else', array('language' => $all_languages['nl'], 'absolute' => true));
?>
これを取得します:http://en.example.com/something-else
(enプレフィックス)。
どうすればこれを取得できますか:http://nl.example.com/something-else
(nl接頭辞)。
どうやらurl()
関数はhttp://nl.example.com/something-else
(nb接頭辞に注意)のようなリンクを作成しますが、特定の言語構成に対してのみです。これは、ここで各言語に適切なドメインを設定した場合にのみ正しく機能します:/admin/config/regional/language
。
デフォルトでは、フィールドPath prefix language codeは言語コード(nlこの場合)および言語ドメインは空です。
[〜#〜] domain [〜#〜]接頭辞を使用しており、言語の選択には[〜#〜] path [〜#〜]接頭辞を使用していないので次に、各言語について、パス接頭辞の代わりに言語ドメインを設定する必要があります。
いくつかの奇妙な理由でDrupalは、これらのフィールドの1つだけを入力するように要求しますが、結果としてデフォルトでパスプレフィックス言語コードを入力します言語検出がdomainに設定されていても。
私はこのように私のURLをフォーマットします。
$order_url = url('user/' . $params['order']->uid . '/orders/'. $params['order']->order_id, array(
'absolute' => TRUE,
'language' => (object)array(
'language' => 'lang-key',
)
));
これは、以下のurl関数に反映されていることがわかります。
$language = isset($options['language']) && isset($options['language']->language) ? $options['language']->language : '';
$alias = drupal_get_path_alias($original_path, $language);
if ($alias != $original_path) {
$path = $alias;
}
}
これは私のテーマファイルからプルされましたが、$ nodeと$ languageへのアクセス権がある限り、それでうまくいきます:
<?php
if (isset($node))
{
?>
<div class="language-switcher">
<?php
$nodes = translation_path_get_translations("node/" . $node->nid);
$path = "";
if ($language->language == "en")
{
if (array_key_exists("nl", $nodes))
{
$path = drupal_get_path_alias($nodes["nl"], "nl");
}
?>
<a href="http://nl.example.com/<?php print $path; ?>">Change to NL</a>
<?php
}
else
{
if (array_key_exists("en", $nodes))
{
$path = drupal_get_path_alias($nodes["en"], "en");
}
?>
<a href="http://en.example.com/<?php print $path; ?>">Change to EN</a>
<?php
}
?>
</div>
<?php
}
?>
URLは、計算されたパス情報を使用してハードコードされています。