欢迎页眉文本 %{site_name} 报错:无效的插值键:site_name

以下插值键无效:site_name

1 个赞

我认为“Site_text”不可用。当我尝试在 /admin/customize/site_texts/js.welcome_banner.header.new_members?locale=en 编辑文本时,我看到只有名称可用。


我认为 site_name 仅对匿名用户可用。我猜描述需要更新。

3 个赞

好的,感谢您的信息,目前我正在使用 CSS 来放置网站名称。只是在欢迎文本中下划线显示它时遇到了一些问题。

出于某种原因,只有 %site_name 对匿名访客有效。

我希望这样做:

欢迎,%{preferred_display_name},来到 %{site_name}!

但这在这一区域是不可能的,它使得下划线/CSS 调整变得困难。

这说得通。他们没有登录,所以我们不知道他们是谁。数据库中没有他们的名字。
这就像有人按了你的门铃,而你又不认识他们;在他们自我介绍之前,你无法叫出他们的名字。

1 个赞

是的,但我希望已登录用户也能使用那个 %site_name :smiley:

感谢您的报告!看来我把可用的变量说得太多了……我有一个即将发布的更新将纠正这个问题。

3 个赞

所以如果用户已登录,我们仍然不能添加 %{site_name} 吗?

嗯……看起来确实是这样:


我猜想你或许可以通过制作一个主题组件(Theme Component)向 /about.json 发起请求并获取站点标题(site title)来显示站点名称(我查看了 site 服务但没有找到任何关于站点标题的信息)。

siteSetting 服务可能可以用来获取 title 站点设置的值

1 个赞

我研究了一下,这里的阻碍因素不是访问 title 的值。而是后端通过从默认语言环境的字符串中提取有效的插值键来验证翻译。

因此,当 %{site_name} 不在默认字符串中时,后端会将其拒绝为“无效的插值键”。

3 个赞

我不知道@NateDhaliwal 的想法是什么。我只是想指出一个替代方案,而不是向 /about.json 发出额外的请求。

我认为一个复制欢迎横幅但为所有文本提供 site_name 键的自定义组件是可行的。
或者是一个 PR,它将 site_name 作为可用键添加到核心中已登录用户的文本中

  get headerText() {
    if (!this.currentUser) {
      return i18n("welcome_banner.header.anonymous_members", {
        site_name: this.siteSettings.title,
      });
    }

    const isNewUser = !this.currentUser.previous_visit_at;
    const key = isNewUser
      ? "welcome_banner.header.new_members"
      : "welcome_banner.header.logged_in_members";

    return i18n(key, {
      preferred_display_name: sanitize(
        prioritizeNameFallback(this.currentUser.name, this.currentUser.username)
      ),
+     site_name: this.siteSettings.title,
    });
  }
5 个赞

@hipp0 再次感谢您提出这个问题!我们推送了一个更新,使 site_name 变量在所有三个标题字段上都可用:

3 个赞