J'ai mis en place un site multilingue dans Drupal 7. Dans un modèle, je dois ajouter un lien vers un nœud de contenu spécifique. Ce nœud a des traductions et des alias de chemin comme ceci:
node/42 = pathalias_de (german version)
node/43 = pathalias_en (english version)
Dans le modèle, j'aimerais appeler url()
pour obtenir le lien vers la version aliasée du nœud de contenu dans la langue actuelle.
Sur la page allemande, il doit renvoyer à /de/pathalias_de
la page anglaise pour/en/pathalias_en
J'ai essayé plusieurs variantes, comme appeler le nid, appeler l'alias, passer l'objet de langage actuel à url()
.
Est-ce que quelque chose url()
devrait pouvoir faire ou ai-je besoin d'une fonction différente? Merci!
la source
$translations = translation_path_get_translations(drupal_get_normal_path("pathalias_de","de"));
pour rechercher l'alias au lieu de l'identifiant du nœud, c'est plus flexible. Vous devez cependant passer la bonne langue.la source
Jetez un œil à la fonction drupal_get_path_alias
Comme vous pouvez le constater, il prend un paramètre path_language. Ainsi, vous pouvez découvrir la langue actuelle et ensuite passer à cette fonction.
Ou utilisez simplement le module Multilink
la source
drupal_get_path_alias()
ne recherchera pas les traductions d'un nœud donné, juste pour les alias déjà dans la langue donnée. J'ai trouvé une autre solution de contournement, voir ma réponse ci-dessous.Aucune des réponses ci-dessus ne semble utiliser correctement i18n_path. Si vous souhaitez créer un lien vers le nœud traduit, vous devez simplement activer le module i18n_path et formater le chemin ainsi,
la source
Vous devriez probablement utiliser la fonction de lien . Il vous permet de passer la langue en paramètre et c'est la fonction appropriée pour créer un lien avec Drupal.
la source
l()
utilise enurl()
interne donc il n'a pas d'importance dans ce cas.En utilisant Translation Redirect, vous pouvez créer un lien vers des nœuds avec un préfixe de langue.
C'est ce qu'il dit:
Par exemple, si le nid 22 est pour la version anglaise et qu'il a des versions française et allemande, vous pouvez simplement les lier en fr / node / 22 et de / node / 22. Ce 22 peut également être n'importe quel nid de la version traduite.
Si une traduction particulière n'est pas trouvée par exemple si vous n'avez pas ajouté pour le japonais, alors ja / node / 22 donnera 404 pour les utilisateurs anonymes.
la source
Pour obtenir le chemin de préfixe correct, j'utilise:
La drupal_get_path_alias () retourne uniquement l'alias, l'url () est celle qui ajoute le préfixe ("en /").
la source