Spaces:
Running
on
Zero
Running
on
Zero
Huakang Chen
commited on
Commit
·
37417b4
1
Parent(s):
f892eb4
add i18n
Browse files- i18n/README.md +27 -0
- i18n/__init__.py +3 -0
- i18n/__pycache__/__init__.cpython-310.pyc +0 -0
- i18n/__pycache__/__init__.cpython-38.pyc +0 -0
- i18n/__pycache__/core.cpython-310.pyc +0 -0
- i18n/__pycache__/core.cpython-38.pyc +0 -0
- i18n/core.py +40 -0
- i18n/locale/en_US.json +123 -0
- i18n/locale/es_ES.json +123 -0
- i18n/locale/ja_JP.json +123 -0
- i18n/locale/pt_BR.json +133 -0
- i18n/locale/zh_CN.json +123 -0
- i18n/scan.py +122 -0
i18n/README.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
## i18n Folder Attribution
|
| 2 |
+
|
| 3 |
+
The `i18n` folder within the `fish_speech` directory contains files initially sourced from the RVC project. In compliance with the MIT license under which these files were released, we acknowledge the original authors and sources below:
|
| 4 |
+
|
| 5 |
+
### fish_speech/i18n/core.py
|
| 6 |
+
|
| 7 |
+
**Related code from RVC:**
|
| 8 |
+
[https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/83d6a64e675d9bbd6e92ee450c5f807ed2bb54d8/i18n/i18n.py](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/83d6a64e675d9bbd6e92ee450c5f807ed2bb54d8/i18n/i18n.py)
|
| 9 |
+
|
| 10 |
+
**Initial commit:**
|
| 11 |
+
add localization(添加本地化) [RVC-Project/Retrieval-based-Voice-Conversion-WebUI#35](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/pull/35)
|
| 12 |
+
|
| 13 |
+
**Initial author:**
|
| 14 |
+
[@L4Ph](https://github.com/L4Ph)
|
| 15 |
+
|
| 16 |
+
### fish_speech/i18n/scan.py
|
| 17 |
+
|
| 18 |
+
**Related code from RVC:**
|
| 19 |
+
[https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/83d6a64e675d9bbd6e92ee450c5f807ed2bb54d8/i18n/scan_i18n.py](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/83d6a64e675d9bbd6e92ee450c5f807ed2bb54d8/i18n/scan_i18n.py)
|
| 20 |
+
|
| 21 |
+
**Initial commit:**
|
| 22 |
+
File for detecting i18n missing keys [RVC-Project/Retrieval-based-Voice-Conversion-WebUI#1058](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/pull/1058)
|
| 23 |
+
|
| 24 |
+
**Initial author:**
|
| 25 |
+
[@towzeur](https://github.com/towzeur)
|
| 26 |
+
|
| 27 |
+
We appreciate the contributions of the RVC project and its authors.
|
i18n/__init__.py
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .core import i18n
|
| 2 |
+
|
| 3 |
+
__all__ = ["i18n"]
|
i18n/__pycache__/__init__.cpython-310.pyc
ADDED
|
Binary file (213 Bytes). View file
|
|
|
i18n/__pycache__/__init__.cpython-38.pyc
ADDED
|
Binary file (202 Bytes). View file
|
|
|
i18n/__pycache__/core.cpython-310.pyc
ADDED
|
Binary file (1.44 kB). View file
|
|
|
i18n/__pycache__/core.cpython-38.pyc
ADDED
|
Binary file (1.37 kB). View file
|
|
|
i18n/core.py
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
import locale
|
| 3 |
+
from pathlib import Path
|
| 4 |
+
|
| 5 |
+
I18N_FILE_PATH = Path(__file__).parent / "locale"
|
| 6 |
+
DEFAULT_LANGUAGE = "en_US"
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
def load_language_list(language):
|
| 10 |
+
with open(I18N_FILE_PATH / f"{language}.json", "r", encoding="utf-8") as f:
|
| 11 |
+
language_list = json.load(f)
|
| 12 |
+
|
| 13 |
+
return language_list
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
class I18nAuto:
|
| 17 |
+
def __init__(self):
|
| 18 |
+
i18n_file = Path(".locale")
|
| 19 |
+
|
| 20 |
+
if i18n_file.exists():
|
| 21 |
+
with open(i18n_file, "r", encoding="utf-8") as f:
|
| 22 |
+
language = f.read().strip()
|
| 23 |
+
else:
|
| 24 |
+
# getlocale can't identify the system's language ((None, None))
|
| 25 |
+
language = locale.getdefaultlocale()[0]
|
| 26 |
+
|
| 27 |
+
if (I18N_FILE_PATH / f"{language}.json").exists() is False:
|
| 28 |
+
language = DEFAULT_LANGUAGE
|
| 29 |
+
|
| 30 |
+
self.language = language
|
| 31 |
+
self.language_map = load_language_list(language)
|
| 32 |
+
|
| 33 |
+
def __call__(self, key):
|
| 34 |
+
return self.language_map.get(key, key)
|
| 35 |
+
|
| 36 |
+
def __repr__(self):
|
| 37 |
+
return "Use Language: " + self.language
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
i18n = I18nAuto()
|
i18n/locale/en_US.json
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"16-mixed is recommended for 10+ series GPU": "16-mixed is recommended for 10+ series GPU",
|
| 3 |
+
"5 to 10 seconds of reference audio, useful for specifying speaker.": "5 to 10 seconds of reference audio, useful for specifying speaker.",
|
| 4 |
+
"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).": "A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).",
|
| 5 |
+
"Accumulate Gradient Batches": "Accumulate Gradient Batches",
|
| 6 |
+
"Add to Processing Area": "Add to Processing Area",
|
| 7 |
+
"Added path successfully!": "Added path successfully!",
|
| 8 |
+
"Advanced Config": "Advanced Config",
|
| 9 |
+
"Base LLAMA Model": "Base LLAMA Model",
|
| 10 |
+
"Batch Inference": "Batch Inference",
|
| 11 |
+
"Batch Size": "Batch Size",
|
| 12 |
+
"Changing with the Model Path": "Changing with the Model Path",
|
| 13 |
+
"Chinese": "Chinese",
|
| 14 |
+
"Compile Model": "Compile Model",
|
| 15 |
+
"Compile the model can significantly reduce the inference time, but will increase cold start time": "Compile the model can significantly reduce the inference time, but will increase cold start time",
|
| 16 |
+
"Copy": "Copy",
|
| 17 |
+
"Data Preprocessing": "Data Preprocessing",
|
| 18 |
+
"Data Preprocessing Path": "Data Preprocessing Path",
|
| 19 |
+
"Data Source": "Data Source",
|
| 20 |
+
"Decoder Model Config": "Decoder Model Config",
|
| 21 |
+
"Decoder Model Path": "Decoder Model Path",
|
| 22 |
+
"Disabled": "Disabled",
|
| 23 |
+
"Enable Reference Audio": "Enable Reference Audio",
|
| 24 |
+
"English": "English",
|
| 25 |
+
"Error Message": "Error Message",
|
| 26 |
+
"File Preprocessing": "File Preprocessing",
|
| 27 |
+
"Generate": "Generate",
|
| 28 |
+
"Generated Audio": "Generated Audio",
|
| 29 |
+
"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format": "If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format",
|
| 30 |
+
"Infer interface is closed": "Infer interface is closed",
|
| 31 |
+
"Inference Configuration": "Inference Configuration",
|
| 32 |
+
"Inference Server Configuration": "Inference Server Configuration",
|
| 33 |
+
"Inference Server Error": "Inference Server Error",
|
| 34 |
+
"Inferring interface is launched at {}": "Inferring interface is launched at {}",
|
| 35 |
+
"Initial Learning Rate": "Initial Learning Rate",
|
| 36 |
+
"Input Audio & Source Path for Transcription": "Input Audio & Source Path for Transcription",
|
| 37 |
+
"Input Text": "Input Text",
|
| 38 |
+
"Invalid path: {}": "Invalid path: {}",
|
| 39 |
+
"It is recommended to use CUDA, if you have low configuration, use CPU": "It is recommended to use CUDA, if you have low configuration, use CPU",
|
| 40 |
+
"Iterative Prompt Length, 0 means off": "Iterative Prompt Length, 0 means off",
|
| 41 |
+
"Japanese": "Japanese",
|
| 42 |
+
"LLAMA Configuration": "LLAMA Configuration",
|
| 43 |
+
"LLAMA Model Config": "LLAMA Model Config",
|
| 44 |
+
"LLAMA Model Path": "LLAMA Model Path",
|
| 45 |
+
"Labeling Device": "Labeling Device",
|
| 46 |
+
"LoRA Model to be merged": "LoRA Model to be merged",
|
| 47 |
+
"Maximum Audio Duration": "Maximum Audio Duration",
|
| 48 |
+
"Maximum Length per Sample": "Maximum Length per Sample",
|
| 49 |
+
"Maximum Training Steps": "Maximum Training Steps",
|
| 50 |
+
"Maximum tokens per batch, 0 means no limit": "Maximum tokens per batch, 0 means no limit",
|
| 51 |
+
"Merge": "Merge",
|
| 52 |
+
"Merge LoRA": "Merge LoRA",
|
| 53 |
+
"Merge successfully": "Merge successfully",
|
| 54 |
+
"Minimum Audio Duration": "Minimum Audio Duration",
|
| 55 |
+
"Model Output Path": "Model Output Path",
|
| 56 |
+
"Model Size": "Model Size",
|
| 57 |
+
"Move": "Move",
|
| 58 |
+
"Move files successfully": "Move files successfully",
|
| 59 |
+
"No audio generated, please check the input text.": "No audio generated, please check the input text.",
|
| 60 |
+
"No selected options": "No selected options",
|
| 61 |
+
"Number of Workers": "Number of Workers",
|
| 62 |
+
"Open Inference Server": "Open Inference Server",
|
| 63 |
+
"Open Labeler WebUI": "Open Labeler WebUI",
|
| 64 |
+
"Open Tensorboard": "Open Tensorboard",
|
| 65 |
+
"Opened labeler in browser": "Opened labeler in browser",
|
| 66 |
+
"Optional Label Language": "Optional Label Language",
|
| 67 |
+
"Optional online ver": "Optional online ver",
|
| 68 |
+
"Output Path": "Output Path",
|
| 69 |
+
"Path error, please check the model file exists in the corresponding path": "Path error, please check the model file exists in the corresponding path",
|
| 70 |
+
"Precision": "Precision",
|
| 71 |
+
"Probability of applying Speaker Condition": "Probability of applying Speaker Condition",
|
| 72 |
+
"Put your text here.": "Put your text here.",
|
| 73 |
+
"Reference Audio": "Reference Audio",
|
| 74 |
+
"Reference Text": "Reference Text",
|
| 75 |
+
"Related code and weights are released under CC BY-NC-SA 4.0 License.": "Related code and weights are released under CC BY-NC-SA 4.0 License.",
|
| 76 |
+
"Remove Selected Data": "Remove Selected Data",
|
| 77 |
+
"Removed path successfully!": "Removed path successfully!",
|
| 78 |
+
"Repetition Penalty": "Repetition Penalty",
|
| 79 |
+
"Save model every n steps": "Save model every n steps",
|
| 80 |
+
"Select LLAMA ckpt": "Select LLAMA ckpt",
|
| 81 |
+
"Select VITS ckpt": "Select VITS ckpt",
|
| 82 |
+
"Select VQGAN ckpt": "Select VQGAN ckpt",
|
| 83 |
+
"Select source file processing method": "Select source file processing method",
|
| 84 |
+
"Select the model to be trained (Depending on the Tab page you are on)": "Select the model to be trained (Depending on the Tab page you are on)",
|
| 85 |
+
"Selected: {}": "Selected: {}",
|
| 86 |
+
"Speaker": "Speaker",
|
| 87 |
+
"Speaker is identified by the folder name": "Speaker is identified by the folder name",
|
| 88 |
+
"Start Training": "Start Training",
|
| 89 |
+
"Streaming Audio": "Streaming Audio",
|
| 90 |
+
"Streaming Generate": "Streaming Generate",
|
| 91 |
+
"Tensorboard Host": "Tensorboard Host",
|
| 92 |
+
"Tensorboard Log Path": "Tensorboard Log Path",
|
| 93 |
+
"Tensorboard Port": "Tensorboard Port",
|
| 94 |
+
"Tensorboard interface is closed": "Tensorboard interface is closed",
|
| 95 |
+
"Tensorboard interface is launched at {}": "Tensorboard interface is launched at {}",
|
| 96 |
+
"Text is too long, please keep it under {} characters.": "Text is too long, please keep it under {} characters.",
|
| 97 |
+
"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.": "The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.",
|
| 98 |
+
"Training Configuration": "Training Configuration",
|
| 99 |
+
"Training Error": "Training Error",
|
| 100 |
+
"Training stopped": "Training stopped",
|
| 101 |
+
"Type name of the speaker": "Type name of the speaker",
|
| 102 |
+
"Type the path or select from the dropdown": "Type the path or select from the dropdown",
|
| 103 |
+
"Use LoRA": "Use LoRA",
|
| 104 |
+
"Use LoRA can save GPU memory, but may reduce the quality of the model": "Use LoRA can save GPU memory, but may reduce the quality of the model",
|
| 105 |
+
"Use filelist": "Use filelist",
|
| 106 |
+
"Use large for 10G+ GPU, medium for 5G, small for 2G": "Use large for 10G+ GPU, medium for 5G, small for 2G",
|
| 107 |
+
"VITS Configuration": "VITS Configuration",
|
| 108 |
+
"VQGAN Configuration": "VQGAN Configuration",
|
| 109 |
+
"Validation Batch Size": "Validation Batch Size",
|
| 110 |
+
"View the status of the preprocessing folder (use the slider to control the depth of the tree)": "View the status of the preprocessing folder (use the slider to control the depth of the tree)",
|
| 111 |
+
"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.": "We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.",
|
| 112 |
+
"WebUI Host": "WebUI Host",
|
| 113 |
+
"WebUI Port": "WebUI Port",
|
| 114 |
+
"Whisper Model": "Whisper Model",
|
| 115 |
+
"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).": "You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).",
|
| 116 |
+
"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU": "bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU",
|
| 117 |
+
"latest": "latest",
|
| 118 |
+
"new": "new",
|
| 119 |
+
"Realtime Transform Text": "Realtime Transform Text",
|
| 120 |
+
"Normalization Result Preview (Currently Only Chinese)": "Normalization Result Preview (Currently Only Chinese)",
|
| 121 |
+
"Text Normalization": "Text Normalization",
|
| 122 |
+
"Select Example Audio": "Select Example Audio"
|
| 123 |
+
}
|
i18n/locale/es_ES.json
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"16-mixed is recommended for 10+ series GPU": "se recomienda 16-mixed para GPU de la serie 10+",
|
| 3 |
+
"5 to 10 seconds of reference audio, useful for specifying speaker.": "5 a 10 segundos de audio de referencia, útil para especificar el hablante.",
|
| 4 |
+
"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).": "Un modelo de texto a voz basado en VQ-GAN y Llama desarrollado por [Fish Audio](https://fish.audio).",
|
| 5 |
+
"Accumulate Gradient Batches": "Acumular lotes de gradientes",
|
| 6 |
+
"Add to Processing Area": "Agregar al Área de Procesamiento",
|
| 7 |
+
"Added path successfully!": "¡Ruta agregada exitosamente!",
|
| 8 |
+
"Advanced Config": "Configuración Avanzada",
|
| 9 |
+
"Base LLAMA Model": "Modelo Base LLAMA",
|
| 10 |
+
"Batch Inference": "Inferencia por Lote",
|
| 11 |
+
"Batch Size": "Tamaño del Lote",
|
| 12 |
+
"Changing with the Model Path": "Cambiando con la Ruta del Modelo",
|
| 13 |
+
"Chinese": "Chino",
|
| 14 |
+
"Compile Model": "Compilar Modelo",
|
| 15 |
+
"Compile the model can significantly reduce the inference time, but will increase cold start time": "Compilar el modelo puede reducir significativamente el tiempo de inferencia, pero aumentará el tiempo de inicio en frío",
|
| 16 |
+
"Copy": "Copiar",
|
| 17 |
+
"Data Preprocessing": "Preprocesamiento de Datos",
|
| 18 |
+
"Data Preprocessing Path": "Ruta de Preprocesamiento de Datos",
|
| 19 |
+
"Data Source": "Fuente de Datos",
|
| 20 |
+
"Decoder Model Config": "Configuración del modelo decodificador",
|
| 21 |
+
"Decoder Model Path": "Ruta del modelo decodificador",
|
| 22 |
+
"Disabled": "Desactivado",
|
| 23 |
+
"Enable Reference Audio": "Habilitar Audio de Referencia",
|
| 24 |
+
"English": "Inglés",
|
| 25 |
+
"Error Message": "Mensaje de Error",
|
| 26 |
+
"File Preprocessing": "Preprocesamiento de Archivos",
|
| 27 |
+
"Generate": "Generar",
|
| 28 |
+
"Generated Audio": "Audio Generado",
|
| 29 |
+
"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format": "Si no hay texto correspondiente para el audio, aplique ASR para asistencia, soporte para formato .txt o .lab",
|
| 30 |
+
"Infer interface is closed": "La interfaz de inferencia está cerrada",
|
| 31 |
+
"Inference Configuration": "Configuración de Inferencia",
|
| 32 |
+
"Inference Server Configuration": "Configuración del Servidor de Inferencia",
|
| 33 |
+
"Inference Server Error": "Error del Servidor de Inferencia",
|
| 34 |
+
"Inferring interface is launched at {}": "La interfaz de inferencia se ha lanzado en {}",
|
| 35 |
+
"Initial Learning Rate": "Tasa de Aprendizaje Inicial",
|
| 36 |
+
"Input Audio & Source Path for Transcription": "Audio de Entrada y Ruta de Origen para Transcripción",
|
| 37 |
+
"Input Text": "Texto de Entrada",
|
| 38 |
+
"Invalid path: {}": "Ruta inválida: {}",
|
| 39 |
+
"It is recommended to use CUDA, if you have low configuration, use CPU": "Se recomienda usar CUDA, si tiene una configuración baja, use CPU",
|
| 40 |
+
"Iterative Prompt Length, 0 means off": "Longitud de la Indicación Iterativa, 0 significa apagado",
|
| 41 |
+
"Japanese": "Japonés",
|
| 42 |
+
"LLAMA Configuration": "Configuración de LLAMA",
|
| 43 |
+
"LLAMA Model Config": "Configuración del Modelo LLAMA",
|
| 44 |
+
"LLAMA Model Path": "Ruta del Modelo LLAMA",
|
| 45 |
+
"Labeling Device": "Dispositivo de Etiquetado",
|
| 46 |
+
"LoRA Model to be merged": "Modelo LoRA a fusionar",
|
| 47 |
+
"Maximum Audio Duration": "Duración máxima de audio",
|
| 48 |
+
"Maximum Length per Sample": "Longitud Máxima por Muestra",
|
| 49 |
+
"Maximum Training Steps": "Pasos Máximos de Entrenamiento",
|
| 50 |
+
"Maximum tokens per batch, 0 means no limit": "Máximo de tokens por lote, 0 significa sin límite",
|
| 51 |
+
"Merge": "Fusionar",
|
| 52 |
+
"Merge LoRA": "Fusionar LoRA",
|
| 53 |
+
"Merge successfully": "Fusionado exitosamente",
|
| 54 |
+
"Minimum Audio Duration": "Duración mínima de audio",
|
| 55 |
+
"Model Output Path": "Ruta de Salida del Modelo",
|
| 56 |
+
"Model Size": "Tamaño del Modelo",
|
| 57 |
+
"Move": "Mover",
|
| 58 |
+
"Move files successfully": "Archivos movidos exitosamente",
|
| 59 |
+
"No audio generated, please check the input text.": "No se generó audio, por favor verifique el texto de entrada.",
|
| 60 |
+
"No selected options": "No hay opciones seleccionadas",
|
| 61 |
+
"Number of Workers": "Número de Trabajadores",
|
| 62 |
+
"Open Inference Server": "Abrir Servidor de Inferencia",
|
| 63 |
+
"Open Labeler WebUI": "Abrir Interfaz Web del Etiquetador",
|
| 64 |
+
"Open Tensorboard": "Abrir Tensorboard",
|
| 65 |
+
"Opened labeler in browser": "Se abrió el etiquetador en el navegador",
|
| 66 |
+
"Optional Label Language": "Idioma de Etiquetado Opcional",
|
| 67 |
+
"Optional online ver": "Ver en línea opcional",
|
| 68 |
+
"Output Path": "Ruta de Salida",
|
| 69 |
+
"Path error, please check the model file exists in the corresponding path": "Error de ruta, por favor verifique que el archivo del modelo exista en la ruta correspondiente",
|
| 70 |
+
"Precision": "Precisión",
|
| 71 |
+
"Probability of applying Speaker Condition": "Probabilidad de aplicar Condición de Hablante",
|
| 72 |
+
"Put your text here.": "Ponga su texto aquí.",
|
| 73 |
+
"Reference Audio": "Audio de Referencia",
|
| 74 |
+
"Reference Text": "Texto de Referencia",
|
| 75 |
+
"Related code and weights are released under CC BY-NC-SA 4.0 License.": "El código relacionado y los pesos se publican bajo la Licencia CC BY-NC-SA 4.0.",
|
| 76 |
+
"Remove Selected Data": "Eliminar Datos Seleccionados",
|
| 77 |
+
"Removed path successfully!": "¡Ruta eliminada exitosamente!",
|
| 78 |
+
"Repetition Penalty": "Penalización por Repetición",
|
| 79 |
+
"Save model every n steps": "Guardar modelo cada n pasos",
|
| 80 |
+
"Select LLAMA ckpt": "Seleccionar punto de control LLAMA",
|
| 81 |
+
"Select VITS ckpt": "Seleccionar punto de control VITS",
|
| 82 |
+
"Select VQGAN ckpt": "Seleccionar punto de control VQGAN",
|
| 83 |
+
"Select source file processing method": "Seleccione el método de procesamiento de archivos fuente",
|
| 84 |
+
"Select the model to be trained (Depending on the Tab page you are on)": "Seleccione el modelo a entrenar (Dependiendo de la pestaña en la que se encuentre)",
|
| 85 |
+
"Selected: {}": "Seleccionado: {}",
|
| 86 |
+
"Speaker": "Hablante",
|
| 87 |
+
"Speaker is identified by the folder name": "El hablante se identifica por el nombre de la carpeta",
|
| 88 |
+
"Start Training": "Iniciar Entrenamiento",
|
| 89 |
+
"Streaming Audio": "transmisión de audio",
|
| 90 |
+
"Streaming Generate": "síntesis en flujo",
|
| 91 |
+
"Tensorboard Host": "Host de Tensorboard",
|
| 92 |
+
"Tensorboard Log Path": "Ruta de Registro de Tensorboard",
|
| 93 |
+
"Tensorboard Port": "Puerto de Tensorboard",
|
| 94 |
+
"Tensorboard interface is closed": "La interfaz de Tensorboard está cerrada",
|
| 95 |
+
"Tensorboard interface is launched at {}": "La interfaz de Tensorboard se ha lanzado en {}",
|
| 96 |
+
"Text is too long, please keep it under {} characters.": "El texto es demasiado largo, por favor manténgalo por debajo de {} caracteres.",
|
| 97 |
+
"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.": "La ruta de la carpeta de entrada a la izquierda o la lista de archivos. Ya sea que esté marcado o no, se utilizará para el entrenamiento posterior en esta lista.",
|
| 98 |
+
"Training Configuration": "Configuración de Entrenamiento",
|
| 99 |
+
"Training Error": "Error de Entrenamiento",
|
| 100 |
+
"Training stopped": "Entrenamiento detenido",
|
| 101 |
+
"Type name of the speaker": "Escriba el nombre del hablante",
|
| 102 |
+
"Type the path or select from the dropdown": "Escriba la ruta o seleccione de la lista desplegable",
|
| 103 |
+
"Use LoRA": "Usar LoRA",
|
| 104 |
+
"Use LoRA can save GPU memory, but may reduce the quality of the model": "Usar LoRA puede ahorrar memoria GPU, pero puede reducir la calidad del modelo",
|
| 105 |
+
"Use filelist": "Usar lista de archivos",
|
| 106 |
+
"Use large for 10G+ GPU, medium for 5G, small for 2G": "Use grande para GPU de 10G+, mediano para 5G, pequeño para 2G",
|
| 107 |
+
"VITS Configuration": "Configuración de VITS",
|
| 108 |
+
"VQGAN Configuration": "Configuración de VQGAN",
|
| 109 |
+
"Validation Batch Size": "Tamaño del Lote de Validación",
|
| 110 |
+
"View the status of the preprocessing folder (use the slider to control the depth of the tree)": "Vea el estado de la carpeta de preprocesamiento (use el control deslizante para controlar la profundidad del árbol)",
|
| 111 |
+
"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.": "No somos responsables de ningún mal uso del modelo, por favor considere sus leyes y regulaciones locales antes de usarlo.",
|
| 112 |
+
"WebUI Host": "Host de WebUI",
|
| 113 |
+
"WebUI Port": "Puerto de WebUI",
|
| 114 |
+
"Whisper Model": "Modelo Whisper",
|
| 115 |
+
"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).": "Puede encontrar el código fuente [aquí](https://github.com/fishaudio/fish-speech) y los modelos [aquí](https://huggingface.co/fishaudio/fish-speech-1).",
|
| 116 |
+
"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU": "Se recomienda bf16-true para GPU de la serie 30+, se recomienda 16-mixed para GPU de la serie 10+",
|
| 117 |
+
"latest": "más reciente",
|
| 118 |
+
"new": "nuevo",
|
| 119 |
+
"Realtime Transform Text": "Transformación de Texto en Tiempo Real",
|
| 120 |
+
"Normalization Result Preview (Currently Only Chinese)": "Vista Previa del Resultado de Normalización (Actualmente Solo Chino)",
|
| 121 |
+
"Text Normalization": "Normalización de Texto",
|
| 122 |
+
"Select Example Audio": "Selecionar áudio de exemplo"
|
| 123 |
+
}
|
i18n/locale/ja_JP.json
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"16-mixed is recommended for 10+ series GPU": "10シリーズ以降のGPUには16-mixedをお勧めします",
|
| 3 |
+
"5 to 10 seconds of reference audio, useful for specifying speaker.": "話者を指定するのに役立つ、5~10秒のリファレンスオーディオ。",
|
| 4 |
+
"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).": "[Fish Audio](https://fish.audio)が開発したVQ-GANとLlamaに基づくテキスト音声合成モデル。",
|
| 5 |
+
"Accumulate Gradient Batches": "勾配バッチの累積",
|
| 6 |
+
"Add to Processing Area": "処理エリアに追加",
|
| 7 |
+
"Added path successfully!": "パスの追加に成功しました!",
|
| 8 |
+
"Advanced Config": "詳細設定",
|
| 9 |
+
"Base LLAMA Model": "基本LLAMAモデル",
|
| 10 |
+
"Batch Inference": "バッチ推論",
|
| 11 |
+
"Batch Size": "バッチサイズ",
|
| 12 |
+
"Changing with the Model Path": "モデルのパスに伴って変化する",
|
| 13 |
+
"Chinese": "中国語",
|
| 14 |
+
"Compile Model": "モデルのコンパイル",
|
| 15 |
+
"Compile the model can significantly reduce the inference time, but will increase cold start time": "モデルをコンパイルすると推論時間を大幅に短縮できますが、コールドスタート時間が長くなります",
|
| 16 |
+
"Copy": "コピー",
|
| 17 |
+
"Data Preprocessing": "データ前処理",
|
| 18 |
+
"Data Preprocessing Path": "データ前処理パス",
|
| 19 |
+
"Data Source": "データソース",
|
| 20 |
+
"Decoder Model Config": "デコーダーモデルの構成",
|
| 21 |
+
"Decoder Model Path": "デコーダーモデルのパス",
|
| 22 |
+
"Disabled": "無効",
|
| 23 |
+
"Enable Reference Audio": "リファレンスオーディオを有効にする",
|
| 24 |
+
"English": "英語",
|
| 25 |
+
"Error Message": "エラーメッセージ",
|
| 26 |
+
"File Preprocessing": "文書前处理",
|
| 27 |
+
"Generate": "生成",
|
| 28 |
+
"Generated Audio": "生成されたオーディオ",
|
| 29 |
+
"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format": "音声に対応するテキストがない場合は、ASRを適用してサポートします。.txtまたは.lab形式をサポートしています",
|
| 30 |
+
"Infer interface is closed": "推論インターフェースが閉じられています",
|
| 31 |
+
"Inference Configuration": "推論設定",
|
| 32 |
+
"Inference Server Configuration": "推論サーバー設定",
|
| 33 |
+
"Inference Server Error": "推論サーバーエラー",
|
| 34 |
+
"Inferring interface is launched at {}": "推論インターフェースが{}で起動しました",
|
| 35 |
+
"Initial Learning Rate": "初期学習率",
|
| 36 |
+
"Input Audio & Source Path for Transcription": "入力オーディオと文字起こしのソースパス",
|
| 37 |
+
"Input Text": "入力テキスト",
|
| 38 |
+
"Invalid path: {}": "無効なパス: {}",
|
| 39 |
+
"It is recommended to use CUDA, if you have low configuration, use CPU": "CUDAの使用をお勧めします。低い構成の場合はCPUを使用してください",
|
| 40 |
+
"Iterative Prompt Length, 0 means off": "反復プロンプト長。0はオフを意味します",
|
| 41 |
+
"Japanese": "日本語",
|
| 42 |
+
"LLAMA Configuration": "LLAMA設定",
|
| 43 |
+
"LLAMA Model Config": "LLAMAモデル設定",
|
| 44 |
+
"LLAMA Model Path": "LLAMAモデルパス",
|
| 45 |
+
"Labeling Device": "ラベリングデバイス",
|
| 46 |
+
"LoRA Model to be merged": "マージするLoRAモデル",
|
| 47 |
+
"Maximum Audio Duration": "最大オーディオの長さ",
|
| 48 |
+
"Maximum Length per Sample": "サンプルあたりの最大長",
|
| 49 |
+
"Maximum Training Steps": "最大トレーニングステップ数",
|
| 50 |
+
"Maximum tokens per batch, 0 means no limit": "バッチあたりの最大トークン数。0は制限なしを意味します",
|
| 51 |
+
"Merge": "マージ",
|
| 52 |
+
"Merge LoRA": "LoRAのマージ",
|
| 53 |
+
"Merge successfully": "マージに成功しました",
|
| 54 |
+
"Minimum Audio Duration": "最小オーディオの長さ",
|
| 55 |
+
"Model Output Path": "モデル出力パス",
|
| 56 |
+
"Model Size": "モデルサイズ",
|
| 57 |
+
"Move": "移動",
|
| 58 |
+
"Move files successfully": "ファイルの移動に成功しました",
|
| 59 |
+
"No audio generated, please check the input text.": "オーディオが生成されていません。入力テキストを確認してください。",
|
| 60 |
+
"No selected options": "選択されたオプションはありません",
|
| 61 |
+
"Number of Workers": "ワーカー数",
|
| 62 |
+
"Open Inference Server": "推論サーバーを開く",
|
| 63 |
+
"Open Labeler WebUI": "ラベラーWebUIを開く",
|
| 64 |
+
"Open Tensorboard": "Tensorboardを開く",
|
| 65 |
+
"Opened labeler in browser": "ブラウザでラベラーを開きました",
|
| 66 |
+
"Optional Label Language": "オプションのラベル言語",
|
| 67 |
+
"Optional online ver": "オプションのオンラインバージョン",
|
| 68 |
+
"Output Path": "出力パス",
|
| 69 |
+
"Path error, please check the model file exists in the corresponding path": "パスエラー。対応するパスにモデルファイルが存在するか確認してください",
|
| 70 |
+
"Precision": "精度",
|
| 71 |
+
"Probability of applying Speaker Condition": "話者条件を適用する確率",
|
| 72 |
+
"Put your text here.": "ここにテキストを入力してください。",
|
| 73 |
+
"Reference Audio": "リファレンスオーディオ",
|
| 74 |
+
"Reference Text": "リファレンステキスト",
|
| 75 |
+
"Related code and weights are released under CC BY-NC-SA 4.0 License.": "関連コードと重みはCC BY-NC-SA 4.0ライセンスの下でリリースされます。",
|
| 76 |
+
"Remove Selected Data": "選択したデータを削除",
|
| 77 |
+
"Removed path successfully!": "パスの削除に成功しました!",
|
| 78 |
+
"Repetition Penalty": "反復ペナルティ",
|
| 79 |
+
"Save model every n steps": "nステップごとにモデルを保存",
|
| 80 |
+
"Select LLAMA ckpt": " LLAMA チェックポイントを選択",
|
| 81 |
+
"Select VITS ckpt": "VITS チェックポイントを選択",
|
| 82 |
+
"Select VQGAN ckpt": "VQGAN チェックポイントを選択",
|
| 83 |
+
"Select source file processing method": "ソースファイルの処理方法を選択",
|
| 84 |
+
"Select the model to be trained (Depending on the Tab page you are on)": "タブページに応じてトレーニングするモデルを選択してください",
|
| 85 |
+
"Selected: {}": "選択済み: {}",
|
| 86 |
+
"Speaker": "話者",
|
| 87 |
+
"Speaker is identified by the folder name": "話者はフォルダ名で識別されます",
|
| 88 |
+
"Start Training": "トレーニング開始",
|
| 89 |
+
"Streaming Audio": "ストリーミングオーディオ",
|
| 90 |
+
"Streaming Generate": "ストリーミング合成",
|
| 91 |
+
"Tensorboard Host": "Tensorboardホスト",
|
| 92 |
+
"Tensorboard Log Path": "Tensorboardログパス",
|
| 93 |
+
"Tensorboard Port": "Tensorboardポート",
|
| 94 |
+
"Tensorboard interface is closed": "Tensorboardインターフェースが閉じられています",
|
| 95 |
+
"Tensorboard interface is launched at {}": "Tensorboardインターフェースが{}で起動されました",
|
| 96 |
+
"Text is too long, please keep it under {} characters.": "テキストが長すぎます。{}文字以内に抑えてください。",
|
| 97 |
+
"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.": "左側の入力フォルダまたはファイルリストのパス。チェックの有無にかかわらず、このリストの後続のトレーニングに使用されます。",
|
| 98 |
+
"Training Configuration": "トレーニング設定",
|
| 99 |
+
"Training Error": "トレーニングエラー",
|
| 100 |
+
"Training stopped": "トレーニングが停止しました",
|
| 101 |
+
"Type name of the speaker": "話者の名前を入力",
|
| 102 |
+
"Type the path or select from the dropdown": "パスを入力するか、ドロップダウンから選択してください",
|
| 103 |
+
"Use LoRA": "LoRAを使用",
|
| 104 |
+
"Use LoRA can save GPU memory, but may reduce the quality of the model": "LoRAを使用するとGPUメモリを節約できますが、モデルの品質が低下する可能性があります",
|
| 105 |
+
"Use filelist": "ファイルリストを使用",
|
| 106 |
+
"Use large for 10G+ GPU, medium for 5G, small for 2G": "10G以上のGPUには大、5Gには中、2Gには小を使用してください",
|
| 107 |
+
"VITS Configuration": "VITS の構成",
|
| 108 |
+
"VQGAN Configuration": "VQGAN の構成",
|
| 109 |
+
"Validation Batch Size": "検証バッチサイズ",
|
| 110 |
+
"View the status of the preprocessing folder (use the slider to control the depth of the tree)": "前処理フォルダの状態を表示(スライダーを使用してツリーの深さを制御)",
|
| 111 |
+
"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.": "モデルの誤用については一切責任を負いません。使用する前に、現地の法律と規制を考慮してください。",
|
| 112 |
+
"WebUI Host": "WebUIホスト",
|
| 113 |
+
"WebUI Port": "WebUIポート",
|
| 114 |
+
"Whisper Model": "Whisperモデル",
|
| 115 |
+
"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).": "ソースコードは[こちら](https://github.com/fishaudio/fish-speech)、モデルは[こちら](https://huggingface.co/fishaudio/fish-speech-1)にあります。",
|
| 116 |
+
"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU": "30シリーズ以降のGPUにはbf16-trueを、10シリーズ以降のGPUには16-mixedをお勧めします",
|
| 117 |
+
"latest": "最新",
|
| 118 |
+
"new": "新規",
|
| 119 |
+
"Realtime Transform Text": "リアルタイム変換テキスト",
|
| 120 |
+
"Normalization Result Preview (Currently Only Chinese)": "正規化結果プレビュー(現在は中国語のみ)",
|
| 121 |
+
"Text Normalization": "テキスト正規化",
|
| 122 |
+
"Select Example Audio": "サンプル音声を選択"
|
| 123 |
+
}
|
i18n/locale/pt_BR.json
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"5 to 10 seconds of reference audio, useful for specifying speaker.": "5 a 10 segundos de áudio de referência, útil para especificar o orador.",
|
| 3 |
+
"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).": "Um modelo de texto para fala baseado em VQ-GAN e Llama desenvolvido por [Fish Audio](https://fish.audio).",
|
| 4 |
+
"Accumulate Gradient Batches": "Acumular Lotes de Gradiente",
|
| 5 |
+
"Add to Processing Area": "Adicionar à Área de Processamento",
|
| 6 |
+
"Added path successfully!": "Caminho adicionado com sucesso!",
|
| 7 |
+
"Advanced Config": "Configuração Avançada",
|
| 8 |
+
"Base LLAMA Model": "Modelo LLAMA Base",
|
| 9 |
+
"Batch Inference": "Inferência em Lote",
|
| 10 |
+
"Batch Size": "Tamanho do Lote",
|
| 11 |
+
"Changing with the Model Path": "Alterando com o Caminho do Modelo",
|
| 12 |
+
|
| 13 |
+
"Compile Model": "Compilar Modelo",
|
| 14 |
+
"Compile the model can significantly reduce the inference time, but will increase cold start time": "Compilar o modelo pode reduzir significativamente o tempo de inferência, mas aumentará a latência inicial",
|
| 15 |
+
"Copy": "Copiar",
|
| 16 |
+
"Data Preprocessing": "Pré-processamento de Dados",
|
| 17 |
+
"Data Preprocessing Path": "Caminho de Pré-processamento de Dados",
|
| 18 |
+
"Data Source": "Fonte de Dados",
|
| 19 |
+
"Decoder Model Config": "Configuração do Modelo Decodificador",
|
| 20 |
+
"Decoder Model Path": "Caminho do Modelo Decodificador",
|
| 21 |
+
"Disabled": "Desativado",
|
| 22 |
+
"Enable Initial Prompt": "Habilitar Prompt Inicial",
|
| 23 |
+
"Enable Reference Audio": "Habilitar Áudio de Referência",
|
| 24 |
+
"English": "Inglês",
|
| 25 |
+
"Japanese": "Japonês",
|
| 26 |
+
"Chinese": "Chinês",
|
| 27 |
+
"Portuguese": "Português",
|
| 28 |
+
"Spanish": "Espanhol",
|
| 29 |
+
"Error Message": "Mensagem de Erro",
|
| 30 |
+
"Faster Whisper, Up to 5g GPU memory usage": "Faster Whisper (Usa até 5 GB de vRAM)",
|
| 31 |
+
"File Preprocessing": "Pré-processamento de Arquivos",
|
| 32 |
+
"Generate": "Gerar",
|
| 33 |
+
"Generated Audio": "Áudio Gerado",
|
| 34 |
+
"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format": "Se não houver texto correspondente ao áudio, utilize o ASR para assistência (formatos .txt ou .lab)",
|
| 35 |
+
"Infer interface is closed": "A interface de inferência foi fechada",
|
| 36 |
+
"Inference Configuration": "Configuração de Inferência",
|
| 37 |
+
"Inference Server Configuration": "Configuração do Servidor de Inferência",
|
| 38 |
+
"Inference Server Error": "Erro do Servidor de Inferência",
|
| 39 |
+
"Inferring interface is launched at {}": "A interface de inferência foi iniciada em {}",
|
| 40 |
+
"Initial Learning Rate": "Taxa de Aprendizagem Inicial",
|
| 41 |
+
"Initial Prompt": "Prompt Inicial",
|
| 42 |
+
"Initial prompt can provide contextual or vocabulary-specific guidance to the model.": "O prompt inicial pode fornecer orientação contextual ou específica de vocabulário para o modelo.",
|
| 43 |
+
"Input Audio & Source Path for Transcription": "Entrada de Áudio/Caminho de Origem para Transcrição",
|
| 44 |
+
"Input Text": "Texto de Entrada",
|
| 45 |
+
"Invalid path: {}": "Caminho inválido: {}",
|
| 46 |
+
"It is recommended to use CUDA, if you have low configuration, use CPU": "Para GPUs Nvidia é recomendado usar CUDA. Se não tiver uma GPU Nvidia, use CPU",
|
| 47 |
+
"Iterative Prompt Length, 0 means off": "Comprimento do Prompt Iterativo (0 = desativado)",
|
| 48 |
+
"LLAMA Configuration": "Configuração do LLAMA",
|
| 49 |
+
"LLAMA Model Config": "Configuração do Modelo LLAMA",
|
| 50 |
+
"LLAMA Model Path": "Caminho do Modelo LLAMA",
|
| 51 |
+
"Labeling Device": "Dispositivo de Rotulagem",
|
| 52 |
+
"LoRA Model to be merged": "Modelo LoRA para mesclagem",
|
| 53 |
+
"Maximum Length per Sample": "Comprimento Máximo por Amostra",
|
| 54 |
+
"Maximum Training Steps": "Etapas Máximas de Treinamento",
|
| 55 |
+
"Maximum tokens per batch, 0 means no limit": "Número máximo de tokens por lote, 0 significa sem limite",
|
| 56 |
+
"Merge": "Mesclar",
|
| 57 |
+
"Merge LoRA": "Mesclar LoRA",
|
| 58 |
+
"Merge successfully": "Mesclado com sucesso",
|
| 59 |
+
"Model Output Path": "Caminho de Saída do Modelo",
|
| 60 |
+
"Model Quantization": "Quantização do Modelo",
|
| 61 |
+
"Model Size": "Tamanho do Modelo",
|
| 62 |
+
"Move": "Mover",
|
| 63 |
+
"Move files successfully": "Arquivos movidos com sucesso",
|
| 64 |
+
"No audio generated, please check the input text.": "Nenhum áudio gerado, verifique o texto de entrada.",
|
| 65 |
+
"No selected options": "Nenhuma opção selecionada",
|
| 66 |
+
"Normalization Result Preview (Currently Only Chinese)": "Pré-visualização do Resultado da Normalização (Atualmente Apenas Chinês)",
|
| 67 |
+
"Number of Workers": "Número de Processos",
|
| 68 |
+
"Open Inference Server": "Abrir Servidor de Inferência",
|
| 69 |
+
"Open Labeler WebUI": "Abrir WebUI de Rotulagem",
|
| 70 |
+
"Open Tensorboard": "Abrir Tensorboard",
|
| 71 |
+
"Opened labeler in browser": "WebUI de rotulagem aberta no navegador",
|
| 72 |
+
"Optional Label Language": "Idioma do Rótulo (Opcional)",
|
| 73 |
+
"Optional online ver": "Versão online (opcional)",
|
| 74 |
+
"Output Path": "Caminho de Saída",
|
| 75 |
+
"Path error, please check the model file exists in the corresponding path": "Erro de caminho, verifique se o arquivo do modelo existe no caminho correspondente",
|
| 76 |
+
"Post-quantification Precision": "Precisão Pós-quantização",
|
| 77 |
+
"Precision": "Precisão",
|
| 78 |
+
"Probability of applying Speaker Condition": "Probabilidade de Aplicar Condição de Orador",
|
| 79 |
+
"Put your text here.": "Insira seu texto aqui.",
|
| 80 |
+
"Quantify": "Quantizar",
|
| 81 |
+
"Quantify successfully": "Quantizado com sucesso",
|
| 82 |
+
"Realtime Transform Text": "Transformar Texto em Tempo Real",
|
| 83 |
+
"Reference Audio": "Áudio de Referência",
|
| 84 |
+
"Reference Text": "Texto de Referência",
|
| 85 |
+
"warning": "Aviso",
|
| 86 |
+
"Pre-processing begins...": "O pré-processamento começou!",
|
| 87 |
+
"Related code and weights are released under CC BY-NC-SA 4.0 License.": "O código relacionado e os pesos são licenciados sob a Licença CC BY-NC-SA 4.0.",
|
| 88 |
+
"Remove Selected Data": "Remover Dados Selecionados",
|
| 89 |
+
"Removed path successfully!": "Caminho removido com sucesso!",
|
| 90 |
+
"Repetition Penalty": "Penalidade de Repetição",
|
| 91 |
+
"Save model every n steps": "Salvar modelo a cada n etapas",
|
| 92 |
+
"Select LLAMA ckpt": "Selecionar .ckpt do LLAMA",
|
| 93 |
+
"Select source file processing method": "Escolha como processar o arquivo de origem",
|
| 94 |
+
"Select the model to be trained (Depending on the Tab page you are on)": "Selecione o modelo para o treinamento (dependendo da aba em que você está)",
|
| 95 |
+
"Selected: {}": "Selecionado: {}",
|
| 96 |
+
"Speaker is identified by the folder name": "O orador é identificado pelo nome da pasta",
|
| 97 |
+
"Start Training": "Iniciar Treinamento",
|
| 98 |
+
"Streaming Audio": "Áudio em Streaming",
|
| 99 |
+
"Streaming Generate": "Geração em Streaming",
|
| 100 |
+
"Tensorboard Host": "Host do Tensorboard",
|
| 101 |
+
"Tensorboard Log Path": "Caminho de Log do Tensorboard",
|
| 102 |
+
"Tensorboard Port": "Porta do Tensorboard",
|
| 103 |
+
"Tensorboard interface is closed": "A interface do Tensorboard está fechada",
|
| 104 |
+
"Tensorboard interface is launched at {}": "A interface do Tensorboard foi iniciada em {}",
|
| 105 |
+
"Text Normalization": "Normalização de Texto",
|
| 106 |
+
"Text is too long, please keep it under {} characters.": "O texto é muito longo. Mantenha-o com menos de {} caracteres.",
|
| 107 |
+
"The lower the quantitative precision, the more the effectiveness may decrease, but the greater the efficiency will increase": "Quanto menor a precisão quantitativa, mais a eficácia pode diminuir, mas maior será o aumento da eficiência",
|
| 108 |
+
"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.": "O caminho da pasta de entrada à esquerda ou a lista de arquivos. Independentemente de estar marcada ou não, ela será utilizada para o treinamento subsequente nesta lista.",
|
| 109 |
+
"Training Configuration": "Configuração de Treinamento",
|
| 110 |
+
"Training Error": "Erro de Treinamento",
|
| 111 |
+
"Training stopped": "Treinamento interrompido!",
|
| 112 |
+
"Type the path or select from the dropdown": "Digite o caminho ou selecione no menu suspenso",
|
| 113 |
+
"Use LoRA": "Usar LoRA",
|
| 114 |
+
"Use LoRA can save GPU memory, but may reduce the quality of the model": "O uso de LoRAs pode economizar memória da GPU, mas também pode reduzir a qualidade",
|
| 115 |
+
"Use filelist": "Usar lista de arquivos",
|
| 116 |
+
"VQGAN Configuration": "Configuração do VQGAN",
|
| 117 |
+
"View the status of the preprocessing folder (use the slider to control the depth of the tree)": "Visualizar o status da pasta de pré-processamento (use o controle deslizante para controlar a profundidade da árvore)",
|
| 118 |
+
"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.": "Não nos responsabilizamos por qualquer uso indevido do modelo. Por favor, considere as leis e regulamentações locais antes de usá-lo.",
|
| 119 |
+
"WebUI Host": "Host da WebUI",
|
| 120 |
+
"WebUI Port": "Porta da WebUI",
|
| 121 |
+
"Whisper Model": "Modelo Whisper",
|
| 122 |
+
"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).": "Você pode encontrar o código fonte [aqui](https://github.com/fishaudio/fish-speech) e os modelos [aqui](https://huggingface.co/fishaudio/fish-speech-1).",
|
| 123 |
+
"auto": "automático",
|
| 124 |
+
"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU": "bf16-true é recomendado para GPUs da série 30+, 16-mixed é recomendado para GPUs da série 10+",
|
| 125 |
+
"latest": "mais recente",
|
| 126 |
+
"new": "novo",
|
| 127 |
+
"This audio introduces the basic concepts and applications of artificial intelligence and machine learning.": "Este áudio introduz os conceitos básicos e aplicações de inteligência artificial e aprendizado de máquina.",
|
| 128 |
+
"You don't need to train this model!": "Não é necessário treinar este modelo!",
|
| 129 |
+
"Yes": "Sim",
|
| 130 |
+
"No": "Não",
|
| 131 |
+
"version:": "versão:",
|
| 132 |
+
"author:": "autor:"
|
| 133 |
+
}
|
i18n/locale/zh_CN.json
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"16-mixed is recommended for 10+ series GPU": "10+ 系列 GPU 建议使用 16-mixed",
|
| 3 |
+
"5 to 10 seconds of reference audio, useful for specifying speaker.": "5 到 10 秒的参考音频,适用于指定音色。",
|
| 4 |
+
"A text-to-speech model based on VQ-GAN and Llama developed by [Fish Audio](https://fish.audio).": "由 [Fish Audio](https://fish.audio) 研发的基于 VQ-GAN 和 Llama 的多语种语音合成.",
|
| 5 |
+
"Accumulate Gradient Batches": "梯度累积批次",
|
| 6 |
+
"Add to Processing Area": "加入处理区",
|
| 7 |
+
"Added path successfully!": "添加路径成功!",
|
| 8 |
+
"Advanced Config": "高级参数",
|
| 9 |
+
"Base LLAMA Model": "基础 LLAMA 模型",
|
| 10 |
+
"Batch Inference": "批量推理",
|
| 11 |
+
"Batch Size": "批次大小",
|
| 12 |
+
"Changing with the Model Path": "随模型路径变化",
|
| 13 |
+
"Chinese": "中文",
|
| 14 |
+
"Compile Model": "编译模型",
|
| 15 |
+
"Compile the model can significantly reduce the inference time, but will increase cold start time": "编译模型可以显著减少推理时间,但会增加冷启动时间",
|
| 16 |
+
"Copy": "复制",
|
| 17 |
+
"Data Preprocessing": "数据预处理",
|
| 18 |
+
"Data Preprocessing Path": "数据预处理路径",
|
| 19 |
+
"Data Source": "数据源",
|
| 20 |
+
"Decoder Model Config": "解码器模型配置",
|
| 21 |
+
"Decoder Model Path": "解码器模型路径",
|
| 22 |
+
"Disabled": "禁用",
|
| 23 |
+
"Enable Reference Audio": "启用参考音频",
|
| 24 |
+
"English": "英文",
|
| 25 |
+
"Error Message": "错误信息",
|
| 26 |
+
"File Preprocessing": "文件预处理",
|
| 27 |
+
"Generate": "生成",
|
| 28 |
+
"Generated Audio": "音频",
|
| 29 |
+
"If there is no corresponding text for the audio, apply ASR for assistance, support .txt or .lab format": "如果音频没有对应的文本,可以应用 ASR 辅助,支持 .txt 或 .lab 格式",
|
| 30 |
+
"Infer interface is closed": "推理界面已关闭",
|
| 31 |
+
"Inference Configuration": "推理配置",
|
| 32 |
+
"Inference Server Configuration": "推理服务器配置",
|
| 33 |
+
"Inference Server Error": "推理服务器错误",
|
| 34 |
+
"Inferring interface is launched at {}": "推理界面已在 {} 上启动",
|
| 35 |
+
"Initial Learning Rate": "初始学习率",
|
| 36 |
+
"Input Audio & Source Path for Transcription": "输入音频和转录源路径",
|
| 37 |
+
"Input Text": "输入文本",
|
| 38 |
+
"Invalid path: {}": "无效路径: {}",
|
| 39 |
+
"It is recommended to use CUDA, if you have low configuration, use CPU": "建议使用 CUDA,如果配置较低,使用 CPU",
|
| 40 |
+
"Iterative Prompt Length, 0 means off": "迭代提示长度,0 表示关闭",
|
| 41 |
+
"Japanese": "日文",
|
| 42 |
+
"LLAMA Configuration": "LLAMA 配置",
|
| 43 |
+
"LLAMA Model Config": "LLAMA 模型配置",
|
| 44 |
+
"LLAMA Model Path": "LLAMA 模型路径",
|
| 45 |
+
"Labeling Device": "标注加速设备",
|
| 46 |
+
"LoRA Model to be merged": "要合并的 LoRA 模型",
|
| 47 |
+
"Maximum Audio Duration": "最大音频时长",
|
| 48 |
+
"Maximum Length per Sample": "每个样本的最大长度",
|
| 49 |
+
"Maximum Training Steps": "最大训练步数",
|
| 50 |
+
"Maximum tokens per batch, 0 means no limit": "每批最大令牌数,0 表示无限制",
|
| 51 |
+
"Merge": "合并",
|
| 52 |
+
"Merge LoRA": "合并 LoRA",
|
| 53 |
+
"Merge successfully": "合并成功",
|
| 54 |
+
"Minimum Audio Duration": "最小音频时长",
|
| 55 |
+
"Model Output Path": "模型输出路径",
|
| 56 |
+
"Model Size": "模型规模",
|
| 57 |
+
"Move": "移动",
|
| 58 |
+
"Move files successfully": "移动文件成功",
|
| 59 |
+
"No audio generated, please check the input text.": "没有生成音频,请检查输入文本.",
|
| 60 |
+
"No selected options": "没有选择的选项",
|
| 61 |
+
"Number of Workers": "数据加载进程数",
|
| 62 |
+
"Open Inference Server": "打开推理服务器",
|
| 63 |
+
"Open Labeler WebUI": "打开标注工具",
|
| 64 |
+
"Open Tensorboard": "打开 Tensorboard",
|
| 65 |
+
"Opened labeler in browser": "在浏览器中打开标注工具",
|
| 66 |
+
"Optional Label Language": "[可选] 标注语言",
|
| 67 |
+
"Optional online ver": "[可选] 使用在线版",
|
| 68 |
+
"Output Path": "输出路径",
|
| 69 |
+
"Path error, please check the model file exists in the corresponding path": "路径错误,请检查模型文件是否存在于相应路径",
|
| 70 |
+
"Precision": "精度",
|
| 71 |
+
"Probability of applying Speaker Condition": "应用说话人条件的概率",
|
| 72 |
+
"Put your text here.": "在此处输入文本.",
|
| 73 |
+
"Reference Audio": "参考音频",
|
| 74 |
+
"Reference Text": "参考文本",
|
| 75 |
+
"Related code and weights are released under CC BY-NC-SA 4.0 License.": "相关代码和权重使用 CC BY-NC-SA 4.0 许可证发布.",
|
| 76 |
+
"Remove Selected Data": "移除选中数据",
|
| 77 |
+
"Removed path successfully!": "移除路径成功!",
|
| 78 |
+
"Repetition Penalty": "重复惩罚",
|
| 79 |
+
"Save model every n steps": "每 n 步保存模型",
|
| 80 |
+
"Select LLAMA ckpt": "选择 LLAMA 检查点",
|
| 81 |
+
"Select VITS ckpt": "选择 VITS 检查点",
|
| 82 |
+
"Select VQGAN ckpt": "选择 VQGAN 检查点",
|
| 83 |
+
"Select source file processing method": "选择源文件处理方法",
|
| 84 |
+
"Select the model to be trained (Depending on the Tab page you are on)": "根据您所在的选项卡页面选择要训练的模型",
|
| 85 |
+
"Selected: {}": "已选择: {}",
|
| 86 |
+
"Speaker": "说话人",
|
| 87 |
+
"Speaker is identified by the folder name": "自动根据父目录名称识别说话人",
|
| 88 |
+
"Start Training": "开始训练",
|
| 89 |
+
"Streaming Audio": "流式音频",
|
| 90 |
+
"Streaming Generate": "流式合成",
|
| 91 |
+
"Tensorboard Host": "Tensorboard 监听地址",
|
| 92 |
+
"Tensorboard Log Path": "Tensorboard 日志路径",
|
| 93 |
+
"Tensorboard Port": "Tensorboard 端口",
|
| 94 |
+
"Tensorboard interface is closed": "Tensorboard 界面已关闭",
|
| 95 |
+
"Tensorboard interface is launched at {}": "Tensorboard 界面已在 {} 上启动",
|
| 96 |
+
"Text is too long, please keep it under {} characters.": "文本太长,请保持在 {} 个字符以内.",
|
| 97 |
+
"The path of the input folder on the left or the filelist. Whether checked or not, it will be used for subsequent training in this list.": "左侧输入文件夹的路径或文件列表。无论是否选中,都将在此列表中用于后续训练.",
|
| 98 |
+
"Training Configuration": "训练配置",
|
| 99 |
+
"Training Error": "训练错误",
|
| 100 |
+
"Training stopped": "训练已停止",
|
| 101 |
+
"Type name of the speaker": "输入说话人的名称",
|
| 102 |
+
"Type the path or select from the dropdown": "输入路径或从下拉菜单中选择",
|
| 103 |
+
"Use LoRA": "使用 LoRA",
|
| 104 |
+
"Use LoRA can save GPU memory, but may reduce the quality of the model": "使用 LoRA 可以节省 GPU 内存,但可能会降低模型质量",
|
| 105 |
+
"Use filelist": "使用文件列表",
|
| 106 |
+
"Use large for 10G+ GPU, medium for 5G, small for 2G": "10G+ GPU 使用 large, 5G 使用 medium, 2G 使用 small",
|
| 107 |
+
"VITS Configuration": "VITS 配置",
|
| 108 |
+
"VQGAN Configuration": "VQGAN 配置",
|
| 109 |
+
"Validation Batch Size": "验证批次大小",
|
| 110 |
+
"View the status of the preprocessing folder (use the slider to control the depth of the tree)": "查看预处理文件夹的状态 (使用滑块控制树的深度)",
|
| 111 |
+
"We are not responsible for any misuse of the model, please consider your local laws and regulations before using it.": "我们不对模型的任何滥用负责,请在使用之前考虑您当地的法律法规.",
|
| 112 |
+
"WebUI Host": "WebUI 监听地址",
|
| 113 |
+
"WebUI Port": "WebUI 端口",
|
| 114 |
+
"Whisper Model": "Whisper 模型",
|
| 115 |
+
"You can find the source code [here](https://github.com/fishaudio/fish-speech) and models [here](https://huggingface.co/fishaudio/fish-speech-1).": "你可以在 [这里](https://github.com/fishaudio/fish-speech) 找到源代码和 [这里](https://huggingface.co/fishaudio/fish-speech-1) 找到模型.",
|
| 116 |
+
"bf16-true is recommended for 30+ series GPU, 16-mixed is recommended for 10+ series GPU": "30+ 系列 GPU 建议使用 bf16-true, 10+ 系列 GPU 建议使用 16-mixed",
|
| 117 |
+
"latest": "最近的检查点",
|
| 118 |
+
"new": "创建新的检查点",
|
| 119 |
+
"Realtime Transform Text": "实时规范化文本",
|
| 120 |
+
"Normalization Result Preview (Currently Only Chinese)": "规范化结果预览",
|
| 121 |
+
"Text Normalization": "文本规范化",
|
| 122 |
+
"Select Example Audio": "选择参考音频"
|
| 123 |
+
}
|
i18n/scan.py
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import ast
|
| 2 |
+
import glob
|
| 3 |
+
import json
|
| 4 |
+
from collections import OrderedDict
|
| 5 |
+
from pathlib import Path
|
| 6 |
+
|
| 7 |
+
from loguru import logger
|
| 8 |
+
|
| 9 |
+
from .core import DEFAULT_LANGUAGE, I18N_FILE_PATH
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
def extract_i18n_strings(node):
|
| 13 |
+
i18n_strings = []
|
| 14 |
+
|
| 15 |
+
if (
|
| 16 |
+
isinstance(node, ast.Call)
|
| 17 |
+
and isinstance(node.func, ast.Name)
|
| 18 |
+
and node.func.id == "i18n"
|
| 19 |
+
):
|
| 20 |
+
for arg in node.args:
|
| 21 |
+
if isinstance(arg, ast.Str):
|
| 22 |
+
i18n_strings.append(arg.s)
|
| 23 |
+
|
| 24 |
+
for child_node in ast.iter_child_nodes(node):
|
| 25 |
+
i18n_strings.extend(extract_i18n_strings(child_node))
|
| 26 |
+
|
| 27 |
+
return i18n_strings
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
# scan the directory for all .py files (recursively)
|
| 31 |
+
# for each file, parse the code into an AST
|
| 32 |
+
# for each AST, extract the i18n strings
|
| 33 |
+
|
| 34 |
+
strings = []
|
| 35 |
+
folders = ["fish_speech", "tools"]
|
| 36 |
+
# for filename in glob.iglob("**/*.py", recursive=True):
|
| 37 |
+
for folder in folders:
|
| 38 |
+
for f in Path(folder).rglob("*.py"):
|
| 39 |
+
code = f.read_text(encoding="utf-8")
|
| 40 |
+
if "i18n(" in code:
|
| 41 |
+
tree = ast.parse(code)
|
| 42 |
+
i18n_strings = extract_i18n_strings(tree)
|
| 43 |
+
logger.info(f"Found {len(i18n_strings)} i18n strings in {f}")
|
| 44 |
+
strings.extend(i18n_strings)
|
| 45 |
+
|
| 46 |
+
code_keys = set(strings)
|
| 47 |
+
logger.info(f"Total unique: {len(code_keys)}")
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
standard_file = I18N_FILE_PATH / f"{DEFAULT_LANGUAGE}.json"
|
| 51 |
+
with open(standard_file, "r", encoding="utf-8") as f:
|
| 52 |
+
standard_data = json.load(f, object_pairs_hook=OrderedDict)
|
| 53 |
+
standard_keys = set(standard_data.keys())
|
| 54 |
+
|
| 55 |
+
# Define the standard file name
|
| 56 |
+
unused_keys = standard_keys - code_keys
|
| 57 |
+
logger.info(f"Found {len(unused_keys)} unused keys in {standard_file}")
|
| 58 |
+
for unused_key in unused_keys:
|
| 59 |
+
logger.info(f"\t{unused_key}")
|
| 60 |
+
|
| 61 |
+
missing_keys = code_keys - standard_keys
|
| 62 |
+
logger.info(f"Found {len(missing_keys)} missing keys in {standard_file}")
|
| 63 |
+
for missing_key in missing_keys:
|
| 64 |
+
logger.info(f"\t{missing_key}")
|
| 65 |
+
|
| 66 |
+
code_keys_dict = OrderedDict()
|
| 67 |
+
for s in strings:
|
| 68 |
+
code_keys_dict[s] = s
|
| 69 |
+
|
| 70 |
+
# write back
|
| 71 |
+
with open(standard_file, "w", encoding="utf-8") as f:
|
| 72 |
+
json.dump(code_keys_dict, f, ensure_ascii=False, indent=4, sort_keys=True)
|
| 73 |
+
f.write("\n")
|
| 74 |
+
|
| 75 |
+
logger.info(f"Updated {standard_file}")
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
# Define the standard file name
|
| 79 |
+
standard_file = I18N_FILE_PATH / f"{DEFAULT_LANGUAGE}.json"
|
| 80 |
+
|
| 81 |
+
# Find all JSON files in the directory
|
| 82 |
+
dir_path = I18N_FILE_PATH
|
| 83 |
+
languages = [f for f in dir_path.glob("*.json") if f.stem != DEFAULT_LANGUAGE]
|
| 84 |
+
|
| 85 |
+
# Load the standard file
|
| 86 |
+
with open(standard_file, "r", encoding="utf-8") as f:
|
| 87 |
+
standard_data = json.load(f, object_pairs_hook=OrderedDict)
|
| 88 |
+
|
| 89 |
+
# Loop through each language file
|
| 90 |
+
for lang_file in languages:
|
| 91 |
+
# Load the language file
|
| 92 |
+
with open(lang_file, "r", encoding="utf-8") as f:
|
| 93 |
+
lang_data = json.load(f, object_pairs_hook=OrderedDict)
|
| 94 |
+
|
| 95 |
+
# Find the difference between the language file and the standard file
|
| 96 |
+
diff = set(standard_data.keys()) - set(lang_data.keys())
|
| 97 |
+
|
| 98 |
+
miss = set(lang_data.keys()) - set(standard_data.keys())
|
| 99 |
+
|
| 100 |
+
# Add any missing keys to the language file
|
| 101 |
+
for key in diff:
|
| 102 |
+
lang_data[key] = "#!" + key
|
| 103 |
+
logger.info(f"Added missing key: {key} to {lang_file}")
|
| 104 |
+
|
| 105 |
+
# Del any extra keys to the language file
|
| 106 |
+
for key in miss:
|
| 107 |
+
del lang_data[key]
|
| 108 |
+
logger.info(f"Del extra key: {key} from {lang_file}")
|
| 109 |
+
|
| 110 |
+
# Sort the keys of the language file to match the order of the standard file
|
| 111 |
+
lang_data = OrderedDict(
|
| 112 |
+
sorted(lang_data.items(), key=lambda x: list(standard_data.keys()).index(x[0]))
|
| 113 |
+
)
|
| 114 |
+
|
| 115 |
+
# Save the updated language file
|
| 116 |
+
with open(lang_file, "w", encoding="utf-8") as f:
|
| 117 |
+
json.dump(lang_data, f, ensure_ascii=False, indent=4, sort_keys=True)
|
| 118 |
+
f.write("\n")
|
| 119 |
+
|
| 120 |
+
logger.info(f"Updated {lang_file}")
|
| 121 |
+
|
| 122 |
+
logger.info("Done")
|