Posted by fpersson on September 10, 2008 at 2:46pm
Jag har skapat en enkel modul, men har stött på ett problem (google har inte hjälp mig). Min output av min data i modulen omges av html-taggen <em>
, vilket skapar problem när jag ska generera sökvägar (eller visa bilder). Jag har själv inget i min kod som generar taggen em (har sökt igenom koden) så det måste vara något underligt betende hos drupal.
<?php
function theme_beer_order_info($node) {
$output = '<div class="beer_order_info">';
$output .= t('<strong>Tillverkare:</strong><a href="%brandurl">%brand</a><br/>', array('%brand' => check_plain($node->brand), '%brandurl' => check_plain($node->brandurl) ) );
$output .= t('<strong>Sort: </strong> %sort <br/>', array('%sort' => check_plain($node->sort)));
$output .= t('<strong>Ursprungsland:</strong> %origin<br/>', array('%origin' => check_plain($node->origin)));
$output .= t('<strong>Vårt betyg:</strong> %rating<br/>', array('%rating' => check_plain($node->rating)));
$output .= t('<strong>Systembolagets kattalog: </strong><a href="%sysurl"/>%sysid</a><br/>', array('%sysurl' => check_plain($node->sysurl), '%sysid' => check_plain($node->sysid)));
$output .= t('Etikett: %label',array('%label' => check_plain($node->label)));
$output .= '</div>';
return $output;
}
?>
Hur löser jag detta, jag antar att det är jag som har missat något, men vad?
Vill nogon se hela min kod finns den att tillgå på min hemsida med dokumetation på min wiki
//Fredrik
Comments
Spana in dokumentationen
Spana in dokumentationen för t() igen. ;)
Tobias Sjösten
Tack
Tack nu funkar det, jag letade svaret på fel ställe hela tiden... typiskt nybörjarfel :(
Det skulle behövas fler och bättre "Kom i gång guider" om hur man skapar drupal moduler.
//Fredrik
Koden
För övriga som inte orkar RTFM :-) kommer koden så som den nu bör se ut:
<?php
function theme_beer_order_info($node) {
$output = '<div class="beer_order_info">';
$output .= t('<strong>Tillverkare:</strong><a href="@brandurl">@brand</a><br/>', array('@brand' => $node->brand, '@brandurl' => $node->brandurl));
$output .= t('<strong>Sort: </strong> @sort <br/>', array('@sort' => $node->sort));
$output .= t('<strong>Ursprungsland:</strong> @origin<br/>', array('@origin' => $node->origin));
$output .= t('<strong>Vårt betyg:</strong> @rating<br/>', array('@rating' => $node->rating));
$output .= t('<strong>Systembolagets katalog: </strong><a href="@sysurl"/>@sysid</a><br/>', array('@sysurl' => $node->sysurl, '@sysid' => $node->sysid));
$output .= t('Etikett: @label',array('@label' => $node->label));
$output .= '</div>';
return $output;
}
?>
Alltså:
Använd
@
istället för%
och tag bort anropen till check_plain() som t() ombesörjer åt dig när du använder@
eller%
.Thomas Barregren – imBridge
Tänk bara på att man bör
Tänk bara på att man bör undvika html-kod i t()-funktionen om möjligt. Det är lite mer pyssel men resultatet blir mer översättningsvänligt.
Citat från dokumentationen:
Nu blir jag nyfiken?
Hur skulle då en $output-rad se ut?
//Fredrik
Om jag tar första raden som
Om jag tar första raden som exempel skulle det bli som följer:
<?php
$output = '<strong>'.t('Tillverkare').':</strong><a href="@brandurl">'.t('@brand').'</a><br/>', array('@brand' => $node->brand, '@brandurl' => $node->brandurl));
?>
På så sätt kan man översätta ordet "Tillverkare" utan problem, och med lite tur så finns det redan översatt. :)
Engelska
Observera att text som skrivs i t()-funktioner i allmänhet förväntas vara på engelska. Det är kanske inte hugget i sten, men om du får för dig att dela din kod med en internationell publik så får du problem. Och i kombination med resten av Drupal som använder engelska som standard blir det hela förmodligen rätt struligt.
/ Hannes Lilljequist – SthlmConnection
Du måste dock sätta dina
Du måste dock sätta dina placeholders direkt i första parametern till och ersättningar som följande parametrar till t()-funktionen. enzipher's kod kommer inte att fungera, även om den visar hur du bör använda concatenation för (X)HTML och inte lägga den direkt i t().
Jag vill tillägga att sprintf()-funktionen också kan komma till användning vid sådana här tillfällen. Jag använder den själv rätt flitigt för att öka läsbarheten och "redigerbarheten" i koden. Exempelvis:
<?php
$html = '<strong>%s</strong><a href="%s">%s</a><br />';
$output = sprintf($html, t('Tillverkare'), $node->brandurl, $node->brand);
?>
För länkar bör du dock kolla in funktionerna l() och url(). (Har jag helt enkelt en dålig vana med RTFM? :P)
Tobias Sjösten
Nu när jag kan skriva mer
Nu när jag kan skriva mer översättningsbar modul, kommer följd frågan hur man länkar till en modulspecifik översättnings fil. Jag tittade lite på translation.module, jag hade velat ha något i stil med "beer.po".
PS: Det är inget fel på RTFM, inte om man som du hänvisar till relevanta delar av manualen och inte bara manualen i sig. Man lär sig mycket av RTFM om man hittar det man vill :)
//Fredrik
Jag är inte säker på vad
Jag är inte säker på vad du menar med att länka till en modulspecifik översättningsfil. Men apropå att hänvisa till relevanta delar i manualen:
Translation of contributed modules
/ Hannes Lilljequist – SthlmConnection