fix(localize): include the last placeholder in parsed translation text (#38452)
When creating a `ParsedTranslation` from a set of message parts and placeholder names a textual representation of the message is computed. Previously the last placeholder and text segment were missing from this computed message string. PR Close #38452
This commit is contained in:
parent
0b54c0c6b4
commit
8cd4099db9
|
@ -113,7 +113,7 @@ export function parseTranslation(messageString: TargetMessage): ParsedTranslatio
|
||||||
export function makeParsedTranslation(
|
export function makeParsedTranslation(
|
||||||
messageParts: string[], placeholderNames: string[] = []): ParsedTranslation {
|
messageParts: string[], placeholderNames: string[] = []): ParsedTranslation {
|
||||||
let messageString = messageParts[0];
|
let messageString = messageParts[0];
|
||||||
for (let i = 0; i < placeholderNames.length - 1; i++) {
|
for (let i = 0; i < placeholderNames.length; i++) {
|
||||||
messageString += `{$${placeholderNames[i]}}${messageParts[i + 1]}`;
|
messageString += `{$${placeholderNames[i]}}${messageParts[i + 1]}`;
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* Use of this source code is governed by an MIT-style license that can be
|
* Use of this source code is governed by an MIT-style license that can be
|
||||||
* found in the LICENSE file at https://angular.io/license
|
* found in the LICENSE file at https://angular.io/license
|
||||||
*/
|
*/
|
||||||
import {computeMsgId, makeTemplateObject, ParsedTranslation, parseTranslation, TargetMessage, translate} from '..';
|
import {computeMsgId, makeParsedTranslation, makeTemplateObject, ParsedTranslation, parseTranslation, TargetMessage, translate} from '..';
|
||||||
|
|
||||||
describe('utils', () => {
|
describe('utils', () => {
|
||||||
describe('makeTemplateObject', () => {
|
describe('makeTemplateObject', () => {
|
||||||
|
@ -22,6 +22,24 @@ describe('utils', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('makeParsedTranslation()', () => {
|
||||||
|
it('should compute a template object from the parts', () => {
|
||||||
|
expect(makeParsedTranslation(['a', 'b', 'c'], ['ph1', 'ph2']).messageParts)
|
||||||
|
.toEqual(makeTemplateObject(['a', 'b', 'c'], ['a', 'b', 'c']));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should include the placeholder names', () => {
|
||||||
|
expect(makeParsedTranslation(['a', 'b', 'c'], ['ph1', 'ph2']).placeholderNames).toEqual([
|
||||||
|
'ph1', 'ph2'
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should compute the message string from the parts and placeholder names', () => {
|
||||||
|
expect(makeParsedTranslation(['a', 'b', 'c'], ['ph1', 'ph2']).text)
|
||||||
|
.toEqual('a{$ph1}b{$ph2}c');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('parseTranslation', () => {
|
describe('parseTranslation', () => {
|
||||||
it('should extract the messageParts as a TemplateStringsArray', () => {
|
it('should extract the messageParts as a TemplateStringsArray', () => {
|
||||||
const translation = parseTranslation('a{$one}b{$two}c');
|
const translation = parseTranslation('a{$one}b{$two}c');
|
||||||
|
|
Loading…
Reference in New Issue