#android #angular #typescript #compilation #ionic2
#Android #angular #машинопись #Сборник #ionic2
Вопрос:
Ошибка появляется при сборке Android с помощью ionic build android
команды
ngc: Ошибка: обнаружена ошибка статического разрешения значений символов. Ссылка на локальный (не экспортированный) словарь символов. Рассмотрите возможность экспорта символа (позиция 14: 8 в исходном файле .ts), разрешив преобразование СИМВОЛОВ_PROVIDERS
Мой код в файле translation.ts
export const TRANSLATIONS = new OpaqueToken('translations');
// all traslations
const dictionary : any = {
[LANG_EN_NAME]: LANG_EN_TRANS,
[LANG_AR_NAME]: LANG_AR_TRANS,
[LANG_FR_NAME]: LANG_FR_TRANS
};
// providers
export const TRANSLATION_PROVIDERS : any = [
{ provide: TRANSLATIONS, useValue: dictionary},
];
Мой код app.module.ts
import {TRANSLATION_PROVIDERS,TranslatePipe,TranslateService} from './translate';
@NgModule({
declarations: [
MyApp,
],
imports: [
BrowserModule,
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
],
providers: [TRANSLATION_PROVIDERS,TranslateService ]
})
export class AppModule {}
любые предложения по этой проблеме, кстати, когда я использую ionic serve
command, мой проект работает на 100% с transaltion
Комментарии:
1. Можете ли вы создать минимальный репозиторий git?
Ответ №1:
Я нашел обходной путь для этого.
вам не нужно экспортировать объект словаря, просто измените ключи на статические значения.
Это сработало для меня:
// all translations
const dictionary = {
"en": LANG_EN_TRANS,
"ar": LANG_AR_TRANS,
"fr": LANG_FR_TRANS
};
// providers
export const TRANSLATION_PROVIDERS = [
{ provide: TRANSLATIONS, useValue: dictionary },
];
Ответ №2:
Да, именно так, как сказал @welefish в своем ответе, нет необходимости экспортировать объект словаря, вам просто нужно изменить ключи на статическое значение.
PS: — другой метод (публикация в качестве ответа, потому что метод @welefish у меня не работает)
let en = LANG_EN_NAME;
let er = LANG_AR_NAME;
let fr = LANG_FR_NAME;
const dictionary : any = {
en: LANG_EN_TRANS,
er: LANG_AR_TRANS,
fr: LANG_FR_TRANS
};
// providers
export const TRANSLATION_PROVIDERS = [
{ provide: TRANSLATIONS, useValue: dictionary },
];
Ответ №3:
Что ж, делайте то, что говорит компилятор :). Экспортируйте свой словарь:
export const dictionary : any = {
[LANG_EN_NAME]: LANG_EN_TRANS,
[LANG_AR_NAME]: LANG_AR_TRANS,
[LANG_FR_NAME]: LANG_FR_TRANS
};
Комментарии:
1. сначала спасибо за ваш ответ @PierreDuc, появляется ошибка
ngc: Error: Error encountered resolving symbol values statically. Expression form not supported (position 15:5 in the original .ts file), resolving symbol dictionary in D:/Mle/.tmp/app/translate/translations.ts, resolving symbol TRANSLATION_PROVIDERS in D:/Mle/.tmp/app/translate/translations.ts, resolving symbol AppModule in D:/Mle/.tmp/app/app.module.ts, resolving symbol AppModule in D:/Mle/.tmp/app/app.module.ts
2. @OscarBout какая у вас проблема?
3. Точно так же, как @PAncho: я изменил оригинал: scotch.io/tutorials / … к вашему решению и получил ту же ошибку
Ответ №4:
Объявите тип [LANG_EN_NAME]:
export const LANG_EN_NAME : string = 'en';
Сработало для меня.