fix(#2147): add profile_concept keys to all locale blocks and update existing test
This commit is contained in:
1 parent
e9b17b1a52
commit
453b9696e3
2 files changed
+104
-7
No files matched your search
+92
-1
@@ -1,4 +1,4 @@
|
||||
// ── i18n: locale bundles and t() helper ──────────────────────────────────────
|
||||
// ── i18n: locale bundles and t() helper ──────────────────────────────────────
|
||||
// To add a new language: add an entry to LOCALES below with all keys translated.
|
||||
// The language code must match a valid BCP 47 tag (used for speech recognition).
|
||||
// Keys missing in a non-English locale fall back to English automatically.
|
||||
@@ -3328,6 +3328,13 @@ const LOCALES = {
|
||||
profile_switch_title: 'Passa a questo profilo',
|
||||
profile_delete_title: 'Elimina questo profilo',
|
||||
profile_default_label: '(predefinito)',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_name_placeholder: 'Nome profilo (minuscole, a-z 0-9 trattini)',
|
||||
profile_clone_label: 'Clona config dal profilo attivo',
|
||||
profile_model_label: 'Modello / provider',
|
||||
@@ -5071,6 +5078,13 @@ const LOCALES = {
|
||||
profile_switch_title: 'このプロファイルに切り替え',
|
||||
profile_delete_title: 'このプロファイルを削除',
|
||||
profile_default_label: '(デフォルト)',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_name_placeholder: 'プロファイル名 (小文字 a-z 0-9 ハイフン)',
|
||||
profile_clone_label: 'アクティブプロファイルから設定をコピー',
|
||||
profile_model_label: 'モデル / プロバイダー',
|
||||
@@ -6423,6 +6437,13 @@ const LOCALES = {
|
||||
profile_switch_title: 'Переключиться на этот профиль',
|
||||
profile_delete_title: 'Удалить этот профиль',
|
||||
profile_default_label: '(по умолчанию)',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_name_placeholder: 'Название профиля (строчные буквы, a-z, 0-9, дефисы)',
|
||||
profile_clone_label: 'Скопировать конфигурацию из активного профиля',
|
||||
profile_model_label: 'Модель / провайдер',
|
||||
@@ -8142,6 +8163,13 @@ const LOCALES = {
|
||||
profile_switch_title: 'Switch to this profile',
|
||||
profile_delete_title: 'Eliminar este perfil',
|
||||
profile_default_label: '(predeterminado)',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_name_placeholder: 'Nombre del perfil (minúsculas, a-z, 0-9, guiones)',
|
||||
profile_clone_label: 'Clonar configuración del perfil activo',
|
||||
profile_model_label: 'Modelo / proveedor',
|
||||
@@ -10149,6 +10177,13 @@ const LOCALES = {
|
||||
profile_switch_title: 'Profil wechseln',
|
||||
profile_delete_title: 'Profil löschen',
|
||||
profile_default_label: 'Standard',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_name_placeholder: 'Profilname',
|
||||
profile_clone_label: 'Klonen',
|
||||
profile_model_label: 'Modell / Anbieter',
|
||||
@@ -11499,6 +11534,13 @@ const LOCALES = {
|
||||
profile_switch_title: '切换到此配置档',
|
||||
profile_delete_title: '删除此配置档',
|
||||
profile_default_label: '(默认)',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_name_placeholder: '配置档名称(小写字母、a-z、0-9、连字符)',
|
||||
profile_clone_label: '复制当前配置档的配置',
|
||||
profile_model_label: '模型 / 提供商',
|
||||
@@ -13562,6 +13604,13 @@ const LOCALES = {
|
||||
profile_switch_title: '切換到此設定檔',
|
||||
profile_delete_title: '刪除此設定檔',
|
||||
profile_default_label: '(預設)',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_name_placeholder: '設定檔名稱(小寫字母、數字、連字號)',
|
||||
profile_clone_label: '從啟用中的設定檔複製設定',
|
||||
profile_model_label: '模型 / 供應商',
|
||||
@@ -16755,6 +16804,13 @@ const LOCALES = {
|
||||
profile_switch_title: 'Switch to this profile',
|
||||
profile_delete_title: 'Delete this profile',
|
||||
profile_default_label: '(default)',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_name_placeholder: 'Profile name (lowercase, a-z 0-9 hyphens)',
|
||||
profile_clone_label: 'Clone config from active profile',
|
||||
profile_model_label: 'Model / provider',
|
||||
@@ -18570,6 +18626,13 @@ const LOCALES = {
|
||||
profile_switch_title: 'Basculer vers ce profil',
|
||||
profile_delete_title: 'Supprimer ce profil',
|
||||
profile_default_label: '(par défaut)',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_name_placeholder: 'Nom du profil (minuscules, a-z 0-9 tirets)',
|
||||
profile_clone_label: 'Cloner la configuration du profil actif',
|
||||
profile_model_label: 'Modèle / fournisseur',
|
||||
@@ -19362,6 +19425,13 @@ const LOCALES = {
|
||||
profile_clone_label: 'Klonovat konfiguraci z aktivního profilu',
|
||||
profile_created: (name) => `Profil vytvořen: ${name}`,
|
||||
profile_default_label: '(výchozí)',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_delete_confirm_message: 'Všechny relace, konfigurace, dovednosti a paměť tohoto profilu budou trvale smazány. Toto nelze vrátit zpět.',
|
||||
profile_delete_confirm_title: (name) => `Smazat profil "${name}"?`,
|
||||
profile_delete_title: 'Smazat tento profil',
|
||||
@@ -21908,6 +21978,13 @@ const LOCALES = {
|
||||
profile_switch_title: 'Bu profile geç',
|
||||
profile_delete_title: 'Bu profili sil',
|
||||
profile_default_label: '(varsayılan)',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_name_placeholder: 'Profil adı (küçük harf, a-z 0-9 kısa çizgiler)',
|
||||
profile_clone_label: 'Etkin profilden yapılandırmayı kopyala',
|
||||
profile_model_label: 'Model / sağlayıcı',
|
||||
@@ -23731,6 +23808,13 @@ const LOCALES = {
|
||||
profile_switch_title: 'Przełącz na ten profil',
|
||||
profile_delete_title: 'Usuń ten profil',
|
||||
profile_default_label: '(domyślny)',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_name_placeholder: 'Nazwa profilu (małe litery, a-z 0-9, myślniki)',
|
||||
profile_clone_label: 'Klonuj konfigurację z aktywnego profilu',
|
||||
profile_model_label: 'Model / dostawca',
|
||||
@@ -25300,6 +25384,13 @@ const LOCALES = {
|
||||
profile_switch_title: 'Chuyển sang hồ sơ này',
|
||||
profile_delete_title: 'Xóa profile này',
|
||||
profile_default_label: '(mặc định)',
|
||||
profile_concept_title: 'Profiles vs workspaces',
|
||||
profile_concept_subtitle: 'Use profiles for how the agent works; use workspaces for what files it works on.',
|
||||
profile_concept_desc_profiles: 'Agent identity, memory, skills, model/provider config, and connected tools. Create profiles for roles like researcher, writer, marketer, or developer when those roles should carry different context or capabilities.',
|
||||
profile_concept_desc_workspaces: 'Project or product folders on disk. Use one workspace per repo/product so chat, terminal, and file browsing point at the right files.',
|
||||
profile_concept_desc_together: 'A profile can have a default workspace, but you can switch workspaces any time. Profiles answer "who is working?"; workspaces answer "where are they working?"',
|
||||
profile_concept_example: 'Example: create a "researcher" profile with web-search skills enabled and a "my-app" workspace pointing at your project folder. The researcher profile remembers your research preferences; the workspace scopes file access to that project.',
|
||||
profile_concept_workspace_binding: 'Each profile can bind its own default workspace, but switching workspaces mid-session does not switch profiles. Scheduled tasks run under the profile that created them.',
|
||||
profile_name_placeholder: 'Tên profile (chữ thường, a-z 0-9 dấu gạch ngang)',
|
||||
profile_clone_label: 'Nhân bản cấu hình từ profile đang hoạt động',
|
||||
profile_model_label: 'Model / nhà cung cấp',
|
||||
|
||||
@@ -10,18 +10,24 @@ def read(rel: str) -> str:
|
||||
|
||||
def test_profiles_panel_surfaces_profiles_vs_workspaces_help_card():
|
||||
src = read("static/panels.js")
|
||||
assert "Profiles vs workspaces" in src
|
||||
assert "Use profiles for how the agent works; use workspaces for what files it works on." in src
|
||||
assert "t('profile_concept_title')" in src
|
||||
assert "t('profile_concept_subtitle')" in src
|
||||
assert "_renderProfileConceptHelp" in src
|
||||
assert "explainer.onclick = () => _renderProfileConceptHelp" in src
|
||||
|
||||
|
||||
def test_profile_concept_help_distinguishes_how_from_where():
|
||||
i18n = read("static/i18n.js")
|
||||
assert "Agent identity, memory, skills, model/provider config, and connected tools" in i18n
|
||||
assert "Create profiles for roles like researcher, writer, marketer, or developer" in i18n
|
||||
assert "Project or product folders on disk" in i18n
|
||||
assert 'Profiles answer' in i18n
|
||||
assert 'who is working' in i18n
|
||||
assert 'where are they working' in i18n
|
||||
src = read("static/panels.js")
|
||||
assert "Agent identity, memory, skills, model/provider config, and connected tools" in src
|
||||
assert "Create profiles for roles like researcher, writer, marketer, or developer" in src
|
||||
assert "Project or product folders on disk" in src
|
||||
assert "Profiles answer “who is working?”; workspaces answer “where are they working?”" in src
|
||||
assert "t('profile_concept_desc_profiles')" in src
|
||||
assert "t('profile_concept_desc_workspaces')" in src
|
||||
assert "t('profile_concept_desc_together')" in src
|
||||
|
||||
|
||||
def test_empty_profiles_state_keeps_help_card_visible():
|
||||
|
||||
Reference in new issue
Block a user