feat(ExtractorMerger): ignore implicit tags in translatable sections
This commit is contained in:
parent
1b04d70626
commit
dd68ae3ef1
|
@ -211,7 +211,8 @@ class _Visitor implements html.Visitor {
|
||||||
// Extract only top level nodes with the (implicit) "i18n" attribute if not in a block or an ICU
|
// Extract only top level nodes with the (implicit) "i18n" attribute if not in a block or an ICU
|
||||||
// message
|
// message
|
||||||
const i18nAttr = _getI18nAttr(el);
|
const i18nAttr = _getI18nAttr(el);
|
||||||
const isImplicit = this._implicitTags.some((tag: string): boolean => el.name === tag);
|
const isImplicit = this._implicitTags.some((tag: string): boolean => el.name === tag) &&
|
||||||
|
!this._inIcu && !this._isInTranslatableSection;
|
||||||
const isTopLevelImplicit = !wasInImplicitNode && isImplicit;
|
const isTopLevelImplicit = !wasInImplicitNode && isImplicit;
|
||||||
this._inImplicitNode = this._inImplicitNode || isImplicit;
|
this._inImplicitNode = this._inImplicitNode || isImplicit;
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,12 @@ export function main() {
|
||||||
|
|
||||||
it('should not create a message for empty elements',
|
it('should not create a message for empty elements',
|
||||||
() => { expect(extract('<div i18n="m|d"></div>')).toEqual([]); });
|
() => { expect(extract('<div i18n="m|d"></div>')).toEqual([]); });
|
||||||
|
|
||||||
|
it('should ignore implicit elements in translatable elements', () => {
|
||||||
|
expect(extract('<div i18n="m|d"><p></p></div>', ['p'])).toEqual([
|
||||||
|
[['<ph tag name="START_PARAGRAPH"></ph name="CLOSE_PARAGRAPH">'], 'm', 'd']
|
||||||
|
]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('blocks', () => {
|
describe('blocks', () => {
|
||||||
|
@ -68,6 +74,13 @@ export function main() {
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should ignore implicit elements in blocks', () => {
|
||||||
|
expect(extract('<!-- i18n:m|d --><p></p><!-- /i18n -->', ['p'])).toEqual([
|
||||||
|
[['<ph tag name="START_PARAGRAPH"></ph name="CLOSE_PARAGRAPH">'], 'm', 'd']
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
it('should extract siblings', () => {
|
it('should extract siblings', () => {
|
||||||
expect(
|
expect(
|
||||||
extract(
|
extract(
|
||||||
|
@ -141,12 +154,30 @@ export function main() {
|
||||||
it('should not extract ICU messages outside of i18n sections',
|
it('should not extract ICU messages outside of i18n sections',
|
||||||
() => { expect(extract('{count, plural, =0 {text}}')).toEqual([]); });
|
() => { expect(extract('{count, plural, =0 {text}}')).toEqual([]); });
|
||||||
|
|
||||||
it('should not extract nested ICU messages', () => {
|
it('should ignore nested ICU messages', () => {
|
||||||
expect(extract('<div i18n="m|d">{count, plural, =0 { {sex, gender, =m {m}} }}</div>'))
|
expect(extract('<div i18n="m|d">{count, plural, =0 { {sex, gender, =m {m}} }}</div>'))
|
||||||
.toEqual([
|
.toEqual([
|
||||||
[['{count, plural, =0 {[{sex, gender, =m {[m]}}, ]}}'], 'm', 'd'],
|
[['{count, plural, =0 {[{sex, gender, =m {[m]}}, ]}}'], 'm', 'd'],
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should ignore implicit elements in non translatable ICU messages', () => {
|
||||||
|
expect(
|
||||||
|
extract(
|
||||||
|
'<div i18n="m|d">{count, plural, =0 { {sex, gender, =m {<p>ignore</p>}} }}</div>',
|
||||||
|
['p']))
|
||||||
|
.toEqual([[
|
||||||
|
[
|
||||||
|
'{count, plural, =0 {[{sex, gender, =m {[<ph tag name="START_PARAGRAPH">ignore</ph name="CLOSE_PARAGRAPH">]}}, ]}}'
|
||||||
|
],
|
||||||
|
'm', 'd'
|
||||||
|
]]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should ignore implicit elements in non translatable ICU messages', () => {
|
||||||
|
expect(extract('{count, plural, =0 { {sex, gender, =m {<p>ignore</p>}} }}', ['p']))
|
||||||
|
.toEqual([]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('attributes', () => {
|
describe('attributes', () => {
|
||||||
|
@ -297,20 +328,6 @@ export function main() {
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('implicit elements', () => {
|
|
||||||
it('should report implicit element in translatable element', () => {
|
|
||||||
expect(extractErrors(`<p i18n><b></b></p>`, ['b'])).toEqual([
|
|
||||||
['Could not mark an element as translatable inside a translatable section', '<b>'],
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should report implicit element in translatable blocks', () => {
|
|
||||||
expect(extractErrors(`<!-- i18n --><b></b><!-- /i18n -->`, ['b'])).toEqual([
|
|
||||||
['Could not mark an element as translatable inside a translatable section', '<b>'],
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue