查看文档 https://laravel.com/docs/11.x/localization#using-translation-strings-as-keys 对于仅字符串内容,使用
__("My string")
相当简单,但我不确定对于更大或更复杂的内容的最佳方法,例如:
<a href="https://en.wikipedia.org/wiki/Wikipedia" title="About Wikipedia">Wikipedia</a></b> is a <a href="https://en.wikipedia.org/wiki/Wikipedia:Free_encyclopedia" title="Free encyclopedia">free online encyclopedia</a> that anyone can edit, and <a href="https://en.wikipedia.org/wiki/Special:RecentChanges" title="See all recent changes">millions already have</a>
将会输出:
有一些文本,但它包含多个
<a>
以及用于 SEO 等的 title
属性
我是否应该将 URL 和其他属性(例如标题)作为参数传递给
__("")
方法?但是在 lang 文件中包含 <a>
感觉很奇怪,而且如果链接上有一些 AlpineJS 标签,比如 x-on:click=""
。
另一方面,如果我只想通过将翻译分成多个部分来翻译文本并将 HTML 保留在刀片视图中,则存在某些语言没有完全相同的单词上的链接或从右到左的问题...
您能给出这个用例的真实示例吗?谢谢
我有一个 helpers.php 文件,我在其中定义了一些方便的函数,如下所示:
if (!function_exists('l')) {
/**
* Generates an html anchor tag
*/
function l($url, $title, $attributes = [], $blank = false) {
$_attr = ['href' => $url,];
if ($blank) {
$_attr['target'] = '_blank';
}
$bag = new ComponentAttributeBag($_attr);
if (count($attributes)) {
$bag = $bag->merge($attributes);
}
return '<a ' . $bag->toHtml() . '>' . $title . '</a>';
}
}
我会像你的例子一样处理翻译:
<p>
{!! __(
':wikiUrl is a :wikiDef that anyone can edit, and :manyHave.',
[
'wikiUrl' => l(
'https://en.wikipedia.org/wiki/Wikipedia',
__('Wikipedia'), // translate the link text again if necessary
[
'title' => __('translatable title'),
'attribute' => 'foobar',
],
true
),
'wikiDef' => l(
'https://en.wikipedia.org/wiki/Wikipedia:Free_encyclopedia',
__('free online encyclopedia'),
[],
true
),
'manyHave' => l(
'https://en.wikipedia.org/wiki/Wikipedia:Free_encyclopedia',
__('millions already have'),
[],
true
),
]
) !!}
</p>
所以可翻译的文本字符串只是
:wikiUrl is a :wikiDef that anyone can edit, and :manyHave.
这种方法有它自己的好处和问题,但我发现它真的很强大。
您还可以之前在变量中定义 url,并在
l()
函数中使用时根据语言或其他变量更改它们。