feat(cli): preset lang base on the os locale (#544)

* feat(cli): preset `lang` base on the  os locale

* chore: tweak
This commit is contained in:
pengzhanbo 2025-03-30 00:12:23 +08:00 committed by GitHub
parent 6fd6c0c250
commit 3731e376e3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 43 additions and 0 deletions

View File

@ -35,6 +35,7 @@
"cac": "catalog:prod",
"execa": "catalog:prod",
"handlebars": "catalog:prod",
"os-locale": "catalog:prod",
"picocolors": "catalog:prod"
},
"plume-deps": {

View File

@ -2,6 +2,7 @@ import type { Bundler, Langs, PromptResult } from './types.js'
import { createRequire } from 'node:module'
import process from 'node:process'
import { cancel, confirm, group, select, text } from '@clack/prompts'
import { osLocale } from 'os-locale'
import { bundlerOptions, deployOptions, DeployType, languageOptions, Mode } from './constants.js'
import { setLang, t } from './translate.js'
@ -20,6 +21,18 @@ export async function prompt(mode: Mode, root?: string): Promise<PromptResult> {
const result: PromptResult = await group({
displayLang: async () => {
const locale = await osLocale()
if (locale === 'zh-CN' || locale === 'zh-Hans') {
setLang('zh-CN')
return 'zh-CN'
}
if (locale === 'en-US') {
setLang('en-US')
return 'en-US'
}
const lang = await select<Langs>({
message: 'Select a language to display / 选择显示语言',
options: languageOptions,

28
pnpm-lock.yaml generated
View File

@ -260,6 +260,9 @@ catalogs:
nanoid:
specifier: ^5.1.5
version: 5.1.5
os-locale:
specifier: ^6.0.2
version: 6.0.2
p-map:
specifier: ^7.0.3
version: 7.0.3
@ -470,6 +473,9 @@ importers:
handlebars:
specifier: catalog:prod
version: 4.7.8
os-locale:
specifier: catalog:prod
version: 6.0.2
picocolors:
specifier: catalog:prod
version: 1.1.1
@ -4407,6 +4413,10 @@ packages:
resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
engines: {node: '>=12'}
invert-kv@3.0.1:
resolution: {integrity: sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==}
engines: {node: '>=8'}
is-alphabetical@2.0.1:
resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
@ -4658,6 +4668,10 @@ packages:
layout-base@2.0.1:
resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==}
lcid@3.1.1:
resolution: {integrity: sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==}
engines: {node: '>=8'}
less@4.2.2:
resolution: {integrity: sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg==}
engines: {node: '>=6'}
@ -5238,6 +5252,10 @@ packages:
resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==}
engines: {node: '>=18'}
os-locale@6.0.2:
resolution: {integrity: sha512-qIb8bzRqaN/vVqEYZ7lTAg6PonskO7xOmM7OClD28F6eFa4s5XGe4bGpHUHMoCHbNNuR0pDYFeSLiW5bnjWXIA==}
engines: {node: '>=12.20'}
os-tmpdir@1.0.2:
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
engines: {node: '>=0.10.0'}
@ -10880,6 +10898,8 @@ snapshots:
internmap@2.0.3: {}
invert-kv@3.0.1: {}
is-alphabetical@2.0.1: {}
is-alphanumerical@2.0.1:
@ -11092,6 +11112,10 @@ snapshots:
layout-base@2.0.1: {}
lcid@3.1.1:
dependencies:
invert-kv: 3.0.1
less@4.2.2:
dependencies:
copy-anything: 2.0.6
@ -11903,6 +11927,10 @@ snapshots:
string-width: 7.2.0
strip-ansi: 7.1.0
os-locale@6.0.2:
dependencies:
lcid: 3.1.1
os-tmpdir@1.0.2: {}
p-limit@3.1.0:

View File

@ -103,6 +103,7 @@ catalogs:
markmap-view: ^0.18.10
minisearch: ^7.1.2
nanoid: ^5.1.5
os-locale: ^6.0.2
p-map: ^7.0.3
package-manager-detector: ^1.1.0
picocolors: ^1.1.1