yii 使用PHP在JavaScript中 Package 字符串

ecfsfe2w  于 2024-01-09  发布在  PHP
关注(0)|答案(1)|浏览(272)

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

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

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

wz1wpwve

wz1wpwve1#

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

溶液A

  • 创建一个路由以获取所有翻译
  • 创建一个对象(或者更好的,a store
  • 创建一个函数从对象/存储中检索翻译
  1. <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.6.5/axios.min.js"></script>
  2. <script src="https://cdnjs.cloudflare.com/ajax/libs/alpinejs/3.13.3/cdn.js" defer></script>
  3. <script>
  4. document.addEventListener('alpine:init', () => {
  5. Alpine.store('i18n', {
  6. async init() {
  7. this.messages = (await axios.get('data:application/json;charset=utf-8;base64,ew0KICAgICJsb3JlbSI6ICJpcHN1bSB7eyBhIH19IHt7IGIgfX0iLA0KICAgICJkb2xvciI6ICJzaXQiDQp9')).data
  8. },
  9. messages: {},
  10. message(message, options) {
  11. if (typeof this.messages[message] === 'undefined') {
  12. return `translation for "${message}" not found. Try one of: ${Object.keys(this.messages).join(', ')}`;
  13. }
  14. return this.messages[message].replace(
  15. new RegExp(`\{\{ (${Object.keys(options).join('|')}) \}\}`),
  16. (match, p1) => options[p1] ?? null,
  17. );
  18. }
  19. })
  20. })
  21. </script>
  22. <span x-data x-text="$store.i18n.message('lorem', { a: 42, c: 'gibberish' })">Test</span>
  23. <span x-data x-text="$store.i18n.message('ahmet', { d: 'sun' })">Test</span>

字符串

溶液B

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

相关问题