mirror of
https://github.com/lobehub/lobehub
synced 2026-04-21 17:47:27 +00:00
🌐 locale: add usernameTooLong translations with CJK spacing fix (#12615)
This commit is contained in:
parent
43578a9bcc
commit
9ab2f219e4
18 changed files with 57 additions and 21 deletions
|
|
@ -13,31 +13,50 @@ user_invocable: true
|
|||
|
||||
## Steps
|
||||
|
||||
1. **Gather context** (run in parallel):
|
||||
- `git branch --show-current` — current branch name
|
||||
- `git rev-parse --abbrev-ref @{u} 2>/dev/null` — remote tracking status
|
||||
- `git log --oneline origin/canary..HEAD` — unpushed commits
|
||||
- `gh pr list --head "$(git branch --show-current)" --json number,title,state,url` — existing PR
|
||||
- `git log --oneline origin/canary..HEAD` — commit history for PR title
|
||||
- `git diff --stat --stat-count=20 origin/canary..HEAD` — change summary
|
||||
### 1. Gather context (run in parallel)
|
||||
|
||||
2. **Push if needed**:
|
||||
- No upstream: `git push -u origin $(git branch --show-current)`
|
||||
- Has upstream: `git push origin $(git branch --show-current)`
|
||||
- `git branch --show-current` — current branch name
|
||||
- `git status --short` — uncommitted changes
|
||||
- `git rev-parse --abbrev-ref @{u} 2>/dev/null` — remote tracking status
|
||||
- `git log --oneline origin/canary..HEAD` — unpushed commits
|
||||
- `gh pr list --head "$(git branch --show-current)" --json number,title,state,url` — existing PR
|
||||
- `git diff --stat --stat-count=20 origin/canary..HEAD` — change summary
|
||||
|
||||
3. **Search related GitHub issues**:
|
||||
- `gh issue list --search "<keywords>" --state all --limit 10`
|
||||
- Only link issues with matching scope (avoid large umbrella issues)
|
||||
- Skip if no matching issue found
|
||||
### 2. Handle uncommitted changes on default branch
|
||||
|
||||
4. **Create PR** with `gh pr create --base canary`:
|
||||
- Title: `<gitmoji> <type>(<scope>): <description>`
|
||||
- Body: based on PR template (`.github/PULL_REQUEST_TEMPLATE.md`), fill checkboxes
|
||||
- Link related GitHub issues using magic keywords (`Fixes #123`, `Closes #123`)
|
||||
- Link Linear issues if applicable (`Fixes LOBE-xxx`)
|
||||
- Use HEREDOC for body to preserve formatting
|
||||
If current branch is `canary` (or `main`) AND there are uncommitted changes:
|
||||
|
||||
5. **Open in browser**: `gh pr view --web`
|
||||
1. Analyze the diff (`git diff`) to understand the changes
|
||||
2. Infer a branch name from the changes, format: `<type>/<short-description>` (e.g. `fix/i18n-cjk-spacing`)
|
||||
3. Create and switch to the new branch: `git checkout -b <branch-name>`
|
||||
4. Stage relevant files: `git add <files>` (prefer explicit file paths over `git add .`)
|
||||
5. Commit with a proper gitmoji message
|
||||
6. Continue to step 3
|
||||
|
||||
If current branch is `canary`/`main` but there are NO uncommitted changes and no unpushed commits, abort — nothing to create a PR for.
|
||||
|
||||
### 3. Push if needed
|
||||
|
||||
- No upstream: `git push -u origin $(git branch --show-current)`
|
||||
- Has upstream: `git push origin $(git branch --show-current)`
|
||||
|
||||
### 4. Search related GitHub issues
|
||||
|
||||
- `gh issue list --search "<keywords>" --state all --limit 10`
|
||||
- Only link issues with matching scope (avoid large umbrella issues)
|
||||
- Skip if no matching issue found
|
||||
|
||||
### 5. Create PR with `gh pr create --base canary`
|
||||
|
||||
- Title: `<gitmoji> <type>(<scope>): <description>`
|
||||
- Body: based on PR template (`.github/PULL_REQUEST_TEMPLATE.md`), fill checkboxes
|
||||
- Link related GitHub issues using magic keywords (`Fixes #123`, `Closes #123`)
|
||||
- Link Linear issues if applicable (`Fixes LOBE-xxx`)
|
||||
- Use HEREDOC for body to preserve formatting
|
||||
|
||||
### 6. Open in browser
|
||||
|
||||
`gh pr view --web`
|
||||
|
||||
## PR Template
|
||||
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "أدخل اسم مستخدم يحتوي على أحرف أو أرقام أو شرطة سفلية",
|
||||
"profile.usernameRequired": "لا يمكن أن يكون اسم المستخدم فارغًا",
|
||||
"profile.usernameRule": "يمكن أن يحتوي اسم المستخدم على أحرف أو أرقام أو شرطة سفلية فقط",
|
||||
"profile.usernameTooLong": "لا يمكن أن يتجاوز اسم المستخدم 64 حرفًا",
|
||||
"profile.usernameUpdateFailed": "فشل في تحديث اسم المستخدم، يرجى المحاولة لاحقًا",
|
||||
"signin.subtitle": "سجّل أو قم بتسجيل الدخول إلى حساب {{appName}} الخاص بك",
|
||||
"signin.title": "فرق الوكلاء التي تنمو معك",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "Въведете потребителско име с букви, цифри или долни черти",
|
||||
"profile.usernameRequired": "Потребителското име не може да бъде празно",
|
||||
"profile.usernameRule": "Потребителското име може да съдържа само букви, цифри или долни черти",
|
||||
"profile.usernameTooLong": "Потребителското име не може да надвишава 64 символа",
|
||||
"profile.usernameUpdateFailed": "Неуспешна актуализация на потребителското име, моля опитайте отново по-късно",
|
||||
"signin.subtitle": "Регистрирайте се или влезте в акаунта си в {{appName}}",
|
||||
"signin.title": "Агентски екипи, които растат заедно с вас",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "Benutzernamen mit Buchstaben, Zahlen oder Unterstrichen eingeben",
|
||||
"profile.usernameRequired": "Benutzername darf nicht leer sein",
|
||||
"profile.usernameRule": "Benutzername darf nur Buchstaben, Zahlen oder Unterstriche enthalten",
|
||||
"profile.usernameTooLong": "Der Benutzername darf nicht länger als 64 Zeichen sein",
|
||||
"profile.usernameUpdateFailed": "Benutzername konnte nicht aktualisiert werden, bitte versuchen Sie es später erneut",
|
||||
"signin.subtitle": "Registrieren oder anmelden bei Ihrem {{appName}}-Konto",
|
||||
"signin.title": "Agententeams, die mit Ihnen wachsen",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "Enter a username with letters, numbers, or underscores",
|
||||
"profile.usernameRequired": "Username cannot be empty",
|
||||
"profile.usernameRule": "Username can only contain letters, numbers, or underscores",
|
||||
"profile.usernameTooLong": "Username cannot exceed 64 characters",
|
||||
"profile.usernameUpdateFailed": "Failed to update username, please try again later",
|
||||
"signin.subtitle": "Sign up or log in to your {{appName}} account",
|
||||
"signin.title": "Agent teammates that grow with you",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "Ingrese un nombre de usuario con letras, números o guiones bajos",
|
||||
"profile.usernameRequired": "El nombre de usuario no puede estar vacío",
|
||||
"profile.usernameRule": "El nombre de usuario solo puede contener letras, números o guiones bajos",
|
||||
"profile.usernameTooLong": "El nombre de usuario no puede exceder los 64 caracteres",
|
||||
"profile.usernameUpdateFailed": "Error al actualizar el nombre de usuario, intente más tarde",
|
||||
"signin.subtitle": "Regístrese o inicie sesión en su cuenta de {{appName}}",
|
||||
"signin.title": "Equipos de agentes que crecen contigo",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "نام کاربری شامل حروف، اعداد یا زیرخط وارد کنید",
|
||||
"profile.usernameRequired": "نام کاربری نمیتواند خالی باشد",
|
||||
"profile.usernameRule": "نام کاربری فقط میتواند شامل حروف، اعداد یا زیرخط باشد",
|
||||
"profile.usernameTooLong": "نام کاربری نمیتواند بیش از ۶۴ کاراکتر باشد",
|
||||
"profile.usernameUpdateFailed": "بهروزرسانی نام کاربری ناموفق بود، لطفاً بعداً دوباره تلاش کنید",
|
||||
"signin.subtitle": "برای ورود یا ثبتنام در حساب {{appName}}",
|
||||
"signin.title": "تیمهای نمایندگی که همراه با شما رشد میکنند",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "Saisissez un nom d'utilisateur avec lettres, chiffres ou tirets bas",
|
||||
"profile.usernameRequired": "Le nom d'utilisateur ne peut pas être vide",
|
||||
"profile.usernameRule": "Le nom d'utilisateur ne peut contenir que des lettres, chiffres ou tirets bas",
|
||||
"profile.usernameTooLong": "Le nom d'utilisateur ne peut pas dépasser 64 caractères",
|
||||
"profile.usernameUpdateFailed": "Échec de la mise à jour du nom d'utilisateur, veuillez réessayer plus tard",
|
||||
"signin.subtitle": "Inscrivez-vous ou connectez-vous à votre compte {{appName}}",
|
||||
"signin.title": "Des équipes d’agents qui évoluent avec vous",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "Inserisci un nome utente con lettere, numeri o underscore",
|
||||
"profile.usernameRequired": "Il nome utente non può essere vuoto",
|
||||
"profile.usernameRule": "Il nome utente può contenere solo lettere, numeri o underscore",
|
||||
"profile.usernameTooLong": "Il nome utente non può superare i 64 caratteri",
|
||||
"profile.usernameUpdateFailed": "Aggiornamento nome utente non riuscito, riprova più tardi",
|
||||
"signin.subtitle": "Registrati o accedi al tuo account {{appName}}",
|
||||
"signin.title": "Team di agenti che crescono con te",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "英字、数字、またはアンダースコアで構成されたユーザー名を入力してください",
|
||||
"profile.usernameRequired": "ユーザー名は必須です",
|
||||
"profile.usernameRule": "ユーザー名は英字、数字、またはアンダースコアのみ使用できます",
|
||||
"profile.usernameTooLong": "ユーザー名は 64 文字を超えることはできません",
|
||||
"profile.usernameUpdateFailed": "ユーザー名の更新に失敗しました。しばらくしてから再試行してください",
|
||||
"signin.subtitle": "{{appName}} アカウントに登録またはログインする",
|
||||
"signin.title": "あなたと共に成長するエージェントチーム",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "영문자, 숫자 또는 밑줄(_)로 구성된 사용자 이름을 입력하세요",
|
||||
"profile.usernameRequired": "사용자 이름은 필수 항목입니다",
|
||||
"profile.usernameRule": "사용자 이름은 영문자, 숫자 또는 밑줄(_)만 사용할 수 있습니다",
|
||||
"profile.usernameTooLong": "사용자 이름은 64자를 초과할 수 없습니다",
|
||||
"profile.usernameUpdateFailed": "사용자 이름 업데이트에 실패했습니다. 잠시 후 다시 시도해 주세요",
|
||||
"signin.subtitle": "{{appName}} 계정에 가입하거나 로그인하세요",
|
||||
"signin.title": "함께 성장하는 에이전트 팀",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "Voer een gebruikersnaam in met letters, cijfers of underscores",
|
||||
"profile.usernameRequired": "Gebruikersnaam mag niet leeg zijn",
|
||||
"profile.usernameRule": "Gebruikersnaam mag alleen letters, cijfers of underscores bevatten",
|
||||
"profile.usernameTooLong": "Gebruikersnaam mag niet langer zijn dan 64 tekens",
|
||||
"profile.usernameUpdateFailed": "Bijwerken van gebruikersnaam mislukt, probeer het later opnieuw",
|
||||
"signin.subtitle": "Registreer of log in op je {{appName}}-account",
|
||||
"signin.title": "Agententeams die met je meegroeien",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "Wprowadź nazwę użytkownika z literami, cyframi lub podkreśleniami",
|
||||
"profile.usernameRequired": "Nazwa użytkownika nie może być pusta",
|
||||
"profile.usernameRule": "Nazwa użytkownika może zawierać tylko litery, cyfry lub podkreślenia",
|
||||
"profile.usernameTooLong": "Nazwa użytkownika nie może przekraczać 64 znaków",
|
||||
"profile.usernameUpdateFailed": "Nie udało się zaktualizować nazwy użytkownika, spróbuj ponownie później",
|
||||
"signin.subtitle": "Zarejestruj się lub zaloguj do swojego konta {{appName}}",
|
||||
"signin.title": "Zespoły agentów, które rosną razem z Tobą",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "Digite um nome de usuário com letras, números ou sublinhados",
|
||||
"profile.usernameRequired": "Nome de usuário não pode estar vazio",
|
||||
"profile.usernameRule": "O nome de usuário pode conter apenas letras, números ou sublinhados",
|
||||
"profile.usernameTooLong": "O nome de usuário não pode exceder 64 caracteres",
|
||||
"profile.usernameUpdateFailed": "Falha ao atualizar nome de usuário, tente novamente mais tarde",
|
||||
"signin.subtitle": "Cadastre-se ou entre na sua conta {{appName}}",
|
||||
"signin.title": "Equipes de agentes que crescem com você",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "Введите имя с буквами, цифрами или подчёркиванием",
|
||||
"profile.usernameRequired": "Имя пользователя не может быть пустым",
|
||||
"profile.usernameRule": "Имя пользователя может содержать только буквы, цифры или подчёркивания",
|
||||
"profile.usernameTooLong": "Имя пользователя не может превышать 64 символа",
|
||||
"profile.usernameUpdateFailed": "Не удалось обновить имя пользователя, попробуйте позже",
|
||||
"signin.subtitle": "Зарегистрируйтесь или войдите в аккаунт {{appName}}",
|
||||
"signin.title": "Команды агентов, растущие вместе с вами",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "Harf, rakam veya alt çizgi içeren bir kullanıcı adı girin",
|
||||
"profile.usernameRequired": "Kullanıcı adı boş bırakılamaz",
|
||||
"profile.usernameRule": "Kullanıcı adı yalnızca harf, rakam veya alt çizgi içerebilir",
|
||||
"profile.usernameTooLong": "Kullanıcı adı 64 karakterden uzun olamaz",
|
||||
"profile.usernameUpdateFailed": "Kullanıcı adı güncellenemedi, lütfen daha sonra tekrar deneyin",
|
||||
"signin.subtitle": "{{appName}} hesabınıza giriş yapın veya kayıt olun",
|
||||
"signin.title": "Sizinle birlikte büyüyen temsilci ekipleri",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "Nhập tên người dùng gồm chữ, số hoặc dấu gạch dưới",
|
||||
"profile.usernameRequired": "Tên người dùng không được để trống",
|
||||
"profile.usernameRule": "Tên người dùng chỉ được chứa chữ, số hoặc dấu gạch dưới",
|
||||
"profile.usernameTooLong": "Tên người dùng không được vượt quá 64 ký tự",
|
||||
"profile.usernameUpdateFailed": "Cập nhật tên người dùng thất bại, vui lòng thử lại sau",
|
||||
"signin.subtitle": "Đăng ký hoặc đăng nhập vào tài khoản {{appName}} của bạn",
|
||||
"signin.title": "Đội ngũ đại lý phát triển cùng bạn",
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@
|
|||
"profile.usernamePlaceholder": "請輸入由字母、數字或底線組成的使用者名稱",
|
||||
"profile.usernameRequired": "使用者名稱不能為空",
|
||||
"profile.usernameRule": "使用者名稱僅支援字母、數字或底線",
|
||||
"profile.usernameTooLong": "用戶名不能超過 64 個字元",
|
||||
"profile.usernameUpdateFailed": "更新使用者名稱失敗,請稍後再試",
|
||||
"signin.subtitle": "註冊或登入你的 {{appName}} 帳號",
|
||||
"signin.title": "與您一同成長的代理團隊",
|
||||
|
|
|
|||
Loading…
Reference in a new issue