This commit is contained in:
@@ -144,24 +144,32 @@ export class ExplainUseCase {
|
||||
}
|
||||
|
||||
private languageLabel(language: AudioLanguage) {
|
||||
return language === 'en-US' ? '英文' : '中文'
|
||||
if (language === 'en-US') return '英文'
|
||||
if (language === 'yue-HK') return '粤语'
|
||||
return '中文'
|
||||
}
|
||||
|
||||
private applyLanguageVariant(exhibit: MuseumExhibit, language: AudioLanguage): MuseumExhibit {
|
||||
const variant = exhibit.audioVariants?.[language]
|
||||
const mandarinText = exhibit.audioVariants?.['zh-CN']?.text
|
||||
|| exhibit.guideText
|
||||
|| exhibit.description
|
||||
const supportedLanguages = exhibit.supportedLanguages?.length
|
||||
? exhibit.supportedLanguages
|
||||
: exhibit.audioVariants ? Object.keys(exhibit.audioVariants) : [language]
|
||||
|
||||
if (!variant) {
|
||||
const label = this.languageLabel(language)
|
||||
const guideText = language === 'yue-HK'
|
||||
? mandarinText || '当前讲解词暂未配置。'
|
||||
: `${label}讲解词暂未配置。`
|
||||
return {
|
||||
...exhibit,
|
||||
guideText: `${label}讲解词暂未配置。`,
|
||||
guideText,
|
||||
audioUrl: undefined,
|
||||
audioDuration: undefined,
|
||||
audioLanguage: language,
|
||||
audioHasText: false,
|
||||
audioHasText: language === 'yue-HK' && Boolean(mandarinText),
|
||||
audioAvailable: false,
|
||||
audioStatus: 'MISSING',
|
||||
audioUnavailableReason: `当前讲解暂无${label}音频`,
|
||||
@@ -172,11 +180,13 @@ export class ExplainUseCase {
|
||||
return {
|
||||
...exhibit,
|
||||
guideTitle: variant.title || exhibit.guideTitle,
|
||||
guideText: variant.text || `${this.languageLabel(language)}讲解词暂未配置。`,
|
||||
guideText: language === 'yue-HK'
|
||||
? mandarinText || '当前讲解词暂未配置。'
|
||||
: variant.text || `${this.languageLabel(language)}讲解词暂未配置。`,
|
||||
audioUrl: variant.audioUrl,
|
||||
audioDuration: variant.audioDuration,
|
||||
audioLanguage: language,
|
||||
audioHasText: variant.hasText === true,
|
||||
audioHasText: language === 'yue-HK' ? Boolean(mandarinText) : variant.hasText === true,
|
||||
audioAvailable: variant.available === true && Boolean(variant.audioUrl),
|
||||
audioStatus: variant.available && variant.audioUrl ? 'READY' : 'MISSING',
|
||||
audioUnavailableReason: variant.available && variant.audioUrl
|
||||
@@ -413,12 +423,13 @@ export class ExplainUseCase {
|
||||
async loadExplainDetailText(exhibit: MuseumExhibit): Promise<ExplainTextSelection> {
|
||||
const targetType = exhibit.playTargetType || 'ITEM'
|
||||
const targetId = exhibit.playTargetId || exhibit.id
|
||||
const lang = (exhibit.audioLanguage as AudioLanguage) || (dataSourceConfig.audioLanguage as AudioLanguage)
|
||||
|
||||
try {
|
||||
const textInfo = await this.audioPlayInfo.getTextInfo({
|
||||
targetType,
|
||||
targetId,
|
||||
lang: (exhibit.audioLanguage as AudioLanguage) || (dataSourceConfig.audioLanguage as AudioLanguage)
|
||||
lang
|
||||
})
|
||||
const nextExhibit = this.applyTextInfo(exhibit, textInfo)
|
||||
|
||||
@@ -436,7 +447,7 @@ export class ExplainUseCase {
|
||||
available: false,
|
||||
targetType,
|
||||
targetId,
|
||||
lang: dataSourceConfig.audioLanguage as AudioLanguage,
|
||||
lang,
|
||||
reason: 'SERVICE_ERROR'
|
||||
},
|
||||
available: false,
|
||||
|
||||
Reference in New Issue
Block a user