Yii:如何使用翻译Yii :: t()和超链接

时间:2012-09-11 22:07:16

标签: yii

我的代码中有许多与此相似的行:

echo Yii::t('forms','Would you like to create a new item?');

我想在附近超链接"创建一个新项目",作为一个例子。

以下是我考虑过的一些替代方案:

  1. 将网址拆分为2个已翻译的字符串,并以超链接包围:

    echo Yii::t('forms','Would you like to').' <a href="/new_item">'.Yii::t('forms','create a new item').'</a>?';
    
  2. 使用占位符,如Yii文档中所述(http://www.yiiframework.com/doc/guide/1.1/en/topics.i18n虽然超链接不是作为显式示例提供的):

    echo Yii::t('forms','Would you like to {url}create a new item',array('{url}'=>"<a href='/new_item'>")).'</a>?';
    
  3. 这可能是一种更简单的方法,但我一直无法找到首选方法......构建包含网址的翻译字符串的最佳方法是什么?

4 个答案:

答案 0 :(得分:7)

我建议你这个解决方案:

echo Yii::t(
    'forms', 
    'Would you like to {link:create}create a new item{/link}?',
    array(
        '{link:create}'=>'<a href="/new_item">',
        '{/link}'=>'</a>',
    )
);

如果您想要idclassonclick以及a标记中的更多内容,您可以做到这一点。所以翻译字符串清晰 请注意create中的{link:create}只是指向超链接字符串的理想字符串。

另一个高级样本:

echo Yii::t(
    'forms', 
    'Would you like to {link:create}create a new item{/link}? And you can {link:delete}delete the item{/link}.',
    array(
        '{link:create}'=>'<a href="/new_item" class="button">',
        '{link:delete}'=>'<a href="#" id="item-21" onclick="delete(21);">',
        '{/link}'=>'</a>',
    )
);

答案 1 :(得分:5)

链接可能具有不同的位置(开头,中间或结尾),并根据目标语言在翻译后的字符串中添加标签。因此,您应该仅为url使用占位符:

echo Yii::t(
  'forms', 
  'Would you like to <a href="{url}">create a new item</a>?', 
  array('{url}' => '/new_item')
);

答案 2 :(得分:1)

如果您有动态uri,请使用以下内容:

echo Yii::t(
    'forms',
    'Would you like to <a href=":url">create a new item?</a>',
    array(':url'=>'/new_item')
);

或者:

echo Yii::t(
    'forms',
    'Would you like to <a href="/new_item">create a new item?</a>',
);

或者,如果要传递除网址之外的其他动态属性,请使用以下命令:

echo Yii::t(
    'forms',
    'Would you like to <a :linkAttr>create a new item?</a>',
    array('linkAttr'=>'href="/new_item" id="link-id" class="link-class"')
);

答案 3 :(得分:1)

我认为这是一个更好的解决方案:

equivalence

此解决方案的优点

  • 您可以使用助手来生成您的链接
  • 您可以修改html代码,而无需修改翻译
  • 任何将要翻译的人都不需要了解html,也不会弄乱html代码。