|||
| — | — | — |
|
|摘要|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 个赞
khenmu
(John Sweeney)
2
让它更醒目并包含国旗可以极大地帮助多语言论坛的用户。
这是对生态系统的绝佳补充。
5 个赞
Heliosurge
(Dan DeMontmorency)
6
这是一个非常棒的功能!我建议团队至少将其作为预装主题组件添加到核心中!
非常感谢您的发布!



2 个赞
Heliosurge
(Dan DeMontmorency)
7
我有一个小功能请求。
下拉链接是否可以在移动设备上进行调整?
如果我启用聊天插件,它将变得非常拥挤。也许还可以将其配置为在桌面设备上使用国旗,而在移动设备上使用早期Windows的两位字母?很久没用了。哈哈
不过,缩放可能也能在尺寸上与搜索放大镜类似。
Heliosurge
(Dan DeMontmorency)
8
一位会员的一些反馈。
很棒的组件
带有国旗的语言选择很酷,但不幸的是存在一些错误。克罗地亚没有收到国旗。
加泰罗尼亚是西班牙的一部分。
您能否分享一些代码来减小移动设备上的国旗尺寸?
Heliosurge
(Dan DeMontmorency)
9
是否可以提供一个选项,允许使用国家代码而不是国旗? 类似于 Windows 上的键盘语言。
ie en es 等等。国旗在移动设备上太大了。或者提供一个缩小国旗大小的选项。
甚至可以使用 CSS 覆盖。谢谢。
1 个赞
volanar
(Volanar)
10
是的,这个开关需要修改以匹配讨论的总体风格。他现在很糟糕。
1 个赞
volanar
(Volanar)
12
此组件对我不起作用。除了打开它并选择模板之外,还需要做其他事情吗?
Canapin
(Coin-coin le Canapin)
13
它至少需要部分重构。如果有人想贡献并发送 PR 来修复各种问题,我们非常欢迎 
1 个赞
我将删除 broken 标签。
首先,该组件从未损坏!
这是对 Volanar 报告损坏的另一个 Discourse 主题组件的误解。
我对该组件进行了测试,它在最新的 Discourse 版本上仍然可用。
但是,它仍然需要一些更新来现代化,解决弃用问题,并修复小问题,以便在最新的 Discourse 版本上运行良好。
我已经完成了,并提交了一个 PR(由 @Richard_Millington 赞助)
6 个赞
如何使用 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。
@Ahmed_Gagan 此主题组件似乎出现了一个新问题:
nat
(Natalie T)
24
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)