This is an automated email from the ASF dual-hosted git repository. wu-sheng pushed a commit to branch refactor/decompose-large-files in repository https://gitbox.apache.org/repos/asf/skywalking-horizon-ui.git
commit 17405adccd8fc9ea7c093b56968dd78b82c35922 Author: Wu Sheng <[email protected]> AuthorDate: Sat Jun 27 01:35:40 2026 +0800 i18n(profiling,logs): translate the new create-flow strings into all 8 locales Wrap the profiling create-modal notices/labels (network instance + process validation, async/pprof no-instance, eBPF no-process) and the log-popout "Copied" in t(), and add 18 keys to en/zh-CN/es/pt/ja/ko/de/fr. The four profiling views had no useI18n; added the standard setup matching sibling files. --- apps/ui/src/i18n/locales/de.json | 20 +++++++++++++++++++- apps/ui/src/i18n/locales/en.json | 20 +++++++++++++++++++- apps/ui/src/i18n/locales/es.json | 20 +++++++++++++++++++- apps/ui/src/i18n/locales/fr.json | 20 +++++++++++++++++++- apps/ui/src/i18n/locales/ja.json | 20 +++++++++++++++++++- apps/ui/src/i18n/locales/ko.json | 20 +++++++++++++++++++- apps/ui/src/i18n/locales/pt.json | 20 +++++++++++++++++++- apps/ui/src/i18n/locales/zh-CN.json | 20 +++++++++++++++++++- .../layer/profiling/LayerAsyncProfilingView.vue | 4 +++- .../layer/profiling/LayerNetworkProfilingView.vue | 22 ++++++++++++---------- .../layer/profiling/LayerPprofProfilingView.vue | 4 +++- apps/ui/src/layer/profiling/NewEBPFTaskModal.vue | 7 +++++-- 12 files changed, 175 insertions(+), 22 deletions(-) diff --git a/apps/ui/src/i18n/locales/de.json b/apps/ui/src/i18n/locales/de.json index d0c4389..bff323f 100644 --- a/apps/ui/src/i18n/locales/de.json +++ b/apps/ui/src/i18n/locales/de.json @@ -1549,5 +1549,23 @@ "{n} unreachable": "{n} nicht erreichbar", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "Erreichbarkeit jeder Admin-Funktion — der BFF sendet ein GET an den relativen REST-Pfad, den die Funktion tatsächlich aufruft, und meldet, ob er [...] "Enable on OAP:": "Auf OAP aktivieren:", - "{n}/{total} reachable": "{n}/{total} erreichbar" + "{n}/{total} reachable": "{n}/{total} erreichbar", + "Copied": "Kopiert", + "Processes": "Prozesse", + "Sampling rule": "Sampling-Regel", + "when 4xx": "bei 4xx", + "when 5xx": "bei 5xx", + "capture request": "Anfrage erfassen", + "capture response": "Antwort erfassen", + "Checking processes on this instance…": "Prozesse auf dieser Instanz werden geprüft…", + "Checking processes…": "Prozesse werden geprüft…", + "No instances available for this service": "Keine Instanzen für diesen Service verfügbar", + "This instance has no profilable processes": "Diese Instanz hat keine profilierbaren Prozesse", + "Create the network profile task": "Netzwerk-Profiling-Aufgabe erstellen", + "No instances available for this service — a network profile task cannot be created.": "Keine Instanzen für diesen Service verfügbar – es kann keine Netzwerk-Profiling-Aufgabe erstellt werden.", + "This instance has no profilable processes — a network task cannot be created (network profiling needs a rover-monitored process).": "Diese Instanz hat keine profilierbaren Prozesse – es kann keine Netzwerkaufgabe erstellt werden (Netzwerk-Profiling benötigt einen von rover überwachten Prozess).", + "No instances available for this service — an async profiling task cannot be created.": "Keine Instanzen für diesen Service verfügbar – es kann keine asynchrone Profiling-Aufgabe erstellt werden.", + "No instances available for this service — a pprof task cannot be created.": "Keine Instanzen für diesen Service verfügbar – es kann keine pprof-Aufgabe erstellt werden.", + "OAP reports no profilable processes for this service.": "OAP meldet keine profilierbaren Prozesse für diesen Service.", + "OAP reports no profilable processes for this service": "OAP meldet keine profilierbaren Prozesse für diesen Service" } diff --git a/apps/ui/src/i18n/locales/en.json b/apps/ui/src/i18n/locales/en.json index 10d1945..d772b8d 100644 --- a/apps/ui/src/i18n/locales/en.json +++ b/apps/ui/src/i18n/locales/en.json @@ -1549,5 +1549,23 @@ "{n} unreachable": "{n} unreachable", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is th [...] "Enable on OAP:": "Enable on OAP:", - "{n}/{total} reachable": "{n}/{total} reachable" + "{n}/{total} reachable": "{n}/{total} reachable", + "Copied": "Copied", + "Processes": "Processes", + "Sampling rule": "Sampling rule", + "when 4xx": "when 4xx", + "when 5xx": "when 5xx", + "capture request": "capture request", + "capture response": "capture response", + "Checking processes on this instance…": "Checking processes on this instance…", + "Checking processes…": "Checking processes…", + "No instances available for this service": "No instances available for this service", + "This instance has no profilable processes": "This instance has no profilable processes", + "Create the network profile task": "Create the network profile task", + "No instances available for this service — a network profile task cannot be created.": "No instances available for this service — a network profile task cannot be created.", + "This instance has no profilable processes — a network task cannot be created (network profiling needs a rover-monitored process).": "This instance has no profilable processes — a network task cannot be created (network profiling needs a rover-monitored process).", + "No instances available for this service — an async profiling task cannot be created.": "No instances available for this service — an async profiling task cannot be created.", + "No instances available for this service — a pprof task cannot be created.": "No instances available for this service — a pprof task cannot be created.", + "OAP reports no profilable processes for this service.": "OAP reports no profilable processes for this service.", + "OAP reports no profilable processes for this service": "OAP reports no profilable processes for this service" } diff --git a/apps/ui/src/i18n/locales/es.json b/apps/ui/src/i18n/locales/es.json index 107a9f1..5117e2a 100644 --- a/apps/ui/src/i18n/locales/es.json +++ b/apps/ui/src/i18n/locales/es.json @@ -1549,5 +1549,23 @@ "{n} unreachable": "{n} inaccesible(s)", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "Accesibilidad de cada función de administración: el BFF hace un GET a la ruta REST relativa que la función realmente llama e informa si responde. [...] "Enable on OAP:": "Activar en OAP:", - "{n}/{total} reachable": "{n}/{total} accesibles" + "{n}/{total} reachable": "{n}/{total} accesibles", + "Copied": "Copiado", + "Processes": "Procesos", + "Sampling rule": "Regla de muestreo", + "when 4xx": "cuando 4xx", + "when 5xx": "cuando 5xx", + "capture request": "capturar solicitud", + "capture response": "capturar respuesta", + "Checking processes on this instance…": "Comprobando los procesos de esta instancia…", + "Checking processes…": "Comprobando procesos…", + "No instances available for this service": "No hay instancias disponibles para este servicio", + "This instance has no profilable processes": "Esta instancia no tiene procesos perfilables", + "Create the network profile task": "Crear la tarea de perfilado de red", + "No instances available for this service — a network profile task cannot be created.": "No hay instancias disponibles para este servicio: no se puede crear una tarea de perfilado de red.", + "This instance has no profilable processes — a network task cannot be created (network profiling needs a rover-monitored process).": "Esta instancia no tiene procesos perfilables: no se puede crear una tarea de red (el perfilado de red necesita un proceso monitorizado por rover).", + "No instances available for this service — an async profiling task cannot be created.": "No hay instancias disponibles para este servicio: no se puede crear una tarea de perfilado asíncrono.", + "No instances available for this service — a pprof task cannot be created.": "No hay instancias disponibles para este servicio: no se puede crear una tarea de pprof.", + "OAP reports no profilable processes for this service.": "OAP informa de que no hay procesos perfilables para este servicio.", + "OAP reports no profilable processes for this service": "OAP informa de que no hay procesos perfilables para este servicio" } diff --git a/apps/ui/src/i18n/locales/fr.json b/apps/ui/src/i18n/locales/fr.json index 518256d..4445a7e 100644 --- a/apps/ui/src/i18n/locales/fr.json +++ b/apps/ui/src/i18n/locales/fr.json @@ -1549,5 +1549,23 @@ "{n} unreachable": "{n} inaccessible(s)", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "Accessibilité de chaque fonctionnalité d'administration — le BFF envoie un GET sur le chemin REST relatif que la fonctionnalité appelle réellemen [...] "Enable on OAP:": "Activer sur OAP :", - "{n}/{total} reachable": "{n}/{total} accessibles" + "{n}/{total} reachable": "{n}/{total} accessibles", + "Copied": "Copié", + "Processes": "Processus", + "Sampling rule": "Règle d'échantillonnage", + "when 4xx": "si 4xx", + "when 5xx": "si 5xx", + "capture request": "capturer la requête", + "capture response": "capturer la réponse", + "Checking processes on this instance…": "Vérification des processus de cette instance…", + "Checking processes…": "Vérification des processus…", + "No instances available for this service": "Aucune instance disponible pour ce service", + "This instance has no profilable processes": "Cette instance n'a aucun processus profilable", + "Create the network profile task": "Créer la tâche de profilage réseau", + "No instances available for this service — a network profile task cannot be created.": "Aucune instance disponible pour ce service — impossible de créer une tâche de profilage réseau.", + "This instance has no profilable processes — a network task cannot be created (network profiling needs a rover-monitored process).": "Cette instance n'a aucun processus profilable — impossible de créer une tâche réseau (le profilage réseau nécessite un processus surveillé par rover).", + "No instances available for this service — an async profiling task cannot be created.": "Aucune instance disponible pour ce service — impossible de créer une tâche de profilage asynchrone.", + "No instances available for this service — a pprof task cannot be created.": "Aucune instance disponible pour ce service — impossible de créer une tâche pprof.", + "OAP reports no profilable processes for this service.": "OAP signale qu'aucun processus profilable n'est disponible pour ce service.", + "OAP reports no profilable processes for this service": "OAP signale qu'aucun processus profilable n'est disponible pour ce service" } diff --git a/apps/ui/src/i18n/locales/ja.json b/apps/ui/src/i18n/locales/ja.json index bcb8878..1b66010 100644 --- a/apps/ui/src/i18n/locales/ja.json +++ b/apps/ui/src/i18n/locales/ja.json @@ -1549,5 +1549,23 @@ "{n} unreachable": "{n} 件が到達不可", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "各管理機能の到達可能性 —— BFF は機能が実際に呼び出す相対 REST パスへ GET し、応答するかどうかを報告します。健全性は設定の有無ではなくライブプローブで判定されます。404 を返すパス(selector が無効、リネーム、またはフォークで欠落)は到達不可とみなされます。下の [...] "Enable on OAP:": "OAP で有効化:", - "{n}/{total} reachable": "{n}/{total} 件が到達可能" + "{n}/{total} reachable": "{n}/{total} 件が到達可能", + "Copied": "コピーしました", + "Processes": "プロセス", + "Sampling rule": "サンプリングルール", + "when 4xx": "4xx のとき", + "when 5xx": "5xx のとき", + "capture request": "リクエストをキャプチャ", + "capture response": "レスポンスをキャプチャ", + "Checking processes on this instance…": "このインスタンスのプロセスを確認しています…", + "Checking processes…": "プロセスを確認しています…", + "No instances available for this service": "このサービスには利用可能なインスタンスがありません", + "This instance has no profilable processes": "このインスタンスにはプロファイル可能なプロセスがありません", + "Create the network profile task": "ネットワークプロファイルタスクを作成", + "No instances available for this service — a network profile task cannot be created.": "このサービスには利用可能なインスタンスがありません — ネットワークプロファイルタスクを作成できません。", + "This instance has no profilable processes — a network task cannot be created (network profiling needs a rover-monitored process).": "このインスタンスにはプロファイル可能なプロセスがありません — ネットワークタスクを作成できません(ネットワークプロファイリングには rover で監視されるプロセスが必要です)。", + "No instances available for this service — an async profiling task cannot be created.": "このサービスには利用可能なインスタンスがありません — 非同期プロファイリングタスクを作成できません。", + "No instances available for this service — a pprof task cannot be created.": "このサービスには利用可能なインスタンスがありません — pprof タスクを作成できません。", + "OAP reports no profilable processes for this service.": "OAP はこのサービスにプロファイル可能なプロセスがないと報告しています。", + "OAP reports no profilable processes for this service": "OAP はこのサービスにプロファイル可能なプロセスがないと報告しています" } diff --git a/apps/ui/src/i18n/locales/ko.json b/apps/ui/src/i18n/locales/ko.json index 680a3a9..74f28bb 100644 --- a/apps/ui/src/i18n/locales/ko.json +++ b/apps/ui/src/i18n/locales/ko.json @@ -1549,5 +1549,23 @@ "{n} unreachable": "{n}개 도달 불가", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "각 관리 기능의 도달 가능성 — BFF가 해당 기능이 실제로 호출하는 상대 REST 경로로 GET 요청을 보내 응답 여부를 보고합니다. 상태는 설정 존재 여부가 아니라 실시간 프로브로 판단합니다. 404를 반환하는 경로(selector 꺼짐, 이름 변경 또는 [...] "Enable on OAP:": "OAP에서 활성화:", - "{n}/{total} reachable": "{n}/{total}개 도달 가능" + "{n}/{total} reachable": "{n}/{total}개 도달 가능", + "Copied": "복사됨", + "Processes": "프로세스", + "Sampling rule": "샘플링 규칙", + "when 4xx": "4xx일 때", + "when 5xx": "5xx일 때", + "capture request": "요청 캡처", + "capture response": "응답 캡처", + "Checking processes on this instance…": "이 인스턴스의 프로세스를 확인하는 중…", + "Checking processes…": "프로세스를 확인하는 중…", + "No instances available for this service": "이 서비스에 사용할 수 있는 인스턴스가 없습니다", + "This instance has no profilable processes": "이 인스턴스에는 프로파일링 가능한 프로세스가 없습니다", + "Create the network profile task": "네트워크 프로파일 작업 생성", + "No instances available for this service — a network profile task cannot be created.": "이 서비스에 사용할 수 있는 인스턴스가 없습니다 — 네트워크 프로파일 작업을 생성할 수 없습니다.", + "This instance has no profilable processes — a network task cannot be created (network profiling needs a rover-monitored process).": "이 인스턴스에는 프로파일링 가능한 프로세스가 없습니다 — 네트워크 작업을 생성할 수 없습니다(네트워크 프로파일링에는 rover가 모니터링하는 프로세스가 필요합니다).", + "No instances available for this service — an async profiling task cannot be created.": "이 서비스에 사용할 수 있는 인스턴스가 없습니다 — 비동기 프로파일링 작업을 생성할 수 없습니다.", + "No instances available for this service — a pprof task cannot be created.": "이 서비스에 사용할 수 있는 인스턴스가 없습니다 — pprof 작업을 생성할 수 없습니다.", + "OAP reports no profilable processes for this service.": "OAP가 이 서비스에 프로파일링 가능한 프로세스가 없다고 보고합니다.", + "OAP reports no profilable processes for this service": "OAP가 이 서비스에 프로파일링 가능한 프로세스가 없다고 보고합니다" } diff --git a/apps/ui/src/i18n/locales/pt.json b/apps/ui/src/i18n/locales/pt.json index 8305b7f..5834829 100644 --- a/apps/ui/src/i18n/locales/pt.json +++ b/apps/ui/src/i18n/locales/pt.json @@ -1549,5 +1549,23 @@ "{n} unreachable": "{n} inacessível(is)", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "Acessibilidade de cada recurso de administração: o BFF faz um GET no caminho REST relativo que o recurso realmente chama e informa se ele respond [...] "Enable on OAP:": "Ativar no OAP:", - "{n}/{total} reachable": "{n}/{total} acessíveis" + "{n}/{total} reachable": "{n}/{total} acessíveis", + "Copied": "Copiado", + "Processes": "Processos", + "Sampling rule": "Regra de amostragem", + "when 4xx": "quando 4xx", + "when 5xx": "quando 5xx", + "capture request": "capturar requisição", + "capture response": "capturar resposta", + "Checking processes on this instance…": "Verificando os processos desta instância…", + "Checking processes…": "Verificando processos…", + "No instances available for this service": "Nenhuma instância disponível para este serviço", + "This instance has no profilable processes": "Esta instância não tem processos analisáveis", + "Create the network profile task": "Criar a tarefa de perfilamento de rede", + "No instances available for this service — a network profile task cannot be created.": "Nenhuma instância disponível para este serviço — não é possível criar uma tarefa de perfilamento de rede.", + "This instance has no profilable processes — a network task cannot be created (network profiling needs a rover-monitored process).": "Esta instância não tem processos analisáveis — não é possível criar uma tarefa de rede (o perfilamento de rede precisa de um processo monitorado pelo rover).", + "No instances available for this service — an async profiling task cannot be created.": "Nenhuma instância disponível para este serviço — não é possível criar uma tarefa de perfilamento assíncrono.", + "No instances available for this service — a pprof task cannot be created.": "Nenhuma instância disponível para este serviço — não é possível criar uma tarefa de pprof.", + "OAP reports no profilable processes for this service.": "O OAP informa que não há processos analisáveis para este serviço.", + "OAP reports no profilable processes for this service": "O OAP informa que não há processos analisáveis para este serviço" } diff --git a/apps/ui/src/i18n/locales/zh-CN.json b/apps/ui/src/i18n/locales/zh-CN.json index 2eb38b0..5a3f108 100644 --- a/apps/ui/src/i18n/locales/zh-CN.json +++ b/apps/ui/src/i18n/locales/zh-CN.json @@ -1549,5 +1549,23 @@ "{n} unreachable": "{n} 个不可达", "Reachability of each admin feature — the BFF GETs the relative REST path the feature actually calls and reports whether it responds. Health is the live probe, not config-presence: a path that 404s (selector off, renamed, or absent in a fork) reads as unreachable. 'selector detected' below is only an upstream-release hint, not the verdict.": "每个管理功能的可达性 —— BFF 会向该功能实际调用的相对 REST 路径发起 GET,并报告其是否响应。健康状态取决于实时探测,而非配置存在性:返回 404 的路径(selector 关闭、被重命名或在 fork 版本中缺失)将被视为不可达。下方的“检测到 selector”仅为上游发 [...] "Enable on OAP:": "在 OAP 上启用:", - "{n}/{total} reachable": "{n}/{total} 个可达" + "{n}/{total} reachable": "{n}/{total} 个可达", + "Copied": "已复制", + "Processes": "进程", + "Sampling rule": "采样规则", + "when 4xx": "命中 4xx 时", + "when 5xx": "命中 5xx 时", + "capture request": "捕获请求", + "capture response": "捕获响应", + "Checking processes on this instance…": "正在检查该实例上的进程…", + "Checking processes…": "正在检查进程…", + "No instances available for this service": "该服务没有可用的实例", + "This instance has no profilable processes": "该实例没有可分析的进程", + "Create the network profile task": "创建网络剖析任务", + "No instances available for this service — a network profile task cannot be created.": "该服务没有可用的实例 —— 无法创建网络剖析任务。", + "This instance has no profilable processes — a network task cannot be created (network profiling needs a rover-monitored process).": "该实例没有可分析的进程 —— 无法创建网络任务(网络剖析需要由 rover 监控的进程)。", + "No instances available for this service — an async profiling task cannot be created.": "该服务没有可用的实例 —— 无法创建异步剖析任务。", + "No instances available for this service — a pprof task cannot be created.": "该服务没有可用的实例 —— 无法创建 pprof 任务。", + "OAP reports no profilable processes for this service.": "OAP 报告该服务没有可分析的进程。", + "OAP reports no profilable processes for this service": "OAP 报告该服务没有可分析的进程" } diff --git a/apps/ui/src/layer/profiling/LayerAsyncProfilingView.vue b/apps/ui/src/layer/profiling/LayerAsyncProfilingView.vue index fdbb22a..01c6f17 100644 --- a/apps/ui/src/layer/profiling/LayerAsyncProfilingView.vue +++ b/apps/ui/src/layer/profiling/LayerAsyncProfilingView.vue @@ -25,6 +25,7 @@ --> <script setup lang="ts"> import { computed, reactive, ref, watch } from 'vue'; +import { useI18n } from 'vue-i18n'; import { useRoute } from 'vue-router'; import { useLayerInstances } from '@/layer/useLayerInstances'; import { useLayerServices } from '@/layer/useLayerServices'; @@ -42,6 +43,7 @@ import AsyncProfilingTaskDetailModal from '@/layer/profiling/AsyncProfilingTaskD import { useNewTaskPoll } from '@/layer/profiling/useNewTaskPoll'; import Icon from '@/components/icons/Icon.vue'; +const { t } = useI18n(); const route = useRoute(); const layerKey = computed(() => String(route.params.layerKey ?? '')); const { selectedId: serviceId } = useSelectedService(); @@ -354,7 +356,7 @@ function instanceName(id: string): string { :class="{ on: newTask.instances.includes(i.id) }" @click="toggleInstance(i.id, 'new')" >{{ i.name }}</button> - <span v-if="!instances.instances.value.length" class="muted">No instances available for this service — an async profiling task cannot be created.</span> + <span v-if="!instances.instances.value.length" class="muted">{{ t('No instances available for this service — an async profiling task cannot be created.') }}</span> </div> </div> <div class="field-row"> diff --git a/apps/ui/src/layer/profiling/LayerNetworkProfilingView.vue b/apps/ui/src/layer/profiling/LayerNetworkProfilingView.vue index 91bae2e..c29a047 100644 --- a/apps/ui/src/layer/profiling/LayerNetworkProfilingView.vue +++ b/apps/ui/src/layer/profiling/LayerNetworkProfilingView.vue @@ -32,6 +32,7 @@ --> <script setup lang="ts"> import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'; +import { useI18n } from 'vue-i18n'; import { useEscapeToClose } from '@/components/primitives/useEscapeToClose'; import { useRoute } from 'vue-router'; import { useLayerInstances } from '@/layer/useLayerInstances'; @@ -52,6 +53,7 @@ import TimeChart from '@/components/charts/TimeChart.vue'; import { useNewTaskPoll } from '@/layer/profiling/useNewTaskPoll'; import Icon from '@/components/icons/Icon.vue'; +const { t } = useI18n(); const route = useRoute(); const layerKey = computed(() => String(route.params.layerKey ?? '')); // Preview-only: forward the draft `processTopology` block so a clicked @@ -479,15 +481,15 @@ function fmtTime(ms: number): string { </select> </div> <div v-if="!instances.instances.value.length" class="banner err"> - No instances available for this service — a network profile task cannot be created. + {{ t('No instances available for this service — a network profile task cannot be created.') }} </div> <template v-else-if="selectedInstanceId"> - <div v-if="processesLoading" class="hint">Checking processes on this instance…</div> + <div v-if="processesLoading" class="hint">{{ t('Checking processes on this instance…') }}</div> <div v-else-if="!networkProcesses.length" class="banner err"> - This instance has no profilable processes — a network task cannot be created (network profiling needs a rover-monitored process). + {{ t('This instance has no profilable processes — a network task cannot be created (network profiling needs a rover-monitored process).') }} </div> <div v-else class="proc-list"> - <span class="proc-list-label">Processes ({{ networkProcesses.length }})</span> + <span class="proc-list-label">{{ t('Processes') }} ({{ networkProcesses.length }})</span> <span v-for="p in networkProcesses" :key="p.id" class="proc-chip">{{ p.name }}</span> </div> </template> @@ -497,7 +499,7 @@ function fmtTime(ms: number): string { </p> <div v-for="(s, i) in samplings" :key="i" class="sampling"> <div class="sampling-head"> - <strong>Sampling rule {{ i + 1 }}</strong> + <strong>{{ t('Sampling rule') }} {{ i + 1 }}</strong> <button v-if="samplings.length > 1" class="del" @@ -516,10 +518,10 @@ function fmtTime(ms: number): string { </div> </div> <div class="check-row"> - <label class="cb"><input type="checkbox" v-model="s.when4xx" /> when 4xx</label> - <label class="cb"><input type="checkbox" v-model="s.when5xx" /> when 5xx</label> - <label class="cb"><input type="checkbox" v-model="s.settings.requireCompleteRequest" /> capture request</label> - <label class="cb"><input type="checkbox" v-model="s.settings.requireCompleteResponse" /> capture response</label> + <label class="cb"><input type="checkbox" v-model="s.when4xx" /> {{ t('when 4xx') }}</label> + <label class="cb"><input type="checkbox" v-model="s.when5xx" /> {{ t('when 5xx') }}</label> + <label class="cb"><input type="checkbox" v-model="s.settings.requireCompleteRequest" /> {{ t('capture request') }}</label> + <label class="cb"><input type="checkbox" v-model="s.settings.requireCompleteResponse" /> {{ t('capture response') }}</label> </div> </div> <button class="btn-secondary" type="button" @click="addSampling">+ add another sampling rule</button> @@ -530,7 +532,7 @@ function fmtTime(ms: number): string { <button class="btn-primary" :disabled="!selectedInstanceId || processesLoading || !networkProcesses.length" - :title="!selectedInstanceId ? 'No instances available for this service' : processesLoading ? 'Checking processes…' : !networkProcesses.length ? 'This instance has no profilable processes' : 'Create the network profile task'" + :title="!selectedInstanceId ? t('No instances available for this service') : processesLoading ? t('Checking processes…') : !networkProcesses.length ? t('This instance has no profilable processes') : t('Create the network profile task')" @click="submitNewTask" >Create task</button> </div> diff --git a/apps/ui/src/layer/profiling/LayerPprofProfilingView.vue b/apps/ui/src/layer/profiling/LayerPprofProfilingView.vue index 0a3a4ce..0259bac 100644 --- a/apps/ui/src/layer/profiling/LayerPprofProfilingView.vue +++ b/apps/ui/src/layer/profiling/LayerPprofProfilingView.vue @@ -25,6 +25,7 @@ --> <script setup lang="ts"> import { computed, reactive, ref, watch } from 'vue'; +import { useI18n } from 'vue-i18n'; import { useRoute } from 'vue-router'; import { useLayerInstances } from '@/layer/useLayerInstances'; import { useLayerServices } from '@/layer/useLayerServices'; @@ -41,6 +42,7 @@ import PprofTaskDetailModal from '@/layer/profiling/PprofTaskDetailModal.vue'; import { useNewTaskPoll } from '@/layer/profiling/useNewTaskPoll'; import Icon from '@/components/icons/Icon.vue'; +const { t } = useI18n(); const route = useRoute(); const layerKey = computed(() => String(route.params.layerKey ?? '')); const { selectedId: serviceId } = useSelectedService(); @@ -322,7 +324,7 @@ function instanceName(id: string): string { :class="{ on: newTask.instances.includes(i.id) }" @click="toggleInstance(i.id, 'new')" >{{ i.name }}</button> - <span v-if="!instances.instances.value.length" class="muted">No instances available for this service — a pprof task cannot be created.</span> + <span v-if="!instances.instances.value.length" class="muted">{{ t('No instances available for this service — a pprof task cannot be created.') }}</span> </div> </div> <div class="field"> diff --git a/apps/ui/src/layer/profiling/NewEBPFTaskModal.vue b/apps/ui/src/layer/profiling/NewEBPFTaskModal.vue index 220d59e..63dd9b2 100644 --- a/apps/ui/src/layer/profiling/NewEBPFTaskModal.vue +++ b/apps/ui/src/layer/profiling/NewEBPFTaskModal.vue @@ -23,6 +23,7 @@ --> <script setup lang="ts"> import { reactive, watch } from 'vue'; +import { useI18n } from 'vue-i18n'; import { useEscapeToClose } from '@/components/primitives/useEscapeToClose'; import type { EBPFTargetType } from '@/api/client'; import type { NewEBPFTaskPayload } from '@/layer/profiling/useEBPFProfiling'; @@ -39,6 +40,8 @@ const emit = defineEmits<{ (e: 'submit', payload: NewEBPFTaskPayload): void; }>(); +const { t } = useI18n(); + const newTask = reactive({ labels: [] as string[], targetType: 'ON_CPU' as EBPFTargetType, @@ -93,7 +96,7 @@ function submit(): void { </div> <div class="dlg-body"> <div v-if="!couldProfiling" class="dlg-warn"> - <strong>OAP reports no profilable processes for this service.</strong> + <strong>{{ t('OAP reports no profilable processes for this service.') }}</strong> <span>A new task can't run until OAP sees an eBPF-profilable process. Check that:</span> <ul> <li>instances are running and instrumented;</li> @@ -155,7 +158,7 @@ function submit(): void { <button class="btn-primary" :disabled="!couldProfiling" - :title="couldProfiling ? '' : 'OAP reports no profilable processes for this service'" + :title="couldProfiling ? '' : t('OAP reports no profilable processes for this service')" @click="submit" >Create task</button> </div>
