Skip to content

Commit 467be9b

Browse files
Bump @tannin/sprintf from 1.2.0 to 1.3.0 (#14213)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Pascal Birchler <pascalb@google.com>
1 parent 46d0b76 commit 467be9b

File tree

15 files changed

+100
-36
lines changed

15 files changed

+100
-36
lines changed

package-lock.json

Lines changed: 5 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/dashboard/src/constants/stories.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ export const STORY_VIEWING_LABELS = {
184184
n,
185185
'web-stories'
186186
),
187-
String(n)
187+
n
188188
),
189189
[STORY_STATUS.DRAFT]: (n: number) =>
190190
sprintf(
@@ -195,7 +195,7 @@ export const STORY_VIEWING_LABELS = {
195195
n,
196196
'web-stories'
197197
),
198-
String(n)
198+
n
199199
),
200200
[STORY_STATUS.PUBLISH]: (n: number) =>
201201
sprintf(
@@ -206,7 +206,7 @@ export const STORY_VIEWING_LABELS = {
206206
n,
207207
'web-stories'
208208
),
209-
String(n)
209+
n
210210
),
211211
[STORY_STATUS.FUTURE]: (n: number) =>
212212
sprintf(
@@ -217,7 +217,7 @@ export const STORY_VIEWING_LABELS = {
217217
n,
218218
'web-stories'
219219
),
220-
String(n)
220+
n
221221
),
222222
[STORY_STATUS.PENDING]: (n: number) =>
223223
sprintf(
@@ -228,7 +228,7 @@ export const STORY_VIEWING_LABELS = {
228228
n,
229229
'web-stories'
230230
),
231-
String(n)
231+
n
232232
),
233233
[STORY_STATUS.PRIVATE]: (n: number) =>
234234
sprintf(
@@ -239,7 +239,7 @@ export const STORY_VIEWING_LABELS = {
239239
n,
240240
'web-stories'
241241
),
242-
String(n)
242+
n
243243
),
244244
};
245245

packages/dashboard/src/constants/templates.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ export const TEMPLATES_GALLERY_VIEWING_LABELS = {
151151
n,
152152
'web-stories'
153153
),
154-
String(n)
154+
n
155155
),
156156
};
157157

packages/design-system/src/components/dropDown/useDropDown.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export default function useDropDown({
7171
options.length,
7272
'web-stories'
7373
),
74-
String(options.length)
74+
options.length
7575
)
7676
: __('No results found.', 'web-stories');
7777

packages/design-system/src/components/search/useSearch.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ export default function useSearch({
129129
options.length,
130130
'web-stories'
131131
),
132-
String(options.length)
132+
options.length
133133
)
134134
: __('No results found.', 'web-stories');
135135

packages/element-library/src/elementTypes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ const elementTypes = [
7171
} as ElementDefinition<GifElement>,
7272
{
7373
type: ElementType.Sticker,
74-
name: __('Sticker', 'web-stories'),
74+
name: __('Sticker', 'web-stories') as string,
7575
...stickerElement,
7676
} as ElementDefinition<StickerElement>,
7777
{

packages/i18n/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"sideEffects": false,
4242
"dependencies": {
4343
"@googleforcreators/react": "*",
44-
"@tannin/sprintf": "^1.2.0",
44+
"@tannin/sprintf": "^1.3.0",
4545
"prop-types": "^15.8.1",
4646
"tannin": "^1.2.0"
4747
}

packages/i18n/src/i18n.ts

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
import Tannin from 'tannin';
2121
import type { TanninLocaleDomain } from 'tannin';
2222

23+
/**
24+
* Internal dependencies
25+
*/
26+
import type { TranslatableText } from './types';
27+
2328
interface LocaleData {
2429
locale_data: {
2530
[key: string]: TanninLocaleDomain;
@@ -63,8 +68,11 @@ export function setLocaleData(data: LocaleData) {
6368
* @param [domain] Text domain. Unique identifier for retrieving translated strings.
6469
* @return Translated text.
6570
*/
66-
export function __(text: string, domain = TEXT_DOMAIN) {
67-
return tannin.dcnpgettext(domain, undefined, text);
71+
export function __<T extends string>(
72+
text: T,
73+
domain = TEXT_DOMAIN
74+
): TranslatableText<T> {
75+
return tannin.dcnpgettext(domain, undefined, text) as TranslatableText<T>;
6876
}
6977

7078
/**
@@ -75,8 +83,12 @@ export function __(text: string, domain = TEXT_DOMAIN) {
7583
* @param [domain] Text domain. Unique identifier for retrieving translated strings.
7684
* @return Translated text.
7785
*/
78-
export function _x(text: string, context: string, domain = TEXT_DOMAIN) {
79-
return tannin.dcnpgettext(domain, context, text);
86+
export function _x<T extends string>(
87+
text: T,
88+
context: string,
89+
domain = TEXT_DOMAIN
90+
): TranslatableText<T> {
91+
return tannin.dcnpgettext(domain, context, text) as TranslatableText<T>;
8092
}
8193

8294
/**
@@ -88,13 +100,19 @@ export function _x(text: string, context: string, domain = TEXT_DOMAIN) {
88100
* @param [domain] Text domain. Unique identifier for retrieving translated strings.
89101
* @return Translated text.
90102
*/
91-
export function _n(
92-
singular: string,
93-
plural: string,
103+
export function _n<T extends string, P extends string>(
104+
singular: T,
105+
plural: P,
94106
number: number,
95107
domain = TEXT_DOMAIN
96-
) {
97-
return tannin.dcnpgettext(domain, undefined, singular, plural, number);
108+
): TranslatableText<T | P> {
109+
return tannin.dcnpgettext(
110+
domain,
111+
undefined,
112+
singular,
113+
plural,
114+
number
115+
) as TranslatableText<T | P>;
98116
}
99117

100118
/**
@@ -107,12 +125,18 @@ export function _n(
107125
* @param [domain] Text domain. Unique identifier for retrieving translated strings.
108126
* @return Translated text.
109127
*/
110-
export function _nx(
111-
singular: string,
112-
plural: string,
128+
export function _nx<T extends string, P extends string>(
129+
singular: T,
130+
plural: P,
113131
number: number,
114132
context: string,
115133
domain = TEXT_DOMAIN
116-
) {
117-
return tannin.dcnpgettext(domain, context, singular, plural, number);
134+
): TranslatableText<T | P> {
135+
return tannin.dcnpgettext(
136+
domain,
137+
context,
138+
singular,
139+
plural,
140+
number
141+
) as TranslatableText<T | P>;
118142
}

packages/i18n/src/sprintf.ts

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,41 @@
1717
/**
1818
* External dependencies
1919
*/
20-
import sprintf from '@tannin/sprintf';
20+
import _sprintf from '@tannin/sprintf';
21+
import type { SprintfArgs } from '@tannin/sprintf/types';
2122

22-
export default sprintf;
23+
/**
24+
* Internal dependencies
25+
*/
26+
import type { TranslatableText } from './types';
27+
28+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- on purpose.
29+
type DistributeSprintfArgs<T extends string> = T extends any
30+
? SprintfArgs<T>
31+
: never;
32+
33+
export function sprintf<T extends string>(
34+
format: T | TranslatableText<T>,
35+
...args: DistributeSprintfArgs<T>
36+
): string;
37+
export function sprintf<T extends string>(
38+
format: T | TranslatableText<T>,
39+
args: DistributeSprintfArgs<T>
40+
): string;
41+
42+
/**
43+
* Returns a formatted string.
44+
*
45+
* @param format The format of the string to generate.
46+
* @param args Arguments to apply to the format.
47+
*
48+
* @see https://www.npmjs.com/package/@tannin/sprintf
49+
*
50+
* @return The formatted string.
51+
*/
52+
export default function sprintf<T extends string>(
53+
format: T | TranslatableText<T>,
54+
...args: DistributeSprintfArgs<T>
55+
): string {
56+
return _sprintf(format as T, ...args);
57+
}

packages/i18n/src/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,7 @@
2020
import type { ReactElement } from 'react';
2121

2222
export type Mapping = Record<string, ReactElement>;
23+
24+
export type TranslatableText<T extends string> = string & {
25+
readonly __translatableText: T;
26+
};

0 commit comments

Comments
 (0)