pseudo-localization 3.1.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/pseudo-localize.js +71 -22
- package/dist/bin/pseudo-localize.js.map +1 -1
- package/dist/localize.js.map +1 -1
- package/package.json +1 -5
- package/src/bin/pseudo-localize.ts +86 -28
- package/src/localize.ts +3 -3
|
@@ -1,25 +1,74 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
|
-
import yargs from 'yargs/yargs';
|
|
3
|
-
import { hideBin } from 'yargs/helpers';
|
|
4
2
|
import { pseudoLocalizeString } from "../localize.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
3
|
+
function isStrategy(str) {
|
|
4
|
+
return ['accented', 'bidi'].includes(str);
|
|
5
|
+
}
|
|
6
|
+
function parseArgs(argv) {
|
|
7
|
+
const options = {
|
|
8
|
+
string: '',
|
|
9
|
+
strategy: 'accented', // Default strategy
|
|
10
|
+
};
|
|
11
|
+
const args = argv.slice(2); // Skip node and script name
|
|
12
|
+
let i = 0;
|
|
13
|
+
while (i < args.length) {
|
|
14
|
+
const arg = args[i];
|
|
15
|
+
if (arg === '--strategy' || arg === '-s') {
|
|
16
|
+
// Handle the `--strategy` or `-s` flag
|
|
17
|
+
const value = args[i + 1];
|
|
18
|
+
if (!isStrategy(value)) {
|
|
19
|
+
throw new Error(`Invalid value for --strategy. Choose 'accented' or 'bidi'.`);
|
|
20
|
+
}
|
|
21
|
+
options.strategy = value;
|
|
22
|
+
i += 2; // Skip the flag and its value
|
|
23
|
+
}
|
|
24
|
+
else if (!arg.startsWith('--') && !arg.startsWith('-')) {
|
|
25
|
+
// Assume it's the positional `string` argument
|
|
26
|
+
if (!options.string) {
|
|
27
|
+
options.string = arg;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
throw new Error('Unexpected additional argument: ' + arg);
|
|
31
|
+
}
|
|
32
|
+
i += 1;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
throw new Error(`Unknown argument: ${arg}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!options.string) {
|
|
39
|
+
throw new Error('The <string> argument is required.');
|
|
40
|
+
}
|
|
41
|
+
return options;
|
|
42
|
+
}
|
|
43
|
+
function displayHelp() {
|
|
44
|
+
console.log(`
|
|
45
|
+
Usage: <script> <string> [options]
|
|
46
|
+
|
|
47
|
+
Pseudo localize a string
|
|
48
|
+
|
|
49
|
+
Arguments:
|
|
50
|
+
<string> String to pseudo-localize
|
|
51
|
+
|
|
52
|
+
Options:
|
|
53
|
+
--strategy, -s Set the strategy for localization (choices: 'accented', 'bidi', default: 'accented')
|
|
54
|
+
--help Show help
|
|
55
|
+
`);
|
|
56
|
+
}
|
|
57
|
+
function main() {
|
|
58
|
+
const argv = process.argv;
|
|
59
|
+
if (argv.includes('--help')) {
|
|
60
|
+
displayHelp();
|
|
61
|
+
process.exit(0);
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const { string, strategy } = parseArgs(argv);
|
|
65
|
+
process.stdout.write(pseudoLocalizeString(string, { strategy }));
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error(error);
|
|
69
|
+
displayHelp();
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
main();
|
|
25
74
|
//# sourceMappingURL=pseudo-localize.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pseudo-localize.js","sourceRoot":"","sources":["../../src/bin/pseudo-localize.ts"],"names":[],"mappings":";AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"pseudo-localize.js","sourceRoot":"","sources":["../../src/bin/pseudo-localize.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAiB,MAAM,gBAAgB,CAAC;AAOrE,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAS;QACpB,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,UAAU,EAAE,mBAAmB;KAC1C,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;IACxD,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACzC,uCAAuC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;YACzB,CAAC,IAAI,CAAC,CAAC,CAAC,8BAA8B;QACxC,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,+CAA+C;YAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,GAAG,CAAC,CAAC;YAC5D,CAAC;YACD,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;CAWb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,IAAI;IACX,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/dist/localize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localize.js","sourceRoot":"","sources":["../src/localize.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"localize.js","sourceRoot":"","sources":["../src/localize.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pseudo-localization",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"description": "pseudo-localization for internationalization testing",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
@@ -54,14 +54,10 @@
|
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@eslint/js": "^9.17.0",
|
|
56
56
|
"@types/node": "^22.10.2",
|
|
57
|
-
"@types/yargs": "^17.0.33",
|
|
58
57
|
"eslint": "^9.17.0",
|
|
59
58
|
"globals": "^15.13.0",
|
|
60
59
|
"prettier": "^3.4.2",
|
|
61
60
|
"typescript": "^5.7.2",
|
|
62
61
|
"typescript-eslint": "^8.18.0"
|
|
63
|
-
},
|
|
64
|
-
"dependencies": {
|
|
65
|
-
"yargs": "^17.7.2"
|
|
66
62
|
}
|
|
67
63
|
}
|
|
@@ -1,31 +1,89 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
(
|
|
27
|
-
|
|
3
|
+
import { pseudoLocalizeString, type Strategy } from '../localize.ts';
|
|
4
|
+
|
|
5
|
+
type Args = {
|
|
6
|
+
string: string;
|
|
7
|
+
strategy: 'accented' | 'bidi';
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
function isStrategy(str: string): str is Strategy {
|
|
11
|
+
return ['accented', 'bidi'].includes(str);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function parseArgs(argv: string[]): Args {
|
|
15
|
+
const options: Args = {
|
|
16
|
+
string: '',
|
|
17
|
+
strategy: 'accented', // Default strategy
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const args = argv.slice(2); // Skip node and script name
|
|
21
|
+
let i = 0;
|
|
22
|
+
|
|
23
|
+
while (i < args.length) {
|
|
24
|
+
const arg = args[i];
|
|
25
|
+
|
|
26
|
+
if (arg === '--strategy' || arg === '-s') {
|
|
27
|
+
// Handle the `--strategy` or `-s` flag
|
|
28
|
+
const value = args[i + 1];
|
|
29
|
+
if (!isStrategy(value)) {
|
|
30
|
+
throw new Error(
|
|
31
|
+
`Invalid value for --strategy. Choose 'accented' or 'bidi'.`
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
options.strategy = value;
|
|
35
|
+
i += 2; // Skip the flag and its value
|
|
36
|
+
} else if (!arg.startsWith('--') && !arg.startsWith('-')) {
|
|
37
|
+
// Assume it's the positional `string` argument
|
|
38
|
+
if (!options.string) {
|
|
39
|
+
options.string = arg;
|
|
40
|
+
} else {
|
|
41
|
+
throw new Error('Unexpected additional argument: ' + arg);
|
|
42
|
+
}
|
|
43
|
+
i += 1;
|
|
44
|
+
} else {
|
|
45
|
+
throw new Error(`Unknown argument: ${arg}`);
|
|
28
46
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
.
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!options.string) {
|
|
50
|
+
throw new Error('The <string> argument is required.');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return options;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function displayHelp() {
|
|
57
|
+
console.log(`
|
|
58
|
+
Usage: <script> <string> [options]
|
|
59
|
+
|
|
60
|
+
Pseudo localize a string
|
|
61
|
+
|
|
62
|
+
Arguments:
|
|
63
|
+
<string> String to pseudo-localize
|
|
64
|
+
|
|
65
|
+
Options:
|
|
66
|
+
--strategy, -s Set the strategy for localization (choices: 'accented', 'bidi', default: 'accented')
|
|
67
|
+
--help Show help
|
|
68
|
+
`);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function main() {
|
|
72
|
+
const argv = process.argv;
|
|
73
|
+
|
|
74
|
+
if (argv.includes('--help')) {
|
|
75
|
+
displayHelp();
|
|
76
|
+
process.exit(0);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
const { string, strategy } = parseArgs(argv);
|
|
81
|
+
process.stdout.write(pseudoLocalizeString(string, { strategy }));
|
|
82
|
+
} catch (error) {
|
|
83
|
+
console.error(error);
|
|
84
|
+
displayHelp();
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
main();
|
package/src/localize.ts
CHANGED
|
@@ -35,9 +35,9 @@ const strategies = {
|
|
|
35
35
|
},
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
-
type Strategy = 'accented' | 'bidi';
|
|
38
|
+
export type Strategy = 'accented' | 'bidi';
|
|
39
39
|
|
|
40
|
-
type PseudoLocalizeStringOptions = {
|
|
40
|
+
export type PseudoLocalizeStringOptions = {
|
|
41
41
|
/**
|
|
42
42
|
* The strategy to employ.
|
|
43
43
|
* - `accented`:
|
|
@@ -67,7 +67,7 @@ type PseudoLocalizeStringOptions = {
|
|
|
67
67
|
export const pseudoLocalizeString = (
|
|
68
68
|
string: string,
|
|
69
69
|
{ strategy = 'accented' }: PseudoLocalizeStringOptions = {}
|
|
70
|
-
) => {
|
|
70
|
+
): string => {
|
|
71
71
|
const opts = strategies[strategy];
|
|
72
72
|
|
|
73
73
|
let pseudoLocalizedText = '';
|