Skip to content

Commit 07b1b79

Browse files
feat(CSAF2.1): #403 add recommended test 6.2.39.2 - add regions and script code to translation
1 parent 175b0f6 commit 07b1b79

File tree

2 files changed

+69
-8
lines changed

2 files changed

+69
-8
lines changed

lib/shared/languageSpecificTranslation.js

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import bcp47 from 'bcp47'
22
import translations from '../../lib/language_specific_translation/translations.js'
33

4-
const translationMap = new Map(
4+
const csafTranslationMaps = new Map(
55
Object.entries(translations.translation).map(([key, value]) => [
66
key,
77
new Map(Object.entries(value)),
@@ -46,12 +46,34 @@ export function containsOneNoteWithTitleAndCategory(
4646
* @param {string} i18nKey
4747
*/
4848
export function getTranslationInDocumentLang(doc, i18nKey) {
49-
if (!doc.document.lang) {
50-
return undefined
51-
}
52-
const language = bcp47.parse(doc.document.lang)?.langtag.language.language
53-
if (!language) {
54-
return undefined
49+
return doc.document.lang
50+
? getTranslationInMap(doc.document.lang, i18nKey, csafTranslationMaps)
51+
: undefined
52+
}
53+
54+
/**
55+
* Get the language specific translation of the given i18nKey in translationMaps
56+
* @param {string} langToTranslate
57+
* @param {string} i18nKey
58+
* @param {Map<string,Map<string,string>>} translationMaps
59+
*/
60+
export function getTranslationInMap(langToTranslate, i18nKey, translationMaps) {
61+
const langtag = bcp47.parse(langToTranslate)?.langtag
62+
const languageCode = langtag?.language.language
63+
let transMapForLanguage
64+
if (langtag && languageCode) {
65+
if (langtag.region) {
66+
if (langtag.script) {
67+
transMapForLanguage = translationMaps.get(
68+
`${languageCode}-${langtag.script}-${langtag.region}`
69+
)
70+
}
71+
transMapForLanguage =
72+
transMapForLanguage ??
73+
translationMaps.get(`${languageCode}-${langtag.region}`)
74+
}
75+
transMapForLanguage =
76+
transMapForLanguage ?? translationMaps.get(languageCode)
5577
}
56-
return translationMap.get(language)?.get(i18nKey)
78+
return transMapForLanguage?.get(i18nKey)
5779
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { getTranslationInMap } from '../lib/shared/languageSpecificTranslation.js'
2+
import { expect } from 'chai'
3+
4+
describe('test language specific translation', function () {
5+
it('test getTranslationInMap', function () {
6+
const translationMaps = new Map([
7+
['de', new Map([['I18nTestKey', 'translationDe']])],
8+
['de-AT', new Map([['I18nTestKey', 'translationAT']])],
9+
['en', new Map([['I18nTestKey', 'translationEn']])],
10+
['zh-Hans-CN', new Map([['I18nTestKey', 'translationZh-Hans-CN']])],
11+
['sr', new Map([['I18nTestKey', 'translationSr']])],
12+
])
13+
14+
expect(
15+
getTranslationInMap('de', 'I18nTestKey', translationMaps),
16+
'Translate language code de'
17+
).to.equal('translationDe')
18+
expect(
19+
getTranslationInMap('de-AT', 'I18nTestKey', translationMaps),
20+
'Translate language and region code'
21+
).to.equal('translationAT')
22+
expect(
23+
getTranslationInMap('en', 'I18nTestKey', translationMaps),
24+
'Translate language code en'
25+
).to.equal('translationEn')
26+
expect(
27+
getTranslationInMap('en-US', 'I18nTestKey', translationMaps),
28+
'Fallback to language code en on region us'
29+
).to.equal('translationEn')
30+
expect(
31+
getTranslationInMap('zh-Hans-CN', 'I18nTestKey', translationMaps),
32+
'Translate language, region and script code'
33+
).to.equal('translationZh-Hans-CN')
34+
expect(
35+
getTranslationInMap('sr-Cyrl-RS', 'I18nTestKey', translationMaps),
36+
'Fallback to language code en on region an sript code'
37+
).to.equal('translationSr')
38+
})
39+
})

0 commit comments

Comments
 (0)