fix: standardize i18n pluralization to two-part format (#9371)

## Summary

- Converts redundant three-part pluralization patterns (`zero | singular
| plural`) to standard two-part format (`singular | plural`) across 11
locale files
- Only converts patterns where the zero form duplicates the singular or
plural form
- Retains three-part patterns where the zero form provides distinct
content (e.g. `"No items selected"`) or where the language
linguistically requires all three forms (Russian singular/paucal/plural)

## Context

Vue i18n selects plural forms based on the number of choices:

**3-part** `"{count} nodes | {count} node | {count} nodes"`:
| count | index | result |
|-------|-------|--------|
| 0 | 0 (zero) | "0 nodes" |
| 1 | 1 (singular) | "1 node" |
| 2+ | 2 (plural) | "N nodes" |

**2-part** `"{count} node | {count} nodes"`:
| count | index | result |
|-------|-------|--------|
| 0 | 1 (plural) | "0 nodes" |
| 1 | 0 (singular) | "1 node" |
| 2+ | 1 (plural) | "N nodes" |

Output is identical — the zero form was always a duplicate of the plural
form. This PR removes that redundancy.

## Changes

| Locale | Keys changed |
|--------|-------------|
| en, es, fr, pt-BR, ar, tr | 5 (`nodesCount`, `asset`, `errorCount`,
`downloadsFailed`, `exportFailed`) |
| ja, ko, fa | 3 (`asset`, `nodesCount`, `downloadsFailed`) |
| ru | 2 (`downloadsFailed`, `exportFailed`) |
| zh-TW | 2 (`nodesCount`, `downloadsFailed`) |

## Test plan

- [ ] Verify pluralization renders correctly for count=0, count=1,
count=2+ in affected UI areas
- [ ] Spot-check non-English locales (especially Russian which retains
3-part for linguistically distinct forms)

- Fixes #9277

---------

Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Christian Byrne <cbyrne@comfy.org>
This commit is contained in:
Dante
2026-03-13 10:16:59 +09:00
committed by GitHub
parent d82bce90ea
commit 649b9b3fe3
9 changed files with 36 additions and 36 deletions

View File

@@ -862,7 +862,7 @@
"promptExecutionError": "فشل تنفيذ الطلب" "promptExecutionError": "فشل تنفيذ الطلب"
}, },
"errorOverlay": { "errorOverlay": {
"errorCount": "{count} أخطاء | {count} خطأ | {count} أخطاء", "errorCount": "{count} خطأ | {count} أخطاء",
"seeErrors": "عرض الأخطاء" "seeErrors": "عرض الأخطاء"
}, },
"essentials": { "essentials": {
@@ -909,7 +909,7 @@
"downloadFailed": "فشل تحميل \"{name}\"", "downloadFailed": "فشل تحميل \"{name}\"",
"exportCompleted": "تحميل ZIP جاهز", "exportCompleted": "تحميل ZIP جاهز",
"exportError": "فشل التصدير", "exportError": "فشل التصدير",
"exportFailed": "{count} فشل في التصدير | {count} فشل في التصدير | {count} عمليات تصدير فشلت", "exportFailed": "{count} فشل في التصدير | {count} عمليات تصدير فشلت",
"exportFailedSingle": "فشل إنشاء تصدير ZIP", "exportFailedSingle": "فشل إنشاء تصدير ZIP",
"exportStarted": "يتم تجهيز تحميل ZIP...", "exportStarted": "يتم تجهيز تحميل ZIP...",
"exportingAssets": "جاري تصدير العناصر", "exportingAssets": "جاري تصدير العناصر",
@@ -928,7 +928,7 @@
"amount": "الكمية", "amount": "الكمية",
"apply": "تطبيق", "apply": "تطبيق",
"architecture": "الهندسة المعمارية", "architecture": "الهندسة المعمارية",
"asset": "{count} أصل | {count} أصل | {count} أصول", "asset": "{count} أصل | {count} أصول",
"audioFailedToLoad": "فشل تحميل الصوت", "audioFailedToLoad": "فشل تحميل الصوت",
"audioProgress": "تقدم الصوت", "audioProgress": "تقدم الصوت",
"author": "المؤلف", "author": "المؤلف",
@@ -1114,7 +1114,7 @@
"nodeSlotsError": "خطأ في فتحات العقدة", "nodeSlotsError": "خطأ في فتحات العقدة",
"nodeWidgetsError": "خطأ في عناصر واجهة العقدة", "nodeWidgetsError": "خطأ في عناصر واجهة العقدة",
"nodes": "العُقَد", "nodes": "العُقَد",
"nodesCount": "{count} عقدة | {count} عقدة | {count} عقدة", "nodesCount": "{count} عقدة | {count} عقدة",
"nodesRunning": "العُقَد قيد التشغيل", "nodesRunning": "العُقَد قيد التشغيل",
"none": "لا شيء", "none": "لا شيء",
"nothingToCopy": "لا يوجد ما يمكن نسخه", "nothingToCopy": "لا يوجد ما يمكن نسخه",
@@ -2295,7 +2295,7 @@
"progressToast": { "progressToast": {
"allDownloadsCompleted": "اكتملت جميع التنزيلات", "allDownloadsCompleted": "اكتملت جميع التنزيلات",
"downloadingModel": "جاري تنزيل النموذج...", "downloadingModel": "جاري تنزيل النموذج...",
"downloadsFailed": "{count} فشل في التنزيل | {count} فشل في التنزيل | {count} فشل في التنزيل", "downloadsFailed": "{count} فشل في التنزيل | {count} فشل في التنزيل",
"failed": "فشل", "failed": "فشل",
"filter": { "filter": {
"all": "الكل", "all": "الكل",

View File

@@ -862,7 +862,7 @@
"promptExecutionError": "La ejecución del prompt falló" "promptExecutionError": "La ejecución del prompt falló"
}, },
"errorOverlay": { "errorOverlay": {
"errorCount": "{count} ERRORES | {count} ERROR | {count} ERRORES", "errorCount": "{count} ERROR | {count} ERRORES",
"seeErrors": "Ver errores" "seeErrors": "Ver errores"
}, },
"essentials": { "essentials": {
@@ -909,7 +909,7 @@
"downloadFailed": "No se pudo descargar \"{name}\"", "downloadFailed": "No se pudo descargar \"{name}\"",
"exportCompleted": "Descarga ZIP lista", "exportCompleted": "Descarga ZIP lista",
"exportError": "Error en la exportación", "exportError": "Error en la exportación",
"exportFailed": "{count} exportación fallida | {count} exportación fallida | {count} exportaciones fallidas", "exportFailed": "{count} exportación fallida | {count} exportaciones fallidas",
"exportFailedSingle": "No se pudo crear la exportación ZIP", "exportFailedSingle": "No se pudo crear la exportación ZIP",
"exportStarted": "Preparando descarga ZIP...", "exportStarted": "Preparando descarga ZIP...",
"exportingAssets": "Exportando recursos", "exportingAssets": "Exportando recursos",
@@ -928,7 +928,7 @@
"amount": "Cantidad", "amount": "Cantidad",
"apply": "Aplicar", "apply": "Aplicar",
"architecture": "Arquitectura", "architecture": "Arquitectura",
"asset": "{count} recursos | {count} recurso | {count} recursos", "asset": "{count} recurso | {count} recursos",
"audioFailedToLoad": "No se pudo cargar el audio", "audioFailedToLoad": "No se pudo cargar el audio",
"audioProgress": "Progreso de audio", "audioProgress": "Progreso de audio",
"author": "Autor", "author": "Autor",
@@ -1114,7 +1114,7 @@
"nodeSlotsError": "Error de Ranuras del Nodo", "nodeSlotsError": "Error de Ranuras del Nodo",
"nodeWidgetsError": "Error de Widgets del Nodo", "nodeWidgetsError": "Error de Widgets del Nodo",
"nodes": "Nodos", "nodes": "Nodos",
"nodesCount": "{count} nodos | {count} nodo | {count} nodos", "nodesCount": "{count} nodo | {count} nodos",
"nodesRunning": "nodos en ejecución", "nodesRunning": "nodos en ejecución",
"none": "Ninguno", "none": "Ninguno",
"nothingToCopy": "Nada para copiar", "nothingToCopy": "Nada para copiar",
@@ -2295,7 +2295,7 @@
"progressToast": { "progressToast": {
"allDownloadsCompleted": "Todas las descargas completadas", "allDownloadsCompleted": "Todas las descargas completadas",
"downloadingModel": "Descargando modelo...", "downloadingModel": "Descargando modelo...",
"downloadsFailed": "{count} descargas fallidas | {count} descarga fallida | {count} descargas fallidas", "downloadsFailed": "{count} descarga fallida | {count} descargas fallidas",
"failed": "Fallido", "failed": "Fallido",
"filter": { "filter": {
"all": "Todo", "all": "Todo",

View File

@@ -928,7 +928,7 @@
"amount": "مقدار", "amount": "مقدار",
"apply": "اعمال", "apply": "اعمال",
"architecture": "معماری", "architecture": "معماری",
"asset": "{count} دارایی | {count} دارایی | {count} دارایی", "asset": "{count} دارایی | {count} دارایی",
"audioFailedToLoad": "بارگذاری صوت ناموفق بود", "audioFailedToLoad": "بارگذاری صوت ناموفق بود",
"audioProgress": "پیشرفت صوت", "audioProgress": "پیشرفت صوت",
"author": "نویسنده", "author": "نویسنده",
@@ -1114,7 +1114,7 @@
"nodeSlotsError": "خطا در slotهای node", "nodeSlotsError": "خطا در slotهای node",
"nodeWidgetsError": "خطا در ابزارک‌های node", "nodeWidgetsError": "خطا در ابزارک‌های node",
"nodes": "nodeها", "nodes": "nodeها",
"nodesCount": "{count} نود | {count} نود | {count} نود", "nodesCount": "{count} نود | {count} نود",
"nodesRunning": "nodeها در حال اجرا هستند", "nodesRunning": "nodeها در حال اجرا هستند",
"none": "هیچ‌کدام", "none": "هیچ‌کدام",
"nothingToCopy": "موردی برای کپی وجود ندارد", "nothingToCopy": "موردی برای کپی وجود ندارد",
@@ -2295,7 +2295,7 @@
"progressToast": { "progressToast": {
"allDownloadsCompleted": "همه دانلودها تکمیل شدند", "allDownloadsCompleted": "همه دانلودها تکمیل شدند",
"downloadingModel": "در حال دانلود مدل...", "downloadingModel": "در حال دانلود مدل...",
"downloadsFailed": "{count} دانلود ناموفق بود | {count} دانلود ناموفق بود | {count} دانلود ناموفق بودند", "downloadsFailed": "{count} دانلود ناموفق بود | {count} دانلود ناموفق بودند",
"failed": "ناموفق", "failed": "ناموفق",
"filter": { "filter": {
"all": "همه", "all": "همه",

View File

@@ -862,7 +862,7 @@
"promptExecutionError": "L'exécution de l'invite a échoué" "promptExecutionError": "L'exécution de l'invite a échoué"
}, },
"errorOverlay": { "errorOverlay": {
"errorCount": "{count} ERREURS | {count} ERREUR | {count} ERREURS", "errorCount": "{count} ERREUR | {count} ERREURS",
"seeErrors": "Voir les erreurs" "seeErrors": "Voir les erreurs"
}, },
"essentials": { "essentials": {
@@ -909,7 +909,7 @@
"downloadFailed": "Échec du téléchargement de « {name} »", "downloadFailed": "Échec du téléchargement de « {name} »",
"exportCompleted": "Téléchargement ZIP prêt", "exportCompleted": "Téléchargement ZIP prêt",
"exportError": "Échec de lexportation", "exportError": "Échec de lexportation",
"exportFailed": "{count} exportation échouée | {count} exportation échouée | {count} exportations échouées", "exportFailed": "{count} exportation échouée | {count} exportations échouées",
"exportFailedSingle": "Échec de la création de lexport ZIP", "exportFailedSingle": "Échec de la création de lexport ZIP",
"exportStarted": "Préparation du téléchargement ZIP...", "exportStarted": "Préparation du téléchargement ZIP...",
"exportingAssets": "Exportation des ressources", "exportingAssets": "Exportation des ressources",
@@ -928,7 +928,7 @@
"amount": "Quantité", "amount": "Quantité",
"apply": "Appliquer", "apply": "Appliquer",
"architecture": "Architecture", "architecture": "Architecture",
"asset": "{count} ressources | {count} ressource | {count} ressources", "asset": "{count} ressource | {count} ressources",
"audioFailedToLoad": "Échec du chargement de l'audio", "audioFailedToLoad": "Échec du chargement de l'audio",
"audioProgress": "Progression audio", "audioProgress": "Progression audio",
"author": "Auteur", "author": "Auteur",
@@ -1114,7 +1114,7 @@
"nodeSlotsError": "Erreur d'emplacements du nœud", "nodeSlotsError": "Erreur d'emplacements du nœud",
"nodeWidgetsError": "Erreur de widgets du nœud", "nodeWidgetsError": "Erreur de widgets du nœud",
"nodes": "Nœuds", "nodes": "Nœuds",
"nodesCount": "{count} nœuds | {count} nœud | {count} nœuds", "nodesCount": "{count} nœud | {count} nœuds",
"nodesRunning": "nœuds en cours dexécution", "nodesRunning": "nœuds en cours dexécution",
"none": "Aucun", "none": "Aucun",
"nothingToCopy": "Rien à copier", "nothingToCopy": "Rien à copier",
@@ -2295,7 +2295,7 @@
"progressToast": { "progressToast": {
"allDownloadsCompleted": "Tous les téléchargements sont terminés", "allDownloadsCompleted": "Tous les téléchargements sont terminés",
"downloadingModel": "Téléchargement du modèle...", "downloadingModel": "Téléchargement du modèle...",
"downloadsFailed": "{count} téléchargements échoués | {count} téléchargement échoué | {count} téléchargements échoués", "downloadsFailed": "{count} téléchargement échoué | {count} téléchargements échoués",
"failed": "Échec", "failed": "Échec",
"filter": { "filter": {
"all": "Tous", "all": "Tous",

View File

@@ -928,7 +928,7 @@
"amount": "量", "amount": "量",
"apply": "適用する", "apply": "適用する",
"architecture": "アーキテクチャ", "architecture": "アーキテクチャ",
"asset": "{count} 個のアセット | {count} 個のアセット | {count} 個のアセット", "asset": "{count} 個のアセット | {count} 個のアセット",
"audioFailedToLoad": "オーディオの読み込みに失敗しました", "audioFailedToLoad": "オーディオの読み込みに失敗しました",
"audioProgress": "オーディオの進捗", "audioProgress": "オーディオの進捗",
"author": "作者", "author": "作者",
@@ -1114,7 +1114,7 @@
"nodeSlotsError": "ノードスロットエラー", "nodeSlotsError": "ノードスロットエラー",
"nodeWidgetsError": "ノードウィジェットエラー", "nodeWidgetsError": "ノードウィジェットエラー",
"nodes": "ノード", "nodes": "ノード",
"nodesCount": "{count} ノード | {count} ノード | {count} ノード", "nodesCount": "{count} ノード | {count} ノード",
"nodesRunning": "ノードが実行中", "nodesRunning": "ノードが実行中",
"none": "なし", "none": "なし",
"nothingToCopy": "コピーするものがありません", "nothingToCopy": "コピーするものがありません",
@@ -2295,7 +2295,7 @@
"progressToast": { "progressToast": {
"allDownloadsCompleted": "すべてのダウンロードが完了しました", "allDownloadsCompleted": "すべてのダウンロードが完了しました",
"downloadingModel": "モデルをダウンロード中...", "downloadingModel": "モデルをダウンロード中...",
"downloadsFailed": "{count}件のダウンロードに失敗 | {count}件のダウンロードに失敗 | {count}件のダウンロードに失敗", "downloadsFailed": "{count}件のダウンロードに失敗 | {count}件のダウンロードに失敗",
"failed": "失敗", "failed": "失敗",
"filter": { "filter": {
"all": "すべて", "all": "すべて",

View File

@@ -928,7 +928,7 @@
"amount": "수량", "amount": "수량",
"apply": "적용", "apply": "적용",
"architecture": "아키텍처", "architecture": "아키텍처",
"asset": "{count}개 에셋 | {count}개 에셋 | {count}개 에셋", "asset": "{count}개 에셋 | {count}개 에셋",
"audioFailedToLoad": "오디오를 불러오지 못했습니다", "audioFailedToLoad": "오디오를 불러오지 못했습니다",
"audioProgress": "오디오 진행률", "audioProgress": "오디오 진행률",
"author": "작성자", "author": "작성자",
@@ -1114,7 +1114,7 @@
"nodeSlotsError": "노드 슬롯 오류", "nodeSlotsError": "노드 슬롯 오류",
"nodeWidgetsError": "노드 위젯 오류", "nodeWidgetsError": "노드 위젯 오류",
"nodes": "노드", "nodes": "노드",
"nodesCount": "{count}개 노드 | {count}개 노드 | {count}개 노드", "nodesCount": "{count}개 노드 | {count}개 노드",
"nodesRunning": "노드 실행 중", "nodesRunning": "노드 실행 중",
"none": "없음", "none": "없음",
"nothingToCopy": "복사할 항목 없음", "nothingToCopy": "복사할 항목 없음",
@@ -2295,7 +2295,7 @@
"progressToast": { "progressToast": {
"allDownloadsCompleted": "모든 다운로드가 완료되었습니다", "allDownloadsCompleted": "모든 다운로드가 완료되었습니다",
"downloadingModel": "모델 다운로드 중...", "downloadingModel": "모델 다운로드 중...",
"downloadsFailed": "{count}개 다운로드 실패 | {count}개 다운로드 실패 | {count}개 다운로드 실패", "downloadsFailed": "{count}개 다운로드 실패 | {count}개 다운로드 실패",
"failed": "실패", "failed": "실패",
"filter": { "filter": {
"all": "전체", "all": "전체",

View File

@@ -862,7 +862,7 @@
"promptExecutionError": "Falha na execução do prompt" "promptExecutionError": "Falha na execução do prompt"
}, },
"errorOverlay": { "errorOverlay": {
"errorCount": "{count} ERROS | {count} ERRO | {count} ERROS", "errorCount": "{count} ERRO | {count} ERROS",
"seeErrors": "Ver erros" "seeErrors": "Ver erros"
}, },
"essentials": { "essentials": {
@@ -909,7 +909,7 @@
"downloadFailed": "Falha ao baixar \"{name}\"", "downloadFailed": "Falha ao baixar \"{name}\"",
"exportCompleted": "Download ZIP pronto", "exportCompleted": "Download ZIP pronto",
"exportError": "Falha na exportação", "exportError": "Falha na exportação",
"exportFailed": "{count} exportação falhou | {count} exportação falhou | {count} exportações falharam", "exportFailed": "{count} exportação falhou | {count} exportações falharam",
"exportFailedSingle": "Falha ao criar exportação ZIP", "exportFailedSingle": "Falha ao criar exportação ZIP",
"exportStarted": "Preparando download ZIP...", "exportStarted": "Preparando download ZIP...",
"exportingAssets": "Exportando ativos", "exportingAssets": "Exportando ativos",
@@ -928,7 +928,7 @@
"amount": "Quantidade", "amount": "Quantidade",
"apply": "Aplicar", "apply": "Aplicar",
"architecture": "Arquitetura", "architecture": "Arquitetura",
"asset": "{count} ativos | {count} ativo | {count} ativos", "asset": "{count} ativo | {count} ativos",
"audioFailedToLoad": "Falha ao carregar áudio", "audioFailedToLoad": "Falha ao carregar áudio",
"audioProgress": "Progresso do áudio", "audioProgress": "Progresso do áudio",
"author": "Autor", "author": "Autor",
@@ -1114,7 +1114,7 @@
"nodeSlotsError": "Erro nos slots do nó", "nodeSlotsError": "Erro nos slots do nó",
"nodeWidgetsError": "Erro nos widgets do nó", "nodeWidgetsError": "Erro nos widgets do nó",
"nodes": "Nós", "nodes": "Nós",
"nodesCount": "{count} nós | {count} nó | {count} nós", "nodesCount": "{count} nó | {count} nós",
"nodesRunning": "nós em execução", "nodesRunning": "nós em execução",
"none": "Nenhum", "none": "Nenhum",
"nothingToCopy": "Nada para copiar", "nothingToCopy": "Nada para copiar",
@@ -2295,7 +2295,7 @@
"progressToast": { "progressToast": {
"allDownloadsCompleted": "Todos os downloads concluídos", "allDownloadsCompleted": "Todos os downloads concluídos",
"downloadingModel": "Baixando modelo...", "downloadingModel": "Baixando modelo...",
"downloadsFailed": "{count} downloads falharam | {count} download falhou | {count} downloads falharam", "downloadsFailed": "{count} download falhou | {count} downloads falharam",
"failed": "Falhou", "failed": "Falhou",
"filter": { "filter": {
"all": "Todos", "all": "Todos",

View File

@@ -862,7 +862,7 @@
"promptExecutionError": "İstem yürütmesi başarısız oldu" "promptExecutionError": "İstem yürütmesi başarısız oldu"
}, },
"errorOverlay": { "errorOverlay": {
"errorCount": "{count} HATA | {count} HATA | {count} HATA", "errorCount": "{count} HATA | {count} HATA",
"seeErrors": "Hataları Gör" "seeErrors": "Hataları Gör"
}, },
"essentials": { "essentials": {
@@ -909,7 +909,7 @@
"downloadFailed": "\"{name}\" indirilemedi", "downloadFailed": "\"{name}\" indirilemedi",
"exportCompleted": "ZIP indirme hazır", "exportCompleted": "ZIP indirme hazır",
"exportError": "Dışa aktarma başarısız", "exportError": "Dışa aktarma başarısız",
"exportFailed": "{count} dışa aktarma başarısız oldu | {count} dışa aktarma başarısız oldu | {count} dışa aktarma başarısız oldu", "exportFailed": "{count} dışa aktarma başarısız oldu | {count} dışa aktarma başarısız oldu",
"exportFailedSingle": "ZIP dışa aktarımı oluşturulamadı", "exportFailedSingle": "ZIP dışa aktarımı oluşturulamadı",
"exportStarted": "ZIP indirme hazırlanıyor...", "exportStarted": "ZIP indirme hazırlanıyor...",
"exportingAssets": "Varlıklar dışa aktarılıyor", "exportingAssets": "Varlıklar dışa aktarılıyor",
@@ -928,7 +928,7 @@
"amount": "Miktar", "amount": "Miktar",
"apply": "Uygula", "apply": "Uygula",
"architecture": "Mimari", "architecture": "Mimari",
"asset": "{count} varlık | {count} varlık | {count} varlık", "asset": "{count} varlık | {count} varlık",
"audioFailedToLoad": "Ses yüklenemedi", "audioFailedToLoad": "Ses yüklenemedi",
"audioProgress": "Ses ilerlemesi", "audioProgress": "Ses ilerlemesi",
"author": "Yazar", "author": "Yazar",
@@ -1114,7 +1114,7 @@
"nodeSlotsError": "Düğüm Yuva Hatası", "nodeSlotsError": "Düğüm Yuva Hatası",
"nodeWidgetsError": "Düğüm Widget Hatası", "nodeWidgetsError": "Düğüm Widget Hatası",
"nodes": "Düğümler", "nodes": "Düğümler",
"nodesCount": "{count} düğüm | {count} düğüm | {count} düğüm", "nodesCount": "{count} düğüm | {count} düğüm",
"nodesRunning": "düğüm çalışıyor", "nodesRunning": "düğüm çalışıyor",
"none": "Hiçbiri", "none": "Hiçbiri",
"nothingToCopy": "Kopyalanacak bir şey yok", "nothingToCopy": "Kopyalanacak bir şey yok",
@@ -2295,7 +2295,7 @@
"progressToast": { "progressToast": {
"allDownloadsCompleted": "Tüm indirmeler tamamlandı", "allDownloadsCompleted": "Tüm indirmeler tamamlandı",
"downloadingModel": "Model indiriliyor...", "downloadingModel": "Model indiriliyor...",
"downloadsFailed": "{count} indirme başarısız oldu | {count} indirme başarısız oldu | {count} indirme başarısız oldu", "downloadsFailed": "{count} indirme başarısız oldu | {count} indirme başarısız oldu",
"failed": "Başarısız", "failed": "Başarısız",
"filter": { "filter": {
"all": "Tümü", "all": "Tümü",

View File

@@ -1114,7 +1114,7 @@
"nodeSlotsError": "節點插槽錯誤", "nodeSlotsError": "節點插槽錯誤",
"nodeWidgetsError": "節點小工具錯誤", "nodeWidgetsError": "節點小工具錯誤",
"nodes": "節點", "nodes": "節點",
"nodesCount": "{count} 個節點 | {count} 個節點 | {count} 個節點", "nodesCount": "{count} 個節點 | {count} 個節點",
"nodesRunning": "節點執行中", "nodesRunning": "節點執行中",
"none": "無", "none": "無",
"nothingToCopy": "沒有可複製的項目", "nothingToCopy": "沒有可複製的項目",
@@ -2295,7 +2295,7 @@
"progressToast": { "progressToast": {
"allDownloadsCompleted": "所有下載已完成", "allDownloadsCompleted": "所有下載已完成",
"downloadingModel": "正在下載模型...", "downloadingModel": "正在下載模型...",
"downloadsFailed": "{count} 個下載失敗 | {count} 個下載失敗 | {count} 個下載失敗", "downloadsFailed": "{count} 個下載失敗 | {count} 個下載失敗",
"failed": "失敗", "failed": "失敗",
"filter": { "filter": {
"all": "全部", "all": "全部",