Files
LocalAI/addons/talk/manifest.json
T
Ettore Di Giacinto 7df9b263ed feat(addons): carry translated text in the manifest and the library
The manifest said its text in English only. An add-on can now translate
what the host shows to people, and the library list shows it before the
add-on is installed.

The title and the description use the language maps of ui.title and
ui.description, which every host already reads. A new optional field,
i18n, translates the connector kinds by language tag. It stays under api
2 and its set of fields is closed: the title and the description of a
declared kind, and only where the English kind has them. Tool
descriptions, schemas and skills are for the model and stay English.
Tags follow the language map rule (at most 16, no English), each string
has the limit of its English field, all translated text has at most
12 000 characters, and markup, control characters and direction
overrides are refused. A host that does not know the field refuses the
manifest, as it refuses any unknown field. The field is part of the
manifest, so the package digest and the signature cover it.

The catalog generator copies the translated title and description of
the manifest into each library entry (ui.titles, ui.descriptions), the
host validates them like the manifest values, and a library search
matches the English and the translated text. The apps list and the
connector kinds return the text of every language and, when the request
names a language (lang, else Accept-Language), the resolved text beside
the English fields: language, localizedTitle and localizedDescription.
No existing field changes.

Every add-on on master now has its title and description in Italian,
German, Spanish, French, Brazilian Portuguese, Simplified Chinese,
Korean and Indonesian, and the chat connectors carry their kind text in
the same languages. The packaging tests require that, and that a
translation has the fields of the English text it translates. The names
of the add-ons that provide a role are matched in their English title
only: a translation is often an ordinary word of its language.

Assisted-by: Claude:claude-sonnet-5-5 go
2026-11-04 17:46:53 +00:00

47 lines
1.9 KiB
JSON

{
"schemaVersion": 1,
"id": "talk",
"version": "0.1.0",
"executable": "talk",
"os": "linux",
"arch": "amd64",
"host": { "min": 1, "max": 1 },
"api": {"min": 2, "max": 2},
"protocol": { "min": 1, "max": 1 },
"dataFormat": { "min": 1, "max": 1 },
"capabilities": {
"ui": {
"entry": "ui/talk.js",
"css": ["ui/talk.css"],
"sdk": { "min": 2, "max": 2 },
"pages": ["talk"],
"navigation": ["talk"],
"modelActions": [{"capability": "FLAG_TRANSCRIPT", "page": "talk"}],
"mainPage": "talk",
"icon": "ui/icon.png",
"title": {
"en": "Talk",
"it": "Conversazione vocale",
"de": "Sprachchat",
"es": "Conversación de voz",
"fr": "Vocal",
"pt-BR": "Conversa por voz",
"zh-CN": "语音对话",
"ko": "음성 대화",
"id": "Obrolan suara"
},
"description": {
"en": "Have a spoken conversation with a model: your voice goes in, the answer is spoken back.",
"it": "Conversa a voce con un modello: la tua voce entra, la risposta viene pronunciata.",
"de": "Führen Sie ein gesprochenes Gespräch mit einem Modell: Ihre Stimme geht hinein, die Antwort wird gesprochen.",
"es": "Mantén una conversación hablada con un modelo: tu voz entra y la respuesta se pronuncia en voz alta.",
"fr": "Dialoguez à voix haute avec un modèle : votre voix entre, la réponse est prononcée.",
"pt-BR": "Tenha uma conversa falada com um modelo: sua voz entra e a resposta é falada de volta.",
"zh-CN": "与模型进行语音对话:你说话输入,回答以语音读出。",
"ko": "모델과 음성으로 대화합니다. 내 목소리가 입력되고 답변은 음성으로 들려줍니다.",
"id": "Lakukan percakapan lisan dengan model: suara Anda masuk, jawabannya diucapkan kembali."
}
}
}
}