<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>I18n on Time Friend</title><link>https://time-friend.com/zh/tags/i18n/</link><description>Recent content in I18n on Time Friend</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 20 Jan 2025 14:21:00 +0000</lastBuildDate><atom:link href="https://time-friend.com/zh/tags/i18n/index.xml" rel="self" type="application/rss+xml"/><item><title>博客多语言是怎么实现的</title><link>https://time-friend.com/zh/archive/blog-architecture-i18n/</link><pubDate>Mon, 20 Jan 2025 14:21:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/blog-architecture-i18n/</guid><description>&lt;p&gt;写技术博客有个尴尬: 中文内容国内读者看, 但海外流量也不少. 干脆中英文都上.&lt;/p&gt;
&lt;p&gt;这个博客是中英双语的. 同一篇文章有中文版和英文版, 各自有独立的 URL, 互不影响.&lt;/p&gt;
&lt;p&gt;i18n 分两层: 一是&lt;strong&gt;内容&lt;/strong&gt;的国际化 (文章本身有中英文版本), 二是&lt;strong&gt;界面&lt;/strong&gt;的国际化 (按钮, 菜单, 提示文字跟着语言切换).&lt;/p&gt;
&lt;h1 id="内容国际化"&gt;内容国际化&lt;/h1&gt;
&lt;h2 id="目录结构"&gt;目录结构&lt;/h2&gt;
&lt;p&gt;Hugo 的 &lt;code&gt;module.mounts&lt;/code&gt; 来做语言映射:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;module&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;mounts&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;source&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;content/en&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;target&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;lang&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;en&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;source&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;target&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;lang&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;zh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;excludeFiles&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;en/**&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;英文内容从 &lt;code&gt;content/en&lt;/code&gt; 取, 中文内容从 &lt;code&gt;content&lt;/code&gt; 取, 排除掉 &lt;code&gt;en/&lt;/code&gt; 目录. 这样中文和英文文件互不干扰, 各自在独立的目录下.&lt;/p&gt;
&lt;p&gt;中文文章在 &lt;code&gt;content/archive/&lt;/code&gt; 下, 英文文章在 &lt;code&gt;content/en/archive/&lt;/code&gt; 下.&lt;/p&gt;
&lt;h2 id="translationkey-配对"&gt;translationKey 配对&lt;/h2&gt;
&lt;p&gt;用 Hugo 的 &lt;code&gt;translationKey&lt;/code&gt; 来配对文章. 同一篇文章的中英文版本用同一个 key:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 中文文章&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;translationKey&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;zh0189&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;title&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Git系列之关于add命令的一些事&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;slug&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;git-series-about-add-command&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 英文文章&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;translationKey&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;zh0189&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;title&lt;/span&gt;: &lt;span style="color:#f92672"&gt;Git Series&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;About the Add Command&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;slug&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;git-series-about-add-command&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hugo 会自动把这两个页面识别为翻译对. 模板里用 &lt;code&gt;.Translations&lt;/code&gt; 拿到对应语言的版本, 用来做语言切换.&lt;/p&gt;</description></item></channel></rss>