18ways 部落格
一種原生於 AI 的方式在 Next.js 中進行國際化 (i18n),而不會破壞 SEO。
國際化(通常簡稱為 i18n)、本地化(l10n)以及 多語言支持 都描述了相同的概念:調整您的產品,使人們能夠使用他們自己的語言。
每個企業最終都會意識到他們需要支持多種語言。這時,產品團隊就像一位技師一樣靠在椅子上,吸了一口氣,然後說:“我們在談多少頁面?至少需要四個衝刺。”

我們實現 i18n 的基本方式在 20 年來沒有改變。大多數 i18n 的「最佳實踐」是在現代網絡架構之前形成的,之後的一切都只是建立在這些基礎之上。
I18n 是現代網頁開發中唯一仍然涉及導出文件並將其發送給某人的部分。如果不再通過電子郵件發送,而是通過 API 上傳,則被視為現代化的設置。
在一個 CI 管道和部署以分鐘而非天數計算的世界裡,我們應該感到幸運,因為我們不必傳真任何東西。
現代網頁開發的進展非常迅速。
我們有:
然而,國際化工作流程仍然讓人感覺屬於不同的時代。
即使是相對較小的應用程序,也會迅速面臨以下挑戰:
開發者並不是一開始就想要建立這樣的系統。他們在不熟悉不同語言如何完全不同地結構句子的情況下,常常會被常見的國際化障礙絆倒……並且不情願地接受20年前設定的現狀。
隨著時間的推移,國際化成為堆疊中最複雜的部分之一。
考慮一個簡單的用戶介面:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>這很容易理解。這很簡單。
在某個時刻,我們決定將其國際化。因此,我們將文本提取到翻譯文件中:
{
"mainPage": {
"greeting": "Hello world",
"cta": "<0>Click here</0> to view your <1>{{description}}</1>"
}
}我們在代碼中引用了這個:
<h1>{t('mainPage.greeting')}</h1>
<p>
<Trans key="mainPage.cta">
<a href="#/">Click here</a> to view your <b>{{ description: serverResponse.productDescription }}</b>
</Trans>
</p>但是,等等,我們的代碼和翻譯文件中現在都有英文文本?是的。不同的 i18n 庫對其進行了不同的處理,但試圖將部分格式化的文本提取到可讀的 JSON 文件中進行翻譯是一場失敗的戰鬥。
現代的用戶界面是結構化的,但翻譯系統是建立在平面字符串的基礎上。
一旦標記、變數和動態內容進入畫面,抽象就開始洩漏。
當內容不是靜態時,事情變得更加困難。
再舉這個例子:
<b>{serverResponse.productDescription}</b>那個字串來自一個API。我們如何將其轉換為翻譯鍵?
劇透:你不需要。現在你的後端也需要支持國際化。
您的後端現在必須管理:
翻譯者突然也需要訪問後端系統。
當用戶生成的內容進入畫面時,問題只會變得更加嚴重。
評論。留言。市場列表。論壇。
傳統的 i18n 流程假設開發者控制所有文本。然而,這種情況越來越不成立。
像亞馬遜這樣的公司在2026年開始嘗試翻譯用戶評論,這一事實充分說明了i18n生態系統發展的緩慢。
甚至確定用戶想要哪種語言也出乎意料地複雜。
瀏覽器通過 Accept-Language 標頭發送語言偏好:
Accept-Language: en-GB,en;q=0.9,fr;q=0.8這告訴伺服器:
在實踐中,正確實施這一點涉及:
en, en-GB, en-US)許多框架將大部分邏輯留給開發者處理。
即使是基本的區域檢測,通常也會變成自定義應用程式代碼。
翻譯基礎設施只是問題的一半。
用戶仍然需要一種方式來更改語言。
大多數 i18n 庫提供翻譯層,但將問題的其餘部分留給開發者:
hreflang 標籤用於 SEO這些細節聽起來微不足道,但它們很快就會變成大量的應用程式架構,尤其是如果你對 i18n 的所有細節不熟悉的話。大多數公司和開發者都不熟悉。
鑑於這些複雜性,一些團隊轉向自動網站翻譯工具。這些平台承諾能以最小的努力自動翻譯您的網站。
幾家公司正在構建這個想法的越來越複雜的版本。不幸的是,它們引入了一組不同的問題:
結果通常是一個在技術上支持多種語言的網站,但提供的體驗明顯較差,並且對開發人員來說是一個黑箱。
我們從一件美麗而簡單的事情開始:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>最後得到了翻譯鍵、JSON 字典、破碎的管道、分離的後端和前端本地化層,以及外部翻譯工具。
現代的網頁應用程式是極其複雜的系統。然而,i18n 工具卻期望使用為不同時代設計的工作流程,就像一輛需要手搖啟動的法拉利。
如果國際化看起來更像這樣呢?
<h1><T>Hello world!</T></h1>
<p>
<T>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</T>
</p>沒有翻譯鍵。
沒有 JSON 字典。
沒有手動管道。
只是文字。
這個想法是18ways的基礎。
18ways 將翻譯視為一個優化的運行時問題。提取翻譯鍵和管理翻譯文件是機器的問題,而不是人類的問題。
開發者只需標記他們想要翻譯的文本。
幕後,18ways:
一切仍然保持SSR友好和SEO安全。
傳統的 i18n 系統失去了上下文。
翻譯者可能會看到類似的內容:
home但這意味著什麼呢?
在德語中,這些意思需要完全不同的單詞:
Haus - 一棟房子首頁 - 首頁開始 - 導航標籤返回開頭 - 返回到開始如果你必須將「家」翻譯成德語,你更希望看到什麼?一個孤立的字符串,還是它實際出現的頁面?

僅僅查看孤立字串的翻譯系統在這些區別上會遇到困難。
18ways 在實際 UI 的上下文中分析翻譯。
我們的後端代理會檢查翻譯在實際頁面上的顯示,並針對以下進行優化:
對於任何熟悉德語複合名詞的人來說,別擔心,溢出檢測也包含在內。
所有幫助人工智慧產生更好翻譯的事物,也同樣幫助人類翻譯者。
18ways 為翻譯者提供與我們的 AI 代理使用的相同上下文感知環境。
翻譯者直接在出現文本的用戶界面上進行審核,而不是編輯 JSON 文件。
這大幅提升了翻譯的準確性和工作流程的效率。
國際化不需要另一層翻譯鍵、字串檔案和管道粘合劑。
現代應用程序已經具備我們需要的結構、上下文和運行時信息,以便更好地完成這項工作。
下一代的 i18n 應該為伺服器渲染的應用程式、動態內容、AI 原生工作流程以及人類翻譯者並肩工作而構建。
這就是18ways所採取的方向。
18ways 部落格
一種原生於 AI 的方式在 Next.js 中進行國際化 (i18n),而不會破壞 SEO。
國際化(通常簡稱為 i18n)、本地化(l10n)以及 多語言支持 都描述了相同的概念:調整您的產品,使人們能夠使用他們自己的語言。
每個企業最終都會意識到他們需要支持多種語言。這時,產品團隊就像一位技師一樣靠在椅子上,吸了一口氣,然後說:“我們在談多少頁面?至少需要四個衝刺。”

我們實現 i18n 的基本方式在 20 年來沒有改變。大多數 i18n 的「最佳實踐」是在現代網絡架構之前形成的,之後的一切都只是建立在這些基礎之上。
I18n 是現代網頁開發中唯一仍然涉及導出文件並將其發送給某人的部分。如果不再通過電子郵件發送,而是通過 API 上傳,則被視為現代化的設置。
在一個 CI 管道和部署以分鐘而非天數計算的世界裡,我們應該感到幸運,因為我們不必傳真任何東西。
現代網頁開發的進展非常迅速。
我們有:
然而,國際化工作流程仍然讓人感覺屬於不同的時代。
即使是相對較小的應用程序,也會迅速面臨以下挑戰:
開發者並不是一開始就想要建立這樣的系統。他們在不熟悉不同語言如何完全不同地結構句子的情況下,常常會被常見的國際化障礙絆倒……並且不情願地接受20年前設定的現狀。
隨著時間的推移,國際化成為堆疊中最複雜的部分之一。
考慮一個簡單的用戶介面:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>這很容易理解。這很簡單。
在某個時刻,我們決定將其國際化。因此,我們將文本提取到翻譯文件中:
{
"mainPage": {
"greeting": "Hello world",
"cta": "<0>Click here</0> to view your <1>{{description}}</1>"
}
}我們在代碼中引用了這個:
<h1>{t('mainPage.greeting')}</h1>
<p>
<Trans key="mainPage.cta">
<a href="#/">Click here</a> to view your <b>{{ description: serverResponse.productDescription }}</b>
</Trans>
</p>但是,等等,我們的代碼和翻譯文件中現在都有英文文本?是的。不同的 i18n 庫對其進行了不同的處理,但試圖將部分格式化的文本提取到可讀的 JSON 文件中進行翻譯是一場失敗的戰鬥。
現代的用戶界面是結構化的,但翻譯系統是建立在平面字符串的基礎上。
一旦標記、變數和動態內容進入畫面,抽象就開始洩漏。
當內容不是靜態時,事情變得更加困難。
再舉這個例子:
<b>{serverResponse.productDescription}</b>那個字串來自一個API。我們如何將其轉換為翻譯鍵?
劇透:你不需要。現在你的後端也需要支持國際化。
您的後端現在必須管理:
翻譯者突然也需要訪問後端系統。
當用戶生成的內容進入畫面時,問題只會變得更加嚴重。
評論。留言。市場列表。論壇。
傳統的 i18n 流程假設開發者控制所有文本。然而,這種情況越來越不成立。
像亞馬遜這樣的公司在2026年開始嘗試翻譯用戶評論,這一事實充分說明了i18n生態系統發展的緩慢。
甚至確定用戶想要哪種語言也出乎意料地複雜。
瀏覽器通過 Accept-Language 標頭發送語言偏好:
Accept-Language: en-GB,en;q=0.9,fr;q=0.8這告訴伺服器:
在實踐中,正確實施這一點涉及:
en, en-GB, en-US)許多框架將大部分邏輯留給開發者處理。
即使是基本的區域檢測,通常也會變成自定義應用程式代碼。
翻譯基礎設施只是問題的一半。
用戶仍然需要一種方式來更改語言。
大多數 i18n 庫提供翻譯層,但將問題的其餘部分留給開發者:
hreflang 標籤用於 SEO這些細節聽起來微不足道,但它們很快就會變成大量的應用程式架構,尤其是如果你對 i18n 的所有細節不熟悉的話。大多數公司和開發者都不熟悉。
鑑於這些複雜性,一些團隊轉向自動網站翻譯工具。這些平台承諾能以最小的努力自動翻譯您的網站。
幾家公司正在構建這個想法的越來越複雜的版本。不幸的是,它們引入了一組不同的問題:
結果通常是一個在技術上支持多種語言的網站,但提供的體驗明顯較差,並且對開發人員來說是一個黑箱。
我們從一件美麗而簡單的事情開始:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>最後得到了翻譯鍵、JSON 字典、破碎的管道、分離的後端和前端本地化層,以及外部翻譯工具。
現代的網頁應用程式是極其複雜的系統。然而,i18n 工具卻期望使用為不同時代設計的工作流程,就像一輛需要手搖啟動的法拉利。
如果國際化看起來更像這樣呢?
<h1><T>Hello world!</T></h1>
<p>
<T>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</T>
</p>沒有翻譯鍵。
沒有 JSON 字典。
沒有手動管道。
只是文字。
這個想法是18ways的基礎。
18ways 將翻譯視為一個優化的運行時問題。提取翻譯鍵和管理翻譯文件是機器的問題,而不是人類的問題。
開發者只需標記他們想要翻譯的文本。
幕後,18ways:
一切仍然保持SSR友好和SEO安全。
傳統的 i18n 系統失去了上下文。
翻譯者可能會看到類似的內容:
home但這意味著什麼呢?
在德語中,這些意思需要完全不同的單詞:
Haus - 一棟房子首頁 - 首頁開始 - 導航標籤返回開頭 - 返回到開始如果你必須將「家」翻譯成德語,你更希望看到什麼?一個孤立的字符串,還是它實際出現的頁面?

僅僅查看孤立字串的翻譯系統在這些區別上會遇到困難。
18ways 在實際 UI 的上下文中分析翻譯。
我們的後端代理會檢查翻譯在實際頁面上的顯示,並針對以下進行優化:
對於任何熟悉德語複合名詞的人來說,別擔心,溢出檢測也包含在內。
所有幫助人工智慧產生更好翻譯的事物,也同樣幫助人類翻譯者。
18ways 為翻譯者提供與我們的 AI 代理使用的相同上下文感知環境。
翻譯者直接在出現文本的用戶界面上進行審核,而不是編輯 JSON 文件。
這大幅提升了翻譯的準確性和工作流程的效率。
國際化不需要另一層翻譯鍵、字串檔案和管道粘合劑。
現代應用程序已經具備我們需要的結構、上下文和運行時信息,以便更好地完成這項工作。
下一代的 i18n 應該為伺服器渲染的應用程式、動態內容、AI 原生工作流程以及人類翻譯者並肩工作而構建。
這就是18ways所採取的方向。
18ways 部落格
一種原生於 AI 的方式在 Next.js 中進行國際化 (i18n),而不會破壞 SEO。
國際化(通常簡稱為 i18n)、本地化(l10n)以及 多語言支持 都描述了相同的概念:調整您的產品,使人們能夠使用他們自己的語言。
每個企業最終都會意識到他們需要支持多種語言。這時,產品團隊就像一位技師一樣靠在椅子上,吸了一口氣,然後說:“我們在談多少頁面?至少需要四個衝刺。”

我們實現 i18n 的基本方式在 20 年來沒有改變。大多數 i18n 的「最佳實踐」是在現代網絡架構之前形成的,之後的一切都只是建立在這些基礎之上。
I18n 是現代網頁開發中唯一仍然涉及導出文件並將其發送給某人的部分。如果不再通過電子郵件發送,而是通過 API 上傳,則被視為現代化的設置。
在一個 CI 管道和部署以分鐘而非天數計算的世界裡,我們應該感到幸運,因為我們不必傳真任何東西。
現代網頁開發的進展非常迅速。
我們有:
然而,國際化工作流程仍然讓人感覺屬於不同的時代。
即使是相對較小的應用程序,也會迅速面臨以下挑戰:
開發者並不是一開始就想要建立這樣的系統。他們在不熟悉不同語言如何完全不同地結構句子的情況下,常常會被常見的國際化障礙絆倒……並且不情願地接受20年前設定的現狀。
隨著時間的推移,國際化成為堆疊中最複雜的部分之一。
考慮一個簡單的用戶介面:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>這很容易理解。這很簡單。
在某個時刻,我們決定將其國際化。因此,我們將文本提取到翻譯文件中:
{
"mainPage": {
"greeting": "Hello world",
"cta": "<0>Click here</0> to view your <1>{{description}}</1>"
}
}我們在代碼中引用了這個:
<h1>{t('mainPage.greeting')}</h1>
<p>
<Trans key="mainPage.cta">
<a href="#/">Click here</a> to view your <b>{{ description: serverResponse.productDescription }}</b>
</Trans>
</p>但是,等等,我們的代碼和翻譯文件中現在都有英文文本?是的。不同的 i18n 庫對其進行了不同的處理,但試圖將部分格式化的文本提取到可讀的 JSON 文件中進行翻譯是一場失敗的戰鬥。
現代的用戶界面是結構化的,但翻譯系統是建立在平面字符串的基礎上。
一旦標記、變數和動態內容進入畫面,抽象就開始洩漏。
當內容不是靜態時,事情變得更加困難。
再舉這個例子:
<b>{serverResponse.productDescription}</b>那個字串來自一個API。我們如何將其轉換為翻譯鍵?
劇透:你不需要。現在你的後端也需要支持國際化。
您的後端現在必須管理:
翻譯者突然也需要訪問後端系統。
當用戶生成的內容進入畫面時,問題只會變得更加嚴重。
評論。留言。市場列表。論壇。
傳統的 i18n 流程假設開發者控制所有文本。然而,這種情況越來越不成立。
像亞馬遜這樣的公司在2026年開始嘗試翻譯用戶評論,這一事實充分說明了i18n生態系統發展的緩慢。
甚至確定用戶想要哪種語言也出乎意料地複雜。
瀏覽器通過 Accept-Language 標頭發送語言偏好:
Accept-Language: en-GB,en;q=0.9,fr;q=0.8這告訴伺服器:
在實踐中,正確實施這一點涉及:
en, en-GB, en-US)許多框架將大部分邏輯留給開發者處理。
即使是基本的區域檢測,通常也會變成自定義應用程式代碼。
翻譯基礎設施只是問題的一半。
用戶仍然需要一種方式來更改語言。
大多數 i18n 庫提供翻譯層,但將問題的其餘部分留給開發者:
hreflang 標籤用於 SEO這些細節聽起來微不足道,但它們很快就會變成大量的應用程式架構,尤其是如果你對 i18n 的所有細節不熟悉的話。大多數公司和開發者都不熟悉。
鑑於這些複雜性,一些團隊轉向自動網站翻譯工具。這些平台承諾能以最小的努力自動翻譯您的網站。
幾家公司正在構建這個想法的越來越複雜的版本。不幸的是,它們引入了一組不同的問題:
結果通常是一個在技術上支持多種語言的網站,但提供的體驗明顯較差,並且對開發人員來說是一個黑箱。
我們從一件美麗而簡單的事情開始:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>最後得到了翻譯鍵、JSON 字典、破碎的管道、分離的後端和前端本地化層,以及外部翻譯工具。
現代的網頁應用程式是極其複雜的系統。然而,i18n 工具卻期望使用為不同時代設計的工作流程,就像一輛需要手搖啟動的法拉利。
如果國際化看起來更像這樣呢?
<h1><T>Hello world!</T></h1>
<p>
<T>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</T>
</p>沒有翻譯鍵。
沒有 JSON 字典。
沒有手動管道。
只是文字。
這個想法是18ways的基礎。
18ways 將翻譯視為一個優化的運行時問題。提取翻譯鍵和管理翻譯文件是機器的問題,而不是人類的問題。
開發者只需標記他們想要翻譯的文本。
幕後,18ways:
一切仍然保持SSR友好和SEO安全。
傳統的 i18n 系統失去了上下文。
翻譯者可能會看到類似的內容:
home但這意味著什麼呢?
在德語中,這些意思需要完全不同的單詞:
Haus - 一棟房子首頁 - 首頁開始 - 導航標籤返回開頭 - 返回到開始如果你必須將「家」翻譯成德語,你更希望看到什麼?一個孤立的字符串,還是它實際出現的頁面?

僅僅查看孤立字串的翻譯系統在這些區別上會遇到困難。
18ways 在實際 UI 的上下文中分析翻譯。
我們的後端代理會檢查翻譯在實際頁面上的顯示,並針對以下進行優化:
對於任何熟悉德語複合名詞的人來說,別擔心,溢出檢測也包含在內。
所有幫助人工智慧產生更好翻譯的事物,也同樣幫助人類翻譯者。
18ways 為翻譯者提供與我們的 AI 代理使用的相同上下文感知環境。
翻譯者直接在出現文本的用戶界面上進行審核,而不是編輯 JSON 文件。
這大幅提升了翻譯的準確性和工作流程的效率。
國際化不需要另一層翻譯鍵、字串檔案和管道粘合劑。
現代應用程序已經具備我們需要的結構、上下文和運行時信息,以便更好地完成這項工作。
下一代的 i18n 應該為伺服器渲染的應用程式、動態內容、AI 原生工作流程以及人類翻譯者並肩工作而構建。
這就是18ways所採取的方向。
18ways 部落格
一種原生於 AI 的方式在 Next.js 中進行國際化 (i18n),而不會破壞 SEO。
國際化(通常簡稱為 i18n)、本地化(l10n)以及 多語言支持 都描述了相同的概念:調整您的產品,使人們能夠使用他們自己的語言。
每個企業最終都會意識到他們需要支持多種語言。這時,產品團隊就像一位技師一樣靠在椅子上,吸了一口氣,然後說:“我們在談多少頁面?至少需要四個衝刺。”

我們實現 i18n 的基本方式在 20 年來沒有改變。大多數 i18n 的「最佳實踐」是在現代網絡架構之前形成的,之後的一切都只是建立在這些基礎之上。
I18n 是現代網頁開發中唯一仍然涉及導出文件並將其發送給某人的部分。如果不再通過電子郵件發送,而是通過 API 上傳,則被視為現代化的設置。
在一個 CI 管道和部署以分鐘而非天數計算的世界裡,我們應該感到幸運,因為我們不必傳真任何東西。
現代網頁開發的進展非常迅速。
我們有:
然而,國際化工作流程仍然讓人感覺屬於不同的時代。
即使是相對較小的應用程序,也會迅速面臨以下挑戰:
開發者並不是一開始就想要建立這樣的系統。他們在不熟悉不同語言如何完全不同地結構句子的情況下,常常會被常見的國際化障礙絆倒……並且不情願地接受20年前設定的現狀。
隨著時間的推移,國際化成為堆疊中最複雜的部分之一。
考慮一個簡單的用戶介面:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>這很容易理解。這很簡單。
在某個時刻,我們決定將其國際化。因此,我們將文本提取到翻譯文件中:
{
"mainPage": {
"greeting": "Hello world",
"cta": "<0>Click here</0> to view your <1>{{description}}</1>"
}
}我們在代碼中引用了這個:
<h1>{t('mainPage.greeting')}</h1>
<p>
<Trans key="mainPage.cta">
<a href="#/">Click here</a> to view your <b>{{ description: serverResponse.productDescription }}</b>
</Trans>
</p>但是,等等,我們的代碼和翻譯文件中現在都有英文文本?是的。不同的 i18n 庫對其進行了不同的處理,但試圖將部分格式化的文本提取到可讀的 JSON 文件中進行翻譯是一場失敗的戰鬥。
現代的用戶界面是結構化的,但翻譯系統是建立在平面字符串的基礎上。
一旦標記、變數和動態內容進入畫面,抽象就開始洩漏。
當內容不是靜態時,事情變得更加困難。
再舉這個例子:
<b>{serverResponse.productDescription}</b>那個字串來自一個API。我們如何將其轉換為翻譯鍵?
劇透:你不需要。現在你的後端也需要支持國際化。
您的後端現在必須管理:
翻譯者突然也需要訪問後端系統。
當用戶生成的內容進入畫面時,問題只會變得更加嚴重。
評論。留言。市場列表。論壇。
傳統的 i18n 流程假設開發者控制所有文本。然而,這種情況越來越不成立。
像亞馬遜這樣的公司在2026年開始嘗試翻譯用戶評論,這一事實充分說明了i18n生態系統發展的緩慢。
甚至確定用戶想要哪種語言也出乎意料地複雜。
瀏覽器通過 Accept-Language 標頭發送語言偏好:
Accept-Language: en-GB,en;q=0.9,fr;q=0.8這告訴伺服器:
在實踐中,正確實施這一點涉及:
en, en-GB, en-US)許多框架將大部分邏輯留給開發者處理。
即使是基本的區域檢測,通常也會變成自定義應用程式代碼。
翻譯基礎設施只是問題的一半。
用戶仍然需要一種方式來更改語言。
大多數 i18n 庫提供翻譯層,但將問題的其餘部分留給開發者:
hreflang 標籤用於 SEO這些細節聽起來微不足道,但它們很快就會變成大量的應用程式架構,尤其是如果你對 i18n 的所有細節不熟悉的話。大多數公司和開發者都不熟悉。
鑑於這些複雜性,一些團隊轉向自動網站翻譯工具。這些平台承諾能以最小的努力自動翻譯您的網站。
幾家公司正在構建這個想法的越來越複雜的版本。不幸的是,它們引入了一組不同的問題:
結果通常是一個在技術上支持多種語言的網站,但提供的體驗明顯較差,並且對開發人員來說是一個黑箱。
我們從一件美麗而簡單的事情開始:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>最後得到了翻譯鍵、JSON 字典、破碎的管道、分離的後端和前端本地化層,以及外部翻譯工具。
現代的網頁應用程式是極其複雜的系統。然而,i18n 工具卻期望使用為不同時代設計的工作流程,就像一輛需要手搖啟動的法拉利。
如果國際化看起來更像這樣呢?
<h1><T>Hello world!</T></h1>
<p>
<T>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</T>
</p>沒有翻譯鍵。
沒有 JSON 字典。
沒有手動管道。
只是文字。
這個想法是18ways的基礎。
18ways 將翻譯視為一個優化的運行時問題。提取翻譯鍵和管理翻譯文件是機器的問題,而不是人類的問題。
開發者只需標記他們想要翻譯的文本。
幕後,18ways:
一切仍然保持SSR友好和SEO安全。
傳統的 i18n 系統失去了上下文。
翻譯者可能會看到類似的內容:
home但這意味著什麼呢?
在德語中,這些意思需要完全不同的單詞:
Haus - 一棟房子首頁 - 首頁開始 - 導航標籤返回開頭 - 返回到開始如果你必須將「家」翻譯成德語,你更希望看到什麼?一個孤立的字符串,還是它實際出現的頁面?

僅僅查看孤立字串的翻譯系統在這些區別上會遇到困難。
18ways 在實際 UI 的上下文中分析翻譯。
我們的後端代理會檢查翻譯在實際頁面上的顯示,並針對以下進行優化:
對於任何熟悉德語複合名詞的人來說,別擔心,溢出檢測也包含在內。
所有幫助人工智慧產生更好翻譯的事物,也同樣幫助人類翻譯者。
18ways 為翻譯者提供與我們的 AI 代理使用的相同上下文感知環境。
翻譯者直接在出現文本的用戶界面上進行審核,而不是編輯 JSON 文件。
這大幅提升了翻譯的準確性和工作流程的效率。
國際化不需要另一層翻譯鍵、字串檔案和管道粘合劑。
現代應用程序已經具備我們需要的結構、上下文和運行時信息,以便更好地完成這項工作。
下一代的 i18n 應該為伺服器渲染的應用程式、動態內容、AI 原生工作流程以及人類翻譯者並肩工作而構建。
這就是18ways所採取的方向。
18ways 部落格
一種原生於 AI 的方式在 Next.js 中進行國際化 (i18n),而不會破壞 SEO。
國際化(通常簡稱為 i18n)、本地化(l10n)以及 多語言支持 都描述了相同的概念:調整您的產品,使人們能夠使用他們自己的語言。
每個企業最終都會意識到他們需要支持多種語言。這時,產品團隊就像一位技師一樣靠在椅子上,吸了一口氣,然後說:“我們在談多少頁面?至少需要四個衝刺。”

我們實現 i18n 的基本方式在 20 年來沒有改變。大多數 i18n 的「最佳實踐」是在現代網絡架構之前形成的,之後的一切都只是建立在這些基礎之上。
I18n 是現代網頁開發中唯一仍然涉及導出文件並將其發送給某人的部分。如果不再通過電子郵件發送,而是通過 API 上傳,則被視為現代化的設置。
在一個 CI 管道和部署以分鐘而非天數計算的世界裡,我們應該感到幸運,因為我們不必傳真任何東西。
現代網頁開發的進展非常迅速。
我們有:
然而,國際化工作流程仍然讓人感覺屬於不同的時代。
即使是相對較小的應用程序,也會迅速面臨以下挑戰:
開發者並不是一開始就想要建立這樣的系統。他們在不熟悉不同語言如何完全不同地結構句子的情況下,常常會被常見的國際化障礙絆倒……並且不情願地接受20年前設定的現狀。
隨著時間的推移,國際化成為堆疊中最複雜的部分之一。
考慮一個簡單的用戶介面:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>這很容易理解。這很簡單。
在某個時刻,我們決定將其國際化。因此,我們將文本提取到翻譯文件中:
{
"mainPage": {
"greeting": "Hello world",
"cta": "<0>Click here</0> to view your <1>{{description}}</1>"
}
}我們在代碼中引用了這個:
<h1>{t('mainPage.greeting')}</h1>
<p>
<Trans key="mainPage.cta">
<a href="#/">Click here</a> to view your <b>{{ description: serverResponse.productDescription }}</b>
</Trans>
</p>但是,等等,我們的代碼和翻譯文件中現在都有英文文本?是的。不同的 i18n 庫對其進行了不同的處理,但試圖將部分格式化的文本提取到可讀的 JSON 文件中進行翻譯是一場失敗的戰鬥。
現代的用戶界面是結構化的,但翻譯系統是建立在平面字符串的基礎上。
一旦標記、變數和動態內容進入畫面,抽象就開始洩漏。
當內容不是靜態時,事情變得更加困難。
再舉這個例子:
<b>{serverResponse.productDescription}</b>那個字串來自一個API。我們如何將其轉換為翻譯鍵?
劇透:你不需要。現在你的後端也需要支持國際化。
您的後端現在必須管理:
翻譯者突然也需要訪問後端系統。
當用戶生成的內容進入畫面時,問題只會變得更加嚴重。
評論。留言。市場列表。論壇。
傳統的 i18n 流程假設開發者控制所有文本。然而,這種情況越來越不成立。
像亞馬遜這樣的公司在2026年開始嘗試翻譯用戶評論,這一事實充分說明了i18n生態系統發展的緩慢。
甚至確定用戶想要哪種語言也出乎意料地複雜。
瀏覽器通過 Accept-Language 標頭發送語言偏好:
Accept-Language: en-GB,en;q=0.9,fr;q=0.8這告訴伺服器:
在實踐中,正確實施這一點涉及:
en, en-GB, en-US)許多框架將大部分邏輯留給開發者處理。
即使是基本的區域檢測,通常也會變成自定義應用程式代碼。
翻譯基礎設施只是問題的一半。
用戶仍然需要一種方式來更改語言。
大多數 i18n 庫提供翻譯層,但將問題的其餘部分留給開發者:
hreflang 標籤用於 SEO這些細節聽起來微不足道,但它們很快就會變成大量的應用程式架構,尤其是如果你對 i18n 的所有細節不熟悉的話。大多數公司和開發者都不熟悉。
鑑於這些複雜性,一些團隊轉向自動網站翻譯工具。這些平台承諾能以最小的努力自動翻譯您的網站。
幾家公司正在構建這個想法的越來越複雜的版本。不幸的是,它們引入了一組不同的問題:
結果通常是一個在技術上支持多種語言的網站,但提供的體驗明顯較差,並且對開發人員來說是一個黑箱。
我們從一件美麗而簡單的事情開始:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>最後得到了翻譯鍵、JSON 字典、破碎的管道、分離的後端和前端本地化層,以及外部翻譯工具。
現代的網頁應用程式是極其複雜的系統。然而,i18n 工具卻期望使用為不同時代設計的工作流程,就像一輛需要手搖啟動的法拉利。
如果國際化看起來更像這樣呢?
<h1><T>Hello world!</T></h1>
<p>
<T>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</T>
</p>沒有翻譯鍵。
沒有 JSON 字典。
沒有手動管道。
只是文字。
這個想法是18ways的基礎。
18ways 將翻譯視為一個優化的運行時問題。提取翻譯鍵和管理翻譯文件是機器的問題,而不是人類的問題。
開發者只需標記他們想要翻譯的文本。
幕後,18ways:
一切仍然保持SSR友好和SEO安全。
傳統的 i18n 系統失去了上下文。
翻譯者可能會看到類似的內容:
home但這意味著什麼呢?
在德語中,這些意思需要完全不同的單詞:
Haus - 一棟房子首頁 - 首頁開始 - 導航標籤返回開頭 - 返回到開始如果你必須將「家」翻譯成德語,你更希望看到什麼?一個孤立的字符串,還是它實際出現的頁面?

僅僅查看孤立字串的翻譯系統在這些區別上會遇到困難。
18ways 在實際 UI 的上下文中分析翻譯。
我們的後端代理會檢查翻譯在實際頁面上的顯示,並針對以下進行優化:
對於任何熟悉德語複合名詞的人來說,別擔心,溢出檢測也包含在內。
所有幫助人工智慧產生更好翻譯的事物,也同樣幫助人類翻譯者。
18ways 為翻譯者提供與我們的 AI 代理使用的相同上下文感知環境。
翻譯者直接在出現文本的用戶界面上進行審核,而不是編輯 JSON 文件。
這大幅提升了翻譯的準確性和工作流程的效率。
國際化不需要另一層翻譯鍵、字串檔案和管道粘合劑。
現代應用程序已經具備我們需要的結構、上下文和運行時信息,以便更好地完成這項工作。
下一代的 i18n 應該為伺服器渲染的應用程式、動態內容、AI 原生工作流程以及人類翻譯者並肩工作而構建。
這就是18ways所採取的方向。
18ways 部落格
一種原生於 AI 的方式在 Next.js 中進行國際化 (i18n),而不會破壞 SEO。
國際化(通常簡稱為 i18n)、本地化(l10n)以及 多語言支持 都描述了相同的概念:調整您的產品,使人們能夠使用他們自己的語言。
每個企業最終都會意識到他們需要支持多種語言。這時,產品團隊就像一位技師一樣靠在椅子上,吸了一口氣,然後說:“我們在談多少頁面?至少需要四個衝刺。”

我們實現 i18n 的基本方式在 20 年來沒有改變。大多數 i18n 的「最佳實踐」是在現代網絡架構之前形成的,之後的一切都只是建立在這些基礎之上。
I18n 是現代網頁開發中唯一仍然涉及導出文件並將其發送給某人的部分。如果不再通過電子郵件發送,而是通過 API 上傳,則被視為現代化的設置。
在一個 CI 管道和部署以分鐘而非天數計算的世界裡,我們應該感到幸運,因為我們不必傳真任何東西。
現代網頁開發的進展非常迅速。
我們有:
然而,國際化工作流程仍然讓人感覺屬於不同的時代。
即使是相對較小的應用程序,也會迅速面臨以下挑戰:
開發者並不是一開始就想要建立這樣的系統。他們在不熟悉不同語言如何完全不同地結構句子的情況下,常常會被常見的國際化障礙絆倒……並且不情願地接受20年前設定的現狀。
隨著時間的推移,國際化成為堆疊中最複雜的部分之一。
考慮一個簡單的用戶介面:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>這很容易理解。這很簡單。
在某個時刻,我們決定將其國際化。因此,我們將文本提取到翻譯文件中:
{
"mainPage": {
"greeting": "Hello world",
"cta": "<0>Click here</0> to view your <1>{{description}}</1>"
}
}我們在代碼中引用了這個:
<h1>{t('mainPage.greeting')}</h1>
<p>
<Trans key="mainPage.cta">
<a href="#/">Click here</a> to view your <b>{{ description: serverResponse.productDescription }}</b>
</Trans>
</p>但是,等等,我們的代碼和翻譯文件中現在都有英文文本?是的。不同的 i18n 庫對其進行了不同的處理,但試圖將部分格式化的文本提取到可讀的 JSON 文件中進行翻譯是一場失敗的戰鬥。
現代的用戶界面是結構化的,但翻譯系統是建立在平面字符串的基礎上。
一旦標記、變數和動態內容進入畫面,抽象就開始洩漏。
當內容不是靜態時,事情變得更加困難。
再舉這個例子:
<b>{serverResponse.productDescription}</b>那個字串來自一個API。我們如何將其轉換為翻譯鍵?
劇透:你不需要。現在你的後端也需要支持國際化。
您的後端現在必須管理:
翻譯者突然也需要訪問後端系統。
當用戶生成的內容進入畫面時,問題只會變得更加嚴重。
評論。留言。市場列表。論壇。
傳統的 i18n 流程假設開發者控制所有文本。然而,這種情況越來越不成立。
像亞馬遜這樣的公司在2026年開始嘗試翻譯用戶評論,這一事實充分說明了i18n生態系統發展的緩慢。
甚至確定用戶想要哪種語言也出乎意料地複雜。
瀏覽器通過 Accept-Language 標頭發送語言偏好:
Accept-Language: en-GB,en;q=0.9,fr;q=0.8這告訴伺服器:
在實踐中,正確實施這一點涉及:
en, en-GB, en-US)許多框架將大部分邏輯留給開發者處理。
即使是基本的區域檢測,通常也會變成自定義應用程式代碼。
翻譯基礎設施只是問題的一半。
用戶仍然需要一種方式來更改語言。
大多數 i18n 庫提供翻譯層,但將問題的其餘部分留給開發者:
hreflang 標籤用於 SEO這些細節聽起來微不足道,但它們很快就會變成大量的應用程式架構,尤其是如果你對 i18n 的所有細節不熟悉的話。大多數公司和開發者都不熟悉。
鑑於這些複雜性,一些團隊轉向自動網站翻譯工具。這些平台承諾能以最小的努力自動翻譯您的網站。
幾家公司正在構建這個想法的越來越複雜的版本。不幸的是,它們引入了一組不同的問題:
結果通常是一個在技術上支持多種語言的網站,但提供的體驗明顯較差,並且對開發人員來說是一個黑箱。
我們從一件美麗而簡單的事情開始:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>最後得到了翻譯鍵、JSON 字典、破碎的管道、分離的後端和前端本地化層,以及外部翻譯工具。
現代的網頁應用程式是極其複雜的系統。然而,i18n 工具卻期望使用為不同時代設計的工作流程,就像一輛需要手搖啟動的法拉利。
如果國際化看起來更像這樣呢?
<h1><T>Hello world!</T></h1>
<p>
<T>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</T>
</p>沒有翻譯鍵。
沒有 JSON 字典。
沒有手動管道。
只是文字。
這個想法是18ways的基礎。
18ways 將翻譯視為一個優化的運行時問題。提取翻譯鍵和管理翻譯文件是機器的問題,而不是人類的問題。
開發者只需標記他們想要翻譯的文本。
幕後,18ways:
一切仍然保持SSR友好和SEO安全。
傳統的 i18n 系統失去了上下文。
翻譯者可能會看到類似的內容:
home但這意味著什麼呢?
在德語中,這些意思需要完全不同的單詞:
Haus - 一棟房子首頁 - 首頁開始 - 導航標籤返回開頭 - 返回到開始如果你必須將「家」翻譯成德語,你更希望看到什麼?一個孤立的字符串,還是它實際出現的頁面?

僅僅查看孤立字串的翻譯系統在這些區別上會遇到困難。
18ways 在實際 UI 的上下文中分析翻譯。
我們的後端代理會檢查翻譯在實際頁面上的顯示,並針對以下進行優化:
對於任何熟悉德語複合名詞的人來說,別擔心,溢出檢測也包含在內。
所有幫助人工智慧產生更好翻譯的事物,也同樣幫助人類翻譯者。
18ways 為翻譯者提供與我們的 AI 代理使用的相同上下文感知環境。
翻譯者直接在出現文本的用戶界面上進行審核,而不是編輯 JSON 文件。
這大幅提升了翻譯的準確性和工作流程的效率。
國際化不需要另一層翻譯鍵、字串檔案和管道粘合劑。
現代應用程序已經具備我們需要的結構、上下文和運行時信息,以便更好地完成這項工作。
下一代的 i18n 應該為伺服器渲染的應用程式、動態內容、AI 原生工作流程以及人類翻譯者並肩工作而構建。
這就是18ways所採取的方向。
18ways 部落格
一種原生於 AI 的方式在 Next.js 中進行國際化 (i18n),而不會破壞 SEO。
國際化(通常簡稱為 i18n)、本地化(l10n)以及 多語言支持 都描述了相同的概念:調整您的產品,使人們能夠使用他們自己的語言。
每個企業最終都會意識到他們需要支持多種語言。這時,產品團隊就像一位技師一樣靠在椅子上,吸了一口氣,然後說:“我們在談多少頁面?至少需要四個衝刺。”

我們實現 i18n 的基本方式在 20 年來沒有改變。大多數 i18n 的「最佳實踐」是在現代網絡架構之前形成的,之後的一切都只是建立在這些基礎之上。
I18n 是現代網頁開發中唯一仍然涉及導出文件並將其發送給某人的部分。如果不再通過電子郵件發送,而是通過 API 上傳,則被視為現代化的設置。
在一個 CI 管道和部署以分鐘而非天數計算的世界裡,我們應該感到幸運,因為我們不必傳真任何東西。
現代網頁開發的進展非常迅速。
我們有:
然而,國際化工作流程仍然讓人感覺屬於不同的時代。
即使是相對較小的應用程序,也會迅速面臨以下挑戰:
開發者並不是一開始就想要建立這樣的系統。他們在不熟悉不同語言如何完全不同地結構句子的情況下,常常會被常見的國際化障礙絆倒……並且不情願地接受20年前設定的現狀。
隨著時間的推移,國際化成為堆疊中最複雜的部分之一。
考慮一個簡單的用戶介面:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>這很容易理解。這很簡單。
在某個時刻,我們決定將其國際化。因此,我們將文本提取到翻譯文件中:
{
"mainPage": {
"greeting": "Hello world",
"cta": "<0>Click here</0> to view your <1>{{description}}</1>"
}
}我們在代碼中引用了這個:
<h1>{t('mainPage.greeting')}</h1>
<p>
<Trans key="mainPage.cta">
<a href="#/">Click here</a> to view your <b>{{ description: serverResponse.productDescription }}</b>
</Trans>
</p>但是,等等,我們的代碼和翻譯文件中現在都有英文文本?是的。不同的 i18n 庫對其進行了不同的處理,但試圖將部分格式化的文本提取到可讀的 JSON 文件中進行翻譯是一場失敗的戰鬥。
現代的用戶界面是結構化的,但翻譯系統是建立在平面字符串的基礎上。
一旦標記、變數和動態內容進入畫面,抽象就開始洩漏。
當內容不是靜態時,事情變得更加困難。
再舉這個例子:
<b>{serverResponse.productDescription}</b>那個字串來自一個API。我們如何將其轉換為翻譯鍵?
劇透:你不需要。現在你的後端也需要支持國際化。
您的後端現在必須管理:
翻譯者突然也需要訪問後端系統。
當用戶生成的內容進入畫面時,問題只會變得更加嚴重。
評論。留言。市場列表。論壇。
傳統的 i18n 流程假設開發者控制所有文本。然而,這種情況越來越不成立。
像亞馬遜這樣的公司在2026年開始嘗試翻譯用戶評論,這一事實充分說明了i18n生態系統發展的緩慢。
甚至確定用戶想要哪種語言也出乎意料地複雜。
瀏覽器通過 Accept-Language 標頭發送語言偏好:
Accept-Language: en-GB,en;q=0.9,fr;q=0.8這告訴伺服器:
在實踐中,正確實施這一點涉及:
en, en-GB, en-US)許多框架將大部分邏輯留給開發者處理。
即使是基本的區域檢測,通常也會變成自定義應用程式代碼。
翻譯基礎設施只是問題的一半。
用戶仍然需要一種方式來更改語言。
大多數 i18n 庫提供翻譯層,但將問題的其餘部分留給開發者:
hreflang 標籤用於 SEO這些細節聽起來微不足道,但它們很快就會變成大量的應用程式架構,尤其是如果你對 i18n 的所有細節不熟悉的話。大多數公司和開發者都不熟悉。
鑑於這些複雜性,一些團隊轉向自動網站翻譯工具。這些平台承諾能以最小的努力自動翻譯您的網站。
幾家公司正在構建這個想法的越來越複雜的版本。不幸的是,它們引入了一組不同的問題:
結果通常是一個在技術上支持多種語言的網站,但提供的體驗明顯較差,並且對開發人員來說是一個黑箱。
我們從一件美麗而簡單的事情開始:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>最後得到了翻譯鍵、JSON 字典、破碎的管道、分離的後端和前端本地化層,以及外部翻譯工具。
現代的網頁應用程式是極其複雜的系統。然而,i18n 工具卻期望使用為不同時代設計的工作流程,就像一輛需要手搖啟動的法拉利。
如果國際化看起來更像這樣呢?
<h1><T>Hello world!</T></h1>
<p>
<T>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</T>
</p>沒有翻譯鍵。
沒有 JSON 字典。
沒有手動管道。
只是文字。
這個想法是18ways的基礎。
18ways 將翻譯視為一個優化的運行時問題。提取翻譯鍵和管理翻譯文件是機器的問題,而不是人類的問題。
開發者只需標記他們想要翻譯的文本。
幕後,18ways:
一切仍然保持SSR友好和SEO安全。
傳統的 i18n 系統失去了上下文。
翻譯者可能會看到類似的內容:
home但這意味著什麼呢?
在德語中,這些意思需要完全不同的單詞:
Haus - 一棟房子首頁 - 首頁開始 - 導航標籤返回開頭 - 返回到開始如果你必須將「家」翻譯成德語,你更希望看到什麼?一個孤立的字符串,還是它實際出現的頁面?

僅僅查看孤立字串的翻譯系統在這些區別上會遇到困難。
18ways 在實際 UI 的上下文中分析翻譯。
我們的後端代理會檢查翻譯在實際頁面上的顯示,並針對以下進行優化:
對於任何熟悉德語複合名詞的人來說,別擔心,溢出檢測也包含在內。
所有幫助人工智慧產生更好翻譯的事物,也同樣幫助人類翻譯者。
18ways 為翻譯者提供與我們的 AI 代理使用的相同上下文感知環境。
翻譯者直接在出現文本的用戶界面上進行審核,而不是編輯 JSON 文件。
這大幅提升了翻譯的準確性和工作流程的效率。
國際化不需要另一層翻譯鍵、字串檔案和管道粘合劑。
現代應用程序已經具備我們需要的結構、上下文和運行時信息,以便更好地完成這項工作。
下一代的 i18n 應該為伺服器渲染的應用程式、動態內容、AI 原生工作流程以及人類翻譯者並肩工作而構建。
這就是18ways所採取的方向。
18ways 部落格
一種原生於 AI 的方式在 Next.js 中進行國際化 (i18n),而不會破壞 SEO。
國際化(通常簡稱為 i18n)、本地化(l10n)以及 多語言支持 都描述了相同的概念:調整您的產品,使人們能夠使用他們自己的語言。
每個企業最終都會意識到他們需要支持多種語言。這時,產品團隊就像一位技師一樣靠在椅子上,吸了一口氣,然後說:“我們在談多少頁面?至少需要四個衝刺。”

我們實現 i18n 的基本方式在 20 年來沒有改變。大多數 i18n 的「最佳實踐」是在現代網絡架構之前形成的,之後的一切都只是建立在這些基礎之上。
I18n 是現代網頁開發中唯一仍然涉及導出文件並將其發送給某人的部分。如果不再通過電子郵件發送,而是通過 API 上傳,則被視為現代化的設置。
在一個 CI 管道和部署以分鐘而非天數計算的世界裡,我們應該感到幸運,因為我們不必傳真任何東西。
現代網頁開發的進展非常迅速。
我們有:
然而,國際化工作流程仍然讓人感覺屬於不同的時代。
即使是相對較小的應用程序,也會迅速面臨以下挑戰:
開發者並不是一開始就想要建立這樣的系統。他們在不熟悉不同語言如何完全不同地結構句子的情況下,常常會被常見的國際化障礙絆倒……並且不情願地接受20年前設定的現狀。
隨著時間的推移,國際化成為堆疊中最複雜的部分之一。
考慮一個簡單的用戶介面:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>這很容易理解。這很簡單。
在某個時刻,我們決定將其國際化。因此,我們將文本提取到翻譯文件中:
{
"mainPage": {
"greeting": "Hello world",
"cta": "<0>Click here</0> to view your <1>{{description}}</1>"
}
}我們在代碼中引用了這個:
<h1>{t('mainPage.greeting')}</h1>
<p>
<Trans key="mainPage.cta">
<a href="#/">Click here</a> to view your <b>{{ description: serverResponse.productDescription }}</b>
</Trans>
</p>但是,等等,我們的代碼和翻譯文件中現在都有英文文本?是的。不同的 i18n 庫對其進行了不同的處理,但試圖將部分格式化的文本提取到可讀的 JSON 文件中進行翻譯是一場失敗的戰鬥。
現代的用戶界面是結構化的,但翻譯系統是建立在平面字符串的基礎上。
一旦標記、變數和動態內容進入畫面,抽象就開始洩漏。
當內容不是靜態時,事情變得更加困難。
再舉這個例子:
<b>{serverResponse.productDescription}</b>那個字串來自一個API。我們如何將其轉換為翻譯鍵?
劇透:你不需要。現在你的後端也需要支持國際化。
您的後端現在必須管理:
翻譯者突然也需要訪問後端系統。
當用戶生成的內容進入畫面時,問題只會變得更加嚴重。
評論。留言。市場列表。論壇。
傳統的 i18n 流程假設開發者控制所有文本。然而,這種情況越來越不成立。
像亞馬遜這樣的公司在2026年開始嘗試翻譯用戶評論,這一事實充分說明了i18n生態系統發展的緩慢。
甚至確定用戶想要哪種語言也出乎意料地複雜。
瀏覽器通過 Accept-Language 標頭發送語言偏好:
Accept-Language: en-GB,en;q=0.9,fr;q=0.8這告訴伺服器:
在實踐中,正確實施這一點涉及:
en, en-GB, en-US)許多框架將大部分邏輯留給開發者處理。
即使是基本的區域檢測,通常也會變成自定義應用程式代碼。
翻譯基礎設施只是問題的一半。
用戶仍然需要一種方式來更改語言。
大多數 i18n 庫提供翻譯層,但將問題的其餘部分留給開發者:
hreflang 標籤用於 SEO這些細節聽起來微不足道,但它們很快就會變成大量的應用程式架構,尤其是如果你對 i18n 的所有細節不熟悉的話。大多數公司和開發者都不熟悉。
鑑於這些複雜性,一些團隊轉向自動網站翻譯工具。這些平台承諾能以最小的努力自動翻譯您的網站。
幾家公司正在構建這個想法的越來越複雜的版本。不幸的是,它們引入了一組不同的問題:
結果通常是一個在技術上支持多種語言的網站,但提供的體驗明顯較差,並且對開發人員來說是一個黑箱。
我們從一件美麗而簡單的事情開始:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>最後得到了翻譯鍵、JSON 字典、破碎的管道、分離的後端和前端本地化層,以及外部翻譯工具。
現代的網頁應用程式是極其複雜的系統。然而,i18n 工具卻期望使用為不同時代設計的工作流程,就像一輛需要手搖啟動的法拉利。
如果國際化看起來更像這樣呢?
<h1><T>Hello world!</T></h1>
<p>
<T>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</T>
</p>沒有翻譯鍵。
沒有 JSON 字典。
沒有手動管道。
只是文字。
這個想法是18ways的基礎。
18ways 將翻譯視為一個優化的運行時問題。提取翻譯鍵和管理翻譯文件是機器的問題,而不是人類的問題。
開發者只需標記他們想要翻譯的文本。
幕後,18ways:
一切仍然保持SSR友好和SEO安全。
傳統的 i18n 系統失去了上下文。
翻譯者可能會看到類似的內容:
home但這意味著什麼呢?
在德語中,這些意思需要完全不同的單詞:
Haus - 一棟房子首頁 - 首頁開始 - 導航標籤返回開頭 - 返回到開始如果你必須將「家」翻譯成德語,你更希望看到什麼?一個孤立的字符串,還是它實際出現的頁面?

僅僅查看孤立字串的翻譯系統在這些區別上會遇到困難。
18ways 在實際 UI 的上下文中分析翻譯。
我們的後端代理會檢查翻譯在實際頁面上的顯示,並針對以下進行優化:
對於任何熟悉德語複合名詞的人來說,別擔心,溢出檢測也包含在內。
所有幫助人工智慧產生更好翻譯的事物,也同樣幫助人類翻譯者。
18ways 為翻譯者提供與我們的 AI 代理使用的相同上下文感知環境。
翻譯者直接在出現文本的用戶界面上進行審核,而不是編輯 JSON 文件。
這大幅提升了翻譯的準確性和工作流程的效率。
國際化不需要另一層翻譯鍵、字串檔案和管道粘合劑。
現代應用程序已經具備我們需要的結構、上下文和運行時信息,以便更好地完成這項工作。
下一代的 i18n 應該為伺服器渲染的應用程式、動態內容、AI 原生工作流程以及人類翻譯者並肩工作而構建。
這就是18ways所採取的方向。