J'essaie de déployer une application Angular 7 qui utilise ngx-translate et des fichiers de langue traduits dans le dossier / dist / assets. J'ai spécifié le href de base correct dans la construction. Après le déploiement, je vois que tout se charge, sauf le fichier de langues qui renvoie un code d'erreur 404 (introuvable).
J'ai essayé de modifier le fichier angular.json de différentes manières. J'ai essayé de changer le TranslateHttpLoader. Rien ne semble fonctionner. Je peux voir le dossier i18n avec tous les fichiers de langue dans le dossier / dist. Cependant, il n'est pas référencé.
dans app.module.ts
"assets": [ "src/favicon.ico", "src/assets" ],
dans angular.json
export function HttpLoaderFactory(httpClient: HttpClient) { return new TranslateHttpLoader(httpClient, './assets/i18n/', '.json'); }
Mais je finis par avoir cette erreur dans le navigateur:
/assets/i18n/en.json 404 introuvable
Toute aide serait appréciée!
5 Réponses :
Avez-vous importé dans l'AppModule?
export function HttpLoaderFactory(httpClient: HttpClient) { return new TranslateHttpLoader(httpClient, './assets/i18n/', '.json'); } @NgModule({ imports: [ BrowserModule, HttpClientModule, TranslateModule.forRoot({ loader: { provide: TranslateLoader, useFactory: HttpLoaderFactory, deps: [HttpClient] } }) ], bootstrap: [AppComponent] }) export class AppModule { }
Merci pour la réponse. Oui, j'avais importé dans l'AppModule. Tout comme vous l'avez montré dans votre extrait. Ne fonctionne toujours pas.
Assurez-vous que votre dossier de ressources est à ce niveau: / src / assets / Utilisez-vous angular-cli?
Oui, j'utilise Angular-CLI. Quand j'exécute ng build --prod, le dossier dist crée la construction avec le dossier assets dans / dist /
J'ai rencontré le même problème que vous, je crois que c'est lié à cette commande:
ng build --base-href=/stackoverflow/ --prod
Essayez d'utiliser cette commande:
ng build --base-href=/deployed_app_name/ --prod
Par exemple, si le nom de votre application déployée est: stackoverflow
la commande devrait être comme ceci:
ng build --prod
Et ici vous aurez le chemin correct vers vos fichiers json i18n
Voici le chemin que j'ai emprunté pour résoudre un problème similaire:
Sur Angular 9.0.4
, j'ai rencontré le même problème.
Uniquement quand j'avais un préfixe de barre oblique dans le chemin comme le ferait ./assets/i18n/
le problème soit résolu:
export function HttpLoaderFactory(http: HttpClient) { return new TranslateHttpLoader(http, './assets/i18n/'); }
J'ai été confronté au même problème que vous, Dans mon cas, cela a parfaitement fonctionné sur mon serveur IIS local, mais il jette 404 pour le serveur IIS en direct (i18n / en.json non trouvé 404).
J'ai fait le tour, pensant que c'était une erreur de chemin angulaire i18n . En fin de compte, cela se résume à un problème de serveur.
par défaut, le serveur IIS n'autorisera que quelques extensions de fichier de type. Vous devez ajouter manuellement mimeType pour le fichier json (à partir d'un fichier de configuration Web).
<staticContent> <remove fileExtension=".json"/> <mimeMap fileExtension=".json" mimeType="application/json"/> </staticContent>
J'ai ajouté ceci à un fichier de configuration Web (si le fichier n'est pas là, vous devez créez-le dans le dossier racine du site Web).
Bienvenue ...
Cela m'a aidé, et ça marche bien