标题地区选择器

|||
| — | — | — |
| :information_source: |摘要|Header Locale Selector 为网站标题添加了语言选择器。|
|:eyeglasses:|预览|在 theme-creator.discourse.org 上预览|
|:hammer_and_wrench:|存储库链接|https://github.com/Ahmedgagan/header-locale-selector|
|:open_book:|刚接触 Discourse 主题?|Discourse 主题使用入门指南|

安装此主题组件

此主题组件在网站标题中添加了一个可用的语言下拉菜单。对于不熟悉默认网站语言的用户来说,这将非常有帮助。

注意:此功能仅对登录用户可用。

赞助

特别感谢 @Richard_Millington 赞助此组件。

13 个赞

让它更醒目并包含国旗可以极大地帮助多语言论坛的用户。

这是对生态系统的绝佳补充。:+1:

5 个赞

这是一个非常棒的功能!我建议团队至少将其作为预装主题组件添加到核心中!

非常感谢您的发布!
:vulcan_salute::star_struck::+1:

2 个赞

我有一个小功能请求。

下拉链接是否可以在移动设备上进行调整?

如果我启用聊天插件,它将变得非常拥挤。也许还可以将其配置为在桌面设备上使用国旗,而在移动设备上使用早期Windows的两位字母?很久没用了。哈哈

不过,缩放可能也能在尺寸上与搜索放大镜类似。

一位会员的一些反馈。

很棒的组件

带有国旗的语言选择很酷,但不幸的是存在一些错误。克罗地亚没有收到国旗。
加泰罗尼亚是西班牙的一部分。


您能否分享一些代码来减小移动设备上的国旗尺寸?

是否可以提供一个选项,允许使用国家代码而不是国旗? 类似于 Windows 上的键盘语言。
ie en es 等等。国旗在移动设备上太大了。或者提供一个缩小国旗大小的选项。

甚至可以使用 CSS 覆盖。谢谢。

1 个赞

是的,这个开关需要修改以匹配讨论的总体风格。他现在很糟糕。

1 个赞

截图供参考:

桌面:

移动设备:

此组件对我不起作用。除了打开它并选择模板之外,还需要做其他事情吗?

它至少需要部分重构。如果有人想贡献并发送 PR 来修复各种问题,我们非常欢迎 :slight_smile:

1 个赞

暂时标记为 broken

该组件已损坏,但仍标记为与最新版本兼容

@volanar 那不是同一个组件。

1 个赞

我将删除 broken 标签。

首先,该组件从未损坏!
这是对 Volanar 报告损坏的另一个 Discourse 主题组件的误解。

我对该组件进行了测试,它在最新的 Discourse 版本上仍然可用。
但是,它仍然需要一些更新来现代化,解决弃用问题,并修复小问题,以便在最新的 Discourse 版本上运行良好。

我已经完成了,并提交了一个 PR(@Richard_Millington 赞助:+1:

6 个赞

PR 已合并;谢谢你,Ahmed。:+1:

4 个赞

如何使用 2 或 3 种语言并删除其他语言?
顺便说一句,我为 locale-selector.js 优化了代码:

import Component from "@ember/component";
import { action } from "@ember/object";
import { inject as service } from "@ember/service";
import { ajax } from "discourse/lib/ajax";
import { userPath } from "discourse/lib/url";
import { isTesting } from "discourse-common/config/environment";

export default class LocaleSelector extends Component {
  @service currentUser;

  get availableLocales() {
    // 缓存过滤后的区域设置以提高性能
    if (!this._filteredLocales) {
      const allLocales = JSON.parse(this.siteSettings.available_locales);
      this._filteredLocales = allLocales.filter(locale => ['en', 'ar'].includes(locale));
    }
    return this._filteredLocales;
  }

  @action
  onChangeLocale(value) {
    this.set("currentUser.locale", value);
    ajax(userPath(`${this.currentUser.username_lower}.json`), {
      data: { locale: this.currentUser.locale },
      type: "PUT",
    }).then(() => {
      if (!isTesting()) {
        location.reload();
      }
    });
  }

  defaultItem() {
    const currentUserLocale = document.documentElement
      .getAttribute("lang")
      ?.replaceAll("-", "_");

    return (
      this.content.find(val => val.value === currentUserLocale) ||
      this.content.find(val => val.value === this.siteSettings.default_locale)
    );
  }
}

测试后 Discourse 一直卡死
有什么想法吗?

available_locales 的结构如下:

[
  {
    name: "English (US)",
    value: "en"
  },
  ...
]

所以你的代码需要使用 locale.value:+1:

@Ahmed_Gagan 此主题组件似乎出现了一个新问题:

Just a note here that this theme component is not needed any more, and is supported by core in the site settings listed above. (Docs)