我正在用其他语言生成我的应用程序的各种版本。我正在使用 AOT(提前)编译,所以我最终得到了一个结构如下的静态可部署站点:
dist -
index.html -- entry file for the default (English language) app
-fr
index.html -- entry file for French language version
-de
index.html -- entry file for German language version
我目前可以使用下拉菜单在主要语言网站之间切换,用户可以在其中选择他们的首选语言,然后我使用纯 JavaScript 加载所需站点的主条目文件,如下所示:
const baseUrl = window.location.origin;
window.location.href = baseUrl + '/' + requestedLanguage + '/index.html'; // e.g. requestedLanguage = 'fr'
这是可行的,因为请求实际文件似乎index.html
意味着 Angular 不会将请求解释href
为 Angular 路由。
不过,我想要发生的是,当用户输入路径中已经包含语言版本的 URL 时,我希望提供该语言版本。我还希望保留 URL 路径,以便 Angular 路由为请求的 URL 加载适当的组件。
例如:
用户输入
myDomain.com/fr/myPage
子目录下的应用程序
/fr/
被加载,该应用程序中的 Angular 路由加载相关组件MyPage
目前,如果我输入 URL myDomain.com/fr/myPage
,Angular 路由会尝试将所需的子文件夹解释fr
为不存在的路由,因此出现以下错误:
Error: Cannot match any routes. URL Segment: 'fr/instruments'
如何加载所需的应用程序和正确的组件?必须有一种方法可以让 Angular 识别fr
URL 中的 引用不同的应用程序。也许我缺少构建配置或其他东西?package.json
这是我构建法语版本的脚本:
"build:fr": "ng build --aot --output-path=dist/fr --base-href /fr/ --i18nFile=src/locale/messages.fr.xlf --i18nFormat=xlf --locale=fr",