Angular: 如何从 APP_INITIALIZER 中的路径语言?
Angular: how to language from path in APP_INITIALIZER?
所以,我们正在使用 APP_INITIALIZER 在应用程序加载时加载一些设置(通过 http)....但是,问题是这些设置取决于语言路径
所以
我的域名。com/en
得到不同的设置
我的域名。com/it
我们如何(安全地)确定应用路径中的语言?
这就是我们现在的逻辑
site.service.ts:
load(): Promise<SiteConfiguration> {
const promise = this.getSiteSettings().toPromise();
promise.then(config => {
this.config = config;
return config;
}
return promise;
}
getSiteSettings(): Observable<any> {
// language logic supposed to be
const langId = 'en';
return this.http.get(`${environment.apiPath}/${langId}.siteconfiguration.json`)
.map(res)
.catch((error: any) => Observable.throw(error || 'Server error'));
}
假设语言始终是路径中的第一个参数
假设您在后端使用 express/nodejs
在后端服务器上,从您的快速请求中识别语言 ID
let languageId = req.path.split('/')[1];
在后端服务器上,提供语言 URL
renderModuleFactory(AppServerModuleNgFactory, {
// Our index.html
document: template,
url: url,
extraProviders: [
provideModuleMap(LAZY_MODULE_MAP),
{
provide: 'languageId',
useValue: languageId
}
]
修改您的初始化服务以注入语言
constructor(private http: HttpClient, @Inject(PLATFORM_ID) private
platformId: Object, @Optional() @Inject('languageId') protected languageId: string)
{
}
使用注入值
getSiteSettings(): Observable<any> {
const langId = isPlatformBrowser(this.platformId)? window.location.pathname.split('/')[1] : this.languageId;
return this.http.get(`${environment.apiPath}/${langId}.siteconfiguration.json`)
.map(res)
.catch((error: any) => Observable.throw(error || 'Server error'));
}
所以,我们正在使用 APP_INITIALIZER 在应用程序加载时加载一些设置(通过 http)....但是,问题是这些设置取决于语言路径
所以 我的域名。com/en 得到不同的设置 我的域名。com/it
我们如何(安全地)确定应用路径中的语言?
这就是我们现在的逻辑
site.service.ts:
load(): Promise<SiteConfiguration> {
const promise = this.getSiteSettings().toPromise();
promise.then(config => {
this.config = config;
return config;
}
return promise;
}
getSiteSettings(): Observable<any> {
// language logic supposed to be
const langId = 'en';
return this.http.get(`${environment.apiPath}/${langId}.siteconfiguration.json`)
.map(res)
.catch((error: any) => Observable.throw(error || 'Server error'));
}
假设语言始终是路径中的第一个参数
假设您在后端使用 express/nodejs
在后端服务器上,从您的快速请求中识别语言 ID
let languageId = req.path.split('/')[1];
在后端服务器上,提供语言 URL
renderModuleFactory(AppServerModuleNgFactory, { // Our index.html document: template, url: url, extraProviders: [ provideModuleMap(LAZY_MODULE_MAP), { provide: 'languageId', useValue: languageId } ]
修改您的初始化服务以注入语言
constructor(private http: HttpClient, @Inject(PLATFORM_ID) private platformId: Object, @Optional() @Inject('languageId') protected languageId: string) { }
使用注入值
getSiteSettings(): Observable<any> { const langId = isPlatformBrowser(this.platformId)? window.location.pathname.split('/')[1] : this.languageId; return this.http.get(`${environment.apiPath}/${langId}.siteconfiguration.json`) .map(res) .catch((error: any) => Observable.throw(error || 'Server error')); }