Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii:如何使用translate Yii::t()和超链接_Yii - Fatal编程技术网

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

Yii:如何使用translate Yii::t()和超链接,yii,Yii,我的代码中有许多类似的行: echo Yii::t('forms','Would you like to create a new item?'); 例如,我想在“创建一个新项目”附近建立超链接 以下是我考虑过的一些备选方案: 将URL拆分为两个翻译字符串,并用超链接包围: echo Yii::t('forms','Would you like to').' <a href="/new_item">'.Yii::t('forms','create a new item').'<

我的代码中有许多类似的行:

echo Yii::t('forms','Would you like to create a new item?');
例如,我想在“创建一个新项目”附近建立超链接

以下是我考虑过的一些备选方案:

  • 将URL拆分为两个翻译字符串,并用超链接包围:

    echo Yii::t('forms','Would you like to').' <a href="/new_item">'.Yii::t('forms','create a new item').'</a>?';
    
    echo Yii::t('forms','will you like');
  • 使用占位符,如Yii文档中所述(尽管超链接未作为明确示例给出):

    echo Yii::t('forms','you want{url}create a new item',array('{url}'=>“?”;
    

  • 可能有一种更简单的方法可以做到这一点,但我一直无法找到首选的方法…构建包含URL的翻译字符串的最佳方法是什么?

    链接可能有不同的位置(开头、中间或结尾)和标签。因此,您应该仅对url使用占位符:

    echo Yii::t(
      'forms', 
      'Would you like to <a href="{url}">create a new item</a>?', 
      array('{url}' => '/new_item')
    );
    
    echo Yii::t(
    "表格",,
    “你愿意吗?”,
    数组('{url}'=>'/new_item')
    );
    
    如果您有动态uri,请使用以下命令:

    echo Yii::t(
        'forms',
        'Would you like to <a href=":url">create a new item?</a>',
        array(':url'=>'/new_item')
    );
    
    echo Yii::t(
    "表格",,
    “你愿意吗?”,
    数组(':url'=>'/new_item')
    );
    
    或:

    echo Yii::t(
    "表格",,
    “你愿意吗?”,
    );
    
    或者,如果要传递url以外的其他动态属性,请使用以下命令:

    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"')
    );
    
    echo Yii::t(
    "表格",,
    '是否要创建新项目?',
    数组('linkAttr'=>'href=“/new_item”id=“link id”class=“link class””)
    );
    
    我向您建议以下解决方案:

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

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

    echo Yii::t(
        'forms', 
        'Would you like to {link:create}create a new item{/link}?',
        array(
            '{link:create}'=>'<a href="/new_item">',
            '{/link}'=>'</a>',
        )
    );
    
    echo Yii::t(
        'forms',
        'Would you like to {action}?'
        [
            'action' => Html::a(
                Yii::t('forms', 'create a new item'),
                ['controller/action']
            )
        ]
    );
    
    此解决方案的好处

    • 您可以使用帮助程序生成链接
    • 您可以在不修改翻译的情况下修改html代码
    • 无论谁做翻译都不需要知道任何关于html的知识,他们也不能弄乱html代码

    那么,我的翻译数组中的字符串是否会是:“您想创建一个新项目吗?”换句话说,
    是否会被Yii:t()去掉函数?@ews2001不,它们不会被剥离。你必须包括
    例如“你愿意吗?”=>“你愿意吗?”。@Tip:我发现通过检查yii框架核心翻译消息文件来学习类似的翻译技巧非常有用。@Nimir是的,没错。不同的语言可能对文件的位置和文本有非常不同的需求链接,因此这是实现极大灵活性的唯一方法array(“{url}=>”/new_item”)必须是array('url'=>“/new_item'))我不建议这样做,因为您不能将特定于某个主题的
    id
    class
    onclick
    ,放在
    a
    标记中。我建议您使用此解决方案:如果您只关心url,您可以使用我的解决方案,但如果您想传递其他属性,这是一种比您提到的更简单的方法ed是:
    echo Yii::t('forms','you like to create a new item?',array('linkAttr'=>'href=“/new_item”id=“link id”class=“link class=”link class“));
    这种方法也有缺点-将一个短语拆分为两个单独的翻译字符串会使翻译更加困难。
    echo Yii::t(
        'forms',
        'Would you like to {action}?'
        [
            'action' => Html::a(
                Yii::t('forms', 'create a new item'),
                ['controller/action']
            )
        ]
    );