Forem Hacktoberfest:让我们国际化!翻译通知过滤器 #14884

2025-06-08

Forem Hacktoberfest:让我们国际化!

翻译通知过滤器 #14884

我们最近发布了 Forem 国际化的基础功能。初期,这意味着管理员可以设置其 Forem 的默认语言环境,以防其主要面向西班牙语或葡萄牙语社区。从长远来看,个人用户很可能能够设置所有 Forem 的显示方式,从而覆盖默认设置。

但我们不要试图一次性完成所有这些事情。

目前,我们正在接受对国际化的迭代改进。

GitHub 徽标 前部/前部

为了赋能社区🌱

如何立即为 Forem 国际化做出贡献

在初始构建阶段,我们目前仅支持两种语言:英语和法语。一旦我们完成了更多基础架构的建设,添加更多语言将非常有可能,但目前我们并不希望看到人们为添加新语言做出贡献,更希望看到他们将硬编码的英文文本转换为可翻译的变量。

贡献示例

我们不会针对每个可能的可翻译区域设置单独的问题,因为大多数挑战在于发现可翻译元素。

您可以访问 DEV 的法语版本,dev.to/locale/fr了解其在生产环境中的运作方式。我们并不期望管理员定义的副本能够翻译,但我们希望应用程序定义的副本能够翻译。

根据我对代码库的了解,我可以访问法语主页并发现一些未翻译的副本。

主页导航

我搜索了整个项目,发现该代码可在app/views/layouts/_main_nav.html.erb...

<nav class="mb-6 <% unless user_signed_in? %>mt-4<% end %>" id="main-navigation" aria-label="<%= community_name %>">
  <ul class="default-navigation-links sidebar-navigation-links spec-sidebar-navigation-links">
    <li>
      <a href="<%= root_path %>" class="crayons-link crayons-link--block">
        <%= inline_svg_tag("twemoji/house.svg", class: "crayons-icon crayons-icon--default", aria_hidden: true) %>
        Home
      </a>
    </li>
    <li>
      <% unless user_signed_in? %>
        <a href="<%= sign_up_path %>" class="crayons-link crayons-link--block fw-bold">
          <%= inline_svg_tag("twemoji/handshake.svg", class: "crayons-icon crayons-icon--default", aria_hidden: true) %>
          Sign In/Up
        </a>
      <% end %>
    </li>
    <% default_nav_links.each do |link| %>
      <%= render "layouts/sidebar_nav_link", link: link %>
    <% end %>
  </ul>
</nav>
Enter fullscreen mode Exit fullscreen mode

这就是有趣的地方。在翻译过程中,我们乐于以翻译的名义简化Sign In/Up流程——作为项目负责人,我这么说比较容易,但我真的认为我们可以完全取消这个按钮。它就在上面那个行动号召的正下方。

因此,我发现了两个调整的机会:

  • 翻译“家”。
  • Sign in/Up全部移除。

我们的团队可能不同意删除Sign in/Up,但只要只是小改动,我认为在拉取请求审核时发现这一点是可以的。我们可能会要求您不要修改 ,而只修改“主页”——但我们会拭目以待。开源领域有很多细微的差别。

这是我调整后的文件:

<nav class="mb-6 <% unless user_signed_in? %>mt-4<% end %>" id="main-navigation" aria-label="<%= community_name %>">
  <ul class="default-navigation-links sidebar-navigation-links spec-sidebar-navigation-links">
    <li>
      <a href="<%= root_path %>" class="crayons-link crayons-link--block">
        <%= inline_svg_tag("twemoji/house.svg", class: "crayons-icon crayons-icon--default", aria_hidden: true) %>
       <%= t("core.home") %>
      </a>
    </li>
    <% default_nav_links.each do |link| %>
      <%= render "layouts/sidebar_nav_link", link: link %>
    <% end %>
  </ul>
</nav>
Enter fullscreen mode Exit fullscreen mode

请注意,我将“Home”替换为<%= t("core.home") %>t是 Rails 视图助手,是...的缩写。I18n.translate

这就是您在视图中需要做的所有事情,但您的工作还没有完成!

更改本地化 YAML 文件,像这样...

# config/locales/en.yml
en:
  core:
    .....
    home: "Home"
Enter fullscreen mode Exit fullscreen mode
# config/locales/fr.yml
fr:
  core:
    .....
    home: "Page D'Accueil"
Enter fullscreen mode Exit fullscreen mode

这些文件中的值应该按字母顺序排列。

“Home” 字面意思是“住所”,或者可能是“maison”,但在互联网环境下,我认为“Page D'Accueil” 更合适。

这个项目仍处于初始基础架构阶段,因此我们无需在所有翻译上都做到完美。请尽力而为。因此,我们暂时不会扩展法语和英语测试语言以外的版本。

就是这样!如果您提交了上述 PR,我们很可能会接受。请阅读我们的文档,以便更好地了解如何以不同的方式做出贡献。随着我们项目这部分的发展,期待更多关于如何为国际化做出贡献的帖子。

🤓 完整说明请参阅我们的文档 I18n 文档

🍂 更多 Forem 问题被标记为 Hacktoberfest 合格

编码愉快!

鏂囩珷鏉ユ簮锛�https://dev.to/devteam/forem-hacktoberfest-let-s-internationalize-404n
PREV
再见离线页面 将服务工作者功能减少到最少离线页面 #12834 已删除服务工作者 #12974 AWS 安全 LIVE!
NEXT
Forem Android 版现已上线!🤖