在 alphine 中使用 PHP 换行字符串

问题描述 投票:0回答:1

我有一个字符串,需要使用 Yii 标签(如

Yii::t('app' , 'what_string')
)来包装,因为我需要它来翻译其他页面中的每个字符串。但是在这里,alphineJs 上有一个单词,我无法使用 PHP 来包装它
Yii::t('app' , ..
任何人都可以帮助我如何包装这样的东西?

我在 alphine 中的代码:

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`
},

在这里,我想包装“文章”,所以我只是添加了但它在这里不起作用

javascript php yii internationalization alpine.js
1个回答
0
投票

您正在混合客户端(JavaScript/Alpine)和服务器端代码(PHP/Yii)。虽然当通过 PHP 从服务器发送回 JS 代码时,这在某种程度上是可能的,但相反的方向却不能这样说,因此,在 JS 中渲染 PHP 代码是“不可能”的。您需要以一种方式向客户端发送您的 i18n 消息

解决方案A

制定一条路线来获取所有翻译
  • 创建一个对象(或者更好,
  • 一个商店
  • 创建一个函数来从对象/存储中检索翻译

<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

创建一个路由来获取单个翻译(或使用
    websocket
  • 创建一个函数以直接从 API 检索翻译
  • 建议
  • 缓存
  • 响应(或将它们放入商店)
解决方案C

在服务器端创建整个 Alpine JS 脚本,并在将其作为响应返回之前将其与 Yii 已解析的翻译一起交付
© www.soinside.com 2019 - 2024. All rights reserved.