yii 使用PHP在JavaScript中 Package 字符串

ecfsfe2w  于 5个月前  发布在  PHP
关注(0)|答案(1)|浏览(38)

我有一个字符串,我需要 Package 使用Yii标签像Yii::t('app' , 'what_string'),因为我需要这个翻译每字符串在其他页面。但在这里,有一个词,地方在codejs和我不能 Package 它使用PHP Yii::t('app' , ..任何人都可以帮助我如何 Package 这样的东西?
我的代码在campusine:

get articleCount() {
        if (this.blog.articles.length === this.blogArticle.length) return `${this.blog.articles.length <?=Yii::t('app', 'Article(s)')?> `
          return `${this.course.topics.length} Article(s), ${this.blogArticle.length} Filtered`
},

字符串
在这里,我想 Package '文章(s)',所以我只是添加,但它不工作在这里

wz1wpwve

wz1wpwve1#

你混合了客户端(JavaScript/Alpine)和服务器端代码(PHP/Yii)。虽然这在某种程度上是可能的,当通过PHP从服务器发送JS代码时,相反的方向就不能这么说了,因此,在JS中渲染PHP代码是不可能的。你需要以这样或那样的方式向客户端发送你的i18 n消息。

溶液A

  • 创建一个路由以获取所有翻译
  • 创建一个对象(或者更好的,a store
  • 创建一个函数从对象/存储中检索翻译
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.6.5/axios.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/alpinejs/3.13.3/cdn.js" defer></script>
<script>
    document.addEventListener('alpine:init', () => {
        Alpine.store('i18n', {
            async init() {
                this.messages = (await axios.get('data:application/json;charset=utf-8;base64,ew0KICAgICJsb3JlbSI6ICJpcHN1bSB7eyBhIH19IHt7IGIgfX0iLA0KICAgICJkb2xvciI6ICJzaXQiDQp9')).data
            },
 
            messages: {},
 
            message(message, options) {
              if (typeof this.messages[message] === 'undefined') {
                return `translation for "${message}" not found. Try one of: ${Object.keys(this.messages).join(', ')}`;
              }
              return this.messages[message].replace(
                  new RegExp(`\{\{ (${Object.keys(options).join('|')}) \}\}`),
                  (match, p1) => options[p1] ?? null,
              );
            }
        })
    })
</script>

<span x-data x-text="$store.i18n.message('lorem', { a: 42, c: 'gibberish' })">Test</span>
<span x-data x-text="$store.i18n.message('ahmet', { d: 'sun' })">Test</span>

字符串

溶液B

  • 创建一个路由来获取单个翻译(或使用a websocket
  • 创建一个函数直接从API检索翻译
  • 建议cache响应(或将它们放入商店)
    溶液C
  • 在服务器端创建整个Alpine JS脚本,并在作为响应返回之前将其与Yii已经解析的翻译一起交付

相关问题