ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

OpenProject 语言与地区设置指南:切换界面语言与时区的完整实操与实现原理

OpenProject 语言与地区设置指南:切换界面语言与时区的完整实操与实现原理 OpenProject 语言与地区设置指南切换界面语言与时区的完整实操与实现原理【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject本篇指南围绕 OpenProject 的Account settings账户设置→ Language and region语言和地区功能展开介绍普通用户如何切换界面语言、选择工作时区并深入仓库源码解释语言列表、时区列表的生成机制以及系统管理员如何激活更多语言。读完本文你将掌握在 OpenProject 中完成个人语言与地区配置的完整操作路径并理解其背后My::LocaleForm、My::TimeZoneForm与UserPreferences::UpdateContract的实现细节。进入语言和地区设置在 OpenProject 中语言与地区设置位于**账户设置Account settings**页面的Language and region小节。操作路径如下点击右上角个人头像或菜单进入Account settings在左侧设置列表中点击Language and region在该页面中即可看到**语言Language与时区Time zone**两个下拉选择框。该页面对应表单由两个独立组件组合而成。在 app/forms/my/locale_form.rb 中可以看到语言选择框与时区选择框被渲染在同一个表单内语言字段由My::LocaleForm自身负责时区字段则通过fields_for(:pref, ...)委托给My::TimeZoneForm最后统一提交。修改你的语言在Language and region页面中从**语言Language**下拉列表选择你希望使用的界面语言然后点击Save保存按钮即可生效。可选语言范围OpenProject 支持超过30 种语言涵盖德语、中文、法语、意大利语、韩语、拉脱维亚语、立陶宛语、波兰语、葡萄牙语、俄语、西班牙语、土耳其语等多种语言。语言名称以该语言自身的本地化名称展示例如德语显示为 Deutsch、中文显示为 中文并按照字母顺序排序。从源码层面看语言下拉列表由 app/forms/my/locale_form.rb 中的available_languages方法生成它首先取valid_languages即当前实例上已激活的语言集合然后调用translate_language将语言代码转换为对应语言的自称名称见 lib_static/redmine/i18n.rb 中的实现实际读取cldr.language_name翻译条目最后按名称字母序排序保证下拉列表稳定可预期。值得注意的是语言选择框还支持一个特殊选项当用户可用的有效语言集合等于系统全部语言集合时见 locale_form.rb 的include_auto?判断下拉列表会额外提供一个Auto自动选项让界面语言跟随浏览器或系统设置自动适配。为什么看不到我的语言如果你在账户设置的语言下拉列表中找不到自己的首选语言说明该语言尚未被系统管理员在系统设置中激活。OpenProject 的实例管理员可以在系统设置 → Languages语言页面中从可用语言列表里勾选需要启用的语言。激活后这些语言即可供所有用户在自己的账户设置中选择同时也可被设置为整个实例的默认语言。管理员操作界面如下图所示详细说明可参考 系统管理员指南 - Languages语言选项的校验逻辑即便语言由管理员集中激活用户提交的语言值也会经过严格校验。语言表单依赖Redmine::I18n.valid_languageslib_static/redmine/i18n.rb以及find_language方法lib_static/redmine/i18n.rb做匹配校验——该方法只接受形如[a-z-]的语言代码并依次尝试直接匹配如en与父语言匹配如用en匹配en-GB防止提交任意非法语言代码污染用户偏好。修改你的时区在Language and region页面中从**时区Time zone**下拉列表选择你工作所在地的时区然后点击Save保存按钮即可生效。时区列表如何生成时区下拉列表由 app/forms/my/time_zone_form.rb 的available_time_zones方法生成其数据源是UserPreferences::UpdateContract.assignable_time_zonesapp/contracts/user_preferences/base_contract.rb。该方法的实现要点如下它基于ActiveSupport::TimeZone.all获取时区集合但会按tzinfo.name分组同一组内只保留“同名namesake”的那个时区见 base_contract.rb 的namesake_time_zone这样做的原因在源码注释中有明确说明OpenProject 只提供能被无歧义地反向解析的时区选项——多个ActiveSupport::TimeZone可能映射到同一个 TZInfo 时区而系统尤其是提醒邮件实现与表单展示只接受 TZInfo 兼容的数据因此需要去重保证保存后的时区值能够准确还原表单展示时time_zone_form.rb会为每个时区拼接(UTC偏移量)前缀与对应的时区名称列表方便用户直观判断。时区保存与默认回退用户选择的时区保存在个人偏好UserPreference的settings[time_zone]中由 app/models/user_preference.rb 的time_zone方法读取。该方法遵循以下优先级用户显式设置的个人时区未设置时回退到系统默认时区Setting.user_default_timezone管理员可在系统设置中配置仍未配置时最终回退到Etc/UTC。提交时UserPreferences::UpdateContract的time_zone_correctness校验app/contracts/user_preferences/base_contract.rb会确认提交的时区存在于assignable_time_zones中确保不会写入非法时区标识。保存设置无论修改语言还是时区都需点击页面底部的Save保存按钮完成提交。表单的提交按钮在 app/forms/my/locale_form.rb 中定义为:primary方案的主按钮提交后设置立即生效——界面语言会切换为所选语言后续邮件通知、提醒、日期时间展示等也会遵循该语言与地区配置。为翻译做贡献OpenProject 的界面翻译由社区共同维护目前已有超过 30 种语言。如果你希望帮助新增语言或完善母语翻译可以参与 OpenProject 的 Crowdin 翻译项目同时管理员激活语言时也会在 Languages 管理页面 中看到引导用户参与社区翻译的说明对应文档 翻译 OpenProject 指南 位于仓库的 contributions-guide 目录。翻译成果合并后最终会以语言翻译文件的形式落入 config/locales 目录成为实例可选语言的一部分。小结语言与地区设置在Account settings → Language and region中完成选择后点击Save立即生效语言下拉列表仅展示实例已激活的语言超过 30 种未出现目标语言时请联系系统管理员在 系统设置 → Languages 中激活时区列表由assignable_time_zones去重生成保证存储值可无歧义解析未设置时依次回退到系统默认时区与Etc/UTC相关核心实现位于 app/forms/my/locale_form.rb、app/forms/my/time_zone_form.rb 与 app/contracts/user_preferences/base_contract.rb。【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进