我正在以其他语言生成各种版本的应用。我正在使用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
的相关组件
目前,如果我输入网址myDomain.com/fr/myPage
,Angular路由会尝试将所需的子文件夹fr
解释为不存在的路由,因此我收到以下错误:
Error: Cannot match any routes. URL Segment: 'fr/instruments'
如何加载所需的应用和正确的组件?必须有一种让Angular能够识别URL中的fr
引用不同应用的方法。也许我错过了构建配置或什么?这是package.json
中用于构建法语版本的脚本:
"build:fr": "ng build --aot --output-path=dist/fr --base-href /fr/ --i18nFile=src/locale/messages.fr.xlf --i18nFormat=xlf --locale=fr",
答案 0 :(得分:2)
只使用Components而不是使用不同的单独应用,并使用下面的示例 >
for (i = 0; i < MAX_LIMIT; i++) begin: a
wire [i+1:0] clock_slow;
end
然后您可以通过URL直接访问页面
答案 1 :(得分:1)
对英语,法语和丹麦语的不同路径使用角度router
概念。
然后使用基于语言的路径。
答案 2 :(得分:0)
我能够通过为我的.NET后端配置管道来加载应用程序的不同语言版本,以便为每个不同的语言应用程序加载Angular静态索引页面(在此处称为“SPA”)码)。它的工作原理是检查请求网址中是否有第一个子文件夹的'index.html'页面(例如'/ fr /','/ de /'),如果它存在,它会加载该页面:
public class Startup
{
public void Configuration()
{
app.Use((context, next) =>
{
if (!context.Request.Path.HasValue)
return next();
IFileInfo fi;
string spaIndex = "index.html";
Uri uri = new Uri(context.Request.Uri.ToString());
var segs = uri.Segments;
var folder = segs.Length > 1 ? String.Format("/{0}", segs[1]) : "/";
if (!physicalFileSystem.TryGetFileInfo(context.Request.Path.Value, out fi)) {
// check if this is a request for a sub-application, e.g an alternative language version
// if so, load the app
if (physicalFileSystem.TryGetFileInfo(String.Format("{0}{1}", folder, spaIndex), out fi))
{
context.Request.Path = new PathString(String.Format("{0}{1}", folder, spaIndex));
}
}
return next();
});
}
}
然后,URL的其余部分(语言子文件夹之后的部分)被解释为已加载的应用程序内的路径(例如,法语应用程序)。这意味着为应用程序加载了正确的组件(我不完全确定这部分是如何工作的 - 可能路径的其余部分落到.NET请求管道的不同部分并传递给Angular应用程序? )