Déploiement avancé
Intégration rapide (CMake / qmake) : Déploiement. API QML après déploiement : Démarrage rapide.
Contenu du package
L'archive de release contient :
LNVK/
├── bin/
│ └── lndict-compiler (utilitaire de compilation de dictionnaires)
├── include/lnvk/
│ └── lnvk.h (#include <lnvk>)
├── integration/
│ ├── LNVKConfig.cmake
│ └── lnvirtualkeyboard.pri
├── qml/Ln/VirtualKeyboard/
│ ├── liblnvirtualkeyboardplugin.so
│ └── qmldir
├── share/lnvirtualkeyboard/dictionaries/
│ ├── layouts.lnlay (toutes les dispositions et profils — requis)
│ ├── themes.lntheme (thèmes sombre/clair embarqués — requis)
│ ├── *.trie # dictionnaires IME
│ ├── *.pred # prédiction de mots
│ ├── *.bigram # modèles bigrammes
│ ├── *.prism # prisme Pinyin
│ └── *.mtx # matrice de coût de connexion
├── share/lnvirtualkeyboard/fonts/
│ ├── Inter-Variable.ttf
│ ├── NotoSans*.ttf
│ └── NotoSansCJK*.otf
└── share/lnvirtualkeyboard/licenses/
├── OFL.txt
├── fonts-NOTICE.md
├── dictionaries-NOTICE.md
└── (autres textes de licence tiers)
Empreinte à l'installation
Tailles sur disque pour une build Release. Les fichiers dictionnaire sont mappés en mémoire à l'exécution ; ils n'augmentent pas l'empreinte heap du clavier au repos.
| Composant | Taille sur disque |
|---|---|
| Plugin QML | ~910 Kio |
layouts.lnlay | ~208 Kio |
themes.lntheme | ~104 o |
| Tous les binaires dictionnaire | ~80,5 Mio |
Anglais uniquement (en) | ~1021 Kio (+ dispositions + thèmes) |
Japonais (ja, ja-12key) | ~15,1 Mio |
Chinois simplifié (zh-Hans) | ~7,8 Mio |
Passez LANGUAGES à ln_virtual_keyboard_deploy ou LNVK_LANGUAGES en qmake pour n'embarquer que les dictionnaires des langues actives (voir Sélectionner les langues). layouts.lnlay et themes.lntheme sont toujours inclus lorsqu'une liste de langues est spécifiée. Profils et fichiers par langue : Langues.
Les dispositions et thèmes se chargent depuis share/lnvirtualkeyboard/dictionaries/ à l'exécution (même recherche de chemin que les autres fichiers dictionnaire). Les composants QML du clavier sont dans le binaire du plugin. Les polices embarquées sont optionnelles : fichiers .ttf / .otf sous share/lnvirtualkeyboard/fonts/, enregistrées au chargement du plugin si le répertoire est présent. Le clavier fonctionne sans elles et utilise vos polices.
Licences tierces
La release inclut des polices tierces (share/lnvirtualkeyboard/fonts/) et des données dictionnaire (share/lnvirtualkeyboard/dictionaries/). Les textes de licence et NOTICEs sont sous share/lnvirtualkeyboard/licenses/. Si vous redistribuez les polices ou dictionnaires embarqués, incluez ces fichiers de licence.
Polices (optionnelles)
Les polices embarquées sont une commodité, pas une obligation. Si FontPaths ne trouve aucun répertoire de polices au chargement, l'enregistrement est ignoré et le clavier fonctionne normalement ; il n'y a pas d'erreur au démarrage.
Lorsqu'elles sont présentes, le plugin les enregistre via QFontDatabase::addApplicationFont pendant l'initialisation du plugin.
Utiliser vos polices : appelez FontPaths::setHostFontFiles avant engine.load().
#include <lnvk>
lnvk::qt::FontPaths::setHostFontFiles({
"/opt/myapp/fonts/Inter-Variable.ttf",
"/opt/myapp/fonts/NotoSansArabic-Regular.ttf",
"/opt/myapp/fonts/NotoSansCJKsc-Regular.otf",
});
Lorsque setHostFontFiles est appelé, la découverte des polices embarquées (LNVK_FONTS_DIR, préfixe d'installation, etc.) n'est pas utilisée : la liste hôte est la seule source.
QML lie la famille résolue en lecture seule : font.family: Lnvk.effectiveFontFamily.
Ordre de résolution des familles de polices :
- Famille Noto/Inter par script pour la langue active si cette famille est enregistrée
Interpour le latin si disponibleQGuiApplication::font()si elle couvre le système d'écriture actif- Chaîne vide → police plateforme Qt
Si vous redistribuez les polices embarquées, incluez OFL.txt et fonts-NOTICE.md.
Données de dictionnaire
Les dictionnaires compilés proviennent des sources ouvertes ci-dessous. L'attribution par artefact est dans dictionaries-NOTICE.md.
| Source | Licence | Utilisé dans |
|---|---|---|
| Unicode Unihan database | Unicode License v3 | pinyin*.trie, cangjie*.trie, zhuyin.trie, japanese.trie |
| CC-CEDICT | CC BY-SA 3.0 | pinyin.trie, pinyin-hant.trie |
| FrequencyWords (OpenSubtitles 2018) | CC BY-SA 4.0 | All prediction-*.pred, transliteration tries, bigram-*.bigram |
| Kannada Wikipedia titles | CC BY-SA 4.0 | transliteration-kn.trie, bigram-kn.bigram |
| rime-essay | LGPL-3.0 | Statistiques de fréquence chinoises (classements uniquement) |
| mecab-ipadic 2.7.0 | NAIST License | japanese.trie (fallback), matrix-ja.mtx |
| Mozc OSS dictionary | BSD 3-Clause + NAIST | japanese.trie (preferred), matrix-ja.mtx |
Les fichiers incorporant des entrées CC BY-SA sont distribués sous CC BY-SA 4.0, uniquement pour les fichiers de données, pas le code du plugin ni les applications qui chargent les dictionnaires.
Compiler des dictionnaires de prédiction personnalisés
Le package inclut bin/lndict-compiler pour générer des fichiers .pred sans recompiler le projet.
# Depuis la racine de votre package LNVK
./bin/lndict-compiler --flat my-words.txt prediction-en-custom.pred
--flat accepte une liste de mots ou un TSV avec fréquence explicite (mot<TAB>mot<TAB>fréquence).
Déployez les fichiers .pred dans share/lnvirtualkeyboard/dictionaries/ et configurez la prédiction personnalisée. Voir le guide Configuration.
Disposition d'installation
Les helpers de déploiement copient QML et données sous une racine d'installation. Le plugin localise les assets relativement à QCoreApplication::applicationDirPath() (répertoire de l'exécutable).
Préfixe d'installation (par défaut)
Utilisez quand le binaire est dans un sous-répertoire bin/. C'est le défaut pour ln_virtual_keyboard_deploy() et lnvirtualkeyboard.pri.
<prefix>/
├── bin/myapp ← exécutable
├── qml/Ln/VirtualKeyboard/ ← plugin + qmldir
└── share/lnvirtualkeyboard/
├── dictionaries/ ← layouts.lnlay, themes.lntheme, *.pred, …
├── fonts/ ← optionnel
└── licenses/ ← OFL, NOTICEs, licences upstream
Recherche runtime (dictionnaires) : <app_dir>/../share/lnvirtualkeyboard/dictionaries/
Chemin d'import QML : applicationDirPath() + "/../qml"
set_target_properties(myapp PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
ln_virtual_keyboard_deploy(myapp LANGUAGES en fr FONTS)
Préfixe plat
Utilisez quand le binaire est directement sous la racine (sans bin/).
<prefix>/
├── myapp ← exécutable
├── qml/Ln/VirtualKeyboard/
└── share/lnvirtualkeyboard/
├── dictionaries/
├── fonts/ ← optionnel
└── licenses/
Recherche runtime (dictionnaires) : <app_dir>/share/lnvirtualkeyboard/dictionaries/
Chemin d'import QML : applicationDirPath() + "/qml"
ln_virtual_keyboard_deploy(myapp PREFIX "$<TARGET_FILE_DIR:myapp>" LANGUAGES en fr FONTS)
qmake : définissez LNVK_DEPLOY_PREFIX = $$OUT_PWD avant d'inclure lnvirtualkeyboard.pri.
Emplacements personnalisés
Si votre arborescence ne correspond à aucune disposition, définissez des chemins absolus à l'exécution ou via l'environnement :
| Asset | Override |
|---|---|
| Dictionnaires | LNVK_DICT_DIR (doit contenir layouts.lnlay) |
| Polices | LNVK_FONTS_DIR ou FontPaths::setHostFontFiles() |
| Plugin QML | QML2_IMPORT_PATH ou engine.addImportPath(...) |
Voir le déploiement manuel pour l'ordre de recherche.
Options CMake
Exemple CMake complet (identique au guide rapide, avec options supplémentaires) :
cmake_minimum_required(VERSION 3.16)
project(MyApp LANGUAGES CXX)
find_package(Qt6 REQUIRED COMPONENTS Quick)
set(LNVK_DIR "/path/to/LNVK/integration")
find_package(LNVK REQUIRED CONFIG)
add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE Qt6::Quick)
set_target_properties(myapp PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
ln_virtual_keyboard_deploy(myapp LANGUAGES en fr FONTS)
En C++, ajoutez le chemin d'import QML avant engine.load() (préfixe d'installation) :
engine.addImportPath(QCoreApplication::applicationDirPath() + QStringLiteral("/../qml"));
Pour un préfixe plat, utilisez "/qml", ou passez PREFIX "$<TARGET_FILE_DIR:myapp>" à ln_virtual_keyboard_deploy.
Sélectionner les langues
Par défaut tous les dictionnaires sont déployés. Ne déployez que certaines langues :
ln_virtual_keyboard_deploy(myapp LANGUAGES en fr)
Cela copie toujours layouts.lnlay (~208 Kio, toutes les dispositions et profils embarqués), themes.lntheme (thèmes sombre/clair), et tout share/lnvirtualkeyboard/licenses/ en plus des fichiers par langue. Les licences ne sont pas lues à l'exécution mais sont requises en cas de redistribution.
L'absence de layouts.lnlay ou themes.lntheme provoque des erreurs au démarrage comme Failed to load layout "en" ou Failed to load theme "dark", et la configuration des profils peut être corrigée (setActiveProfileIds: active profile ids were corrected).
Options qmake
Incluez le fichier .pri dans votre .pro :
include(/path/to/LNVK/integration/lnvirtualkeyboard.pri)
Cela copie le plugin QML et les dictionnaires vers le répertoire de build.
Pour ne déployer que certaines langues :
LNVK_LANGUAGES = en fr
include(/path/to/LNVK/integration/lnvirtualkeyboard.pri)
Polices embarquées optionnelles :
LNVK_DEPLOY_FONTS = 1
include(/path/to/LNVK/integration/lnvirtualkeyboard.pri)
Sinon enregistrez les polices depuis C++ avec FontPaths::setHostFontFiles — voir Polices (optionnelles).
Déploiement manuel
Fichiers plugin
Copiez Ln/VirtualKeyboard/ pour que le moteur QML le trouve :
- Chemin d'import QML de Qt : copiez
Ln/dans le répertoireqml/de Qt. - Emplacement personnalisé : placez
Ln/n'importe où et définissezQML2_IMPORT_PATHvers son parent :
export QML2_IMPORT_PATH=/opt/myapp/lib/qml
# Le plugin doit être dans /opt/myapp/lib/qml/Ln/VirtualKeyboard/
Fichiers dictionnaire
Le plugin résout le répertoire dictionnaires (doit contenir layouts.lnlay) dans l'ordre :
- Variable d'environnement
LNVK_DICT_DIR LNVK_DICT_DIRà la compilation avec un préfixe fixe<app_dir>/share/lnvirtualkeyboard/dictionaries/— préfixe plat<app_dir>/../share/lnvirtualkeyboard/dictionaries/— préfixe d'installation (par défaut)<app_dir>/../data/dictionaries/<app_dir>/data/dictionaries/- Remontée depuis
<app_dir>à la recherche dedata/dictionaries/contenantlayouts.lnlay
Les fichiers dictionnaire individuels (par ex. prediction-en.pred) sont ouverts dans ce répertoire.
Fichiers de polices (optionnels)
Si vous utilisez les polices embarquées, copiez share/lnvirtualkeyboard/fonts/ à côté de l'app (même disposition que les dictionnaires) :
<app_dir>/../share/lnvirtualkeyboard/fonts/
Inter-Variable.ttf
NotoSans*.ttf
NotoSansCJK*.otf
Ou définissez LNVK_FONTS_DIR vers un répertoire contenant ces fichiers. Ordre de recherche FontPaths :
- Variable d'environnement
LNVK_FONTS_DIR(chemin absolu vers le répertoire des polices) - Compile-time
LNVK_FONTS_DIR <app_dir>/share/lnvirtualkeyboard/fonts/— préfixe plat<app_dir>/../share/lnvirtualkeyboard/fonts/— préfixe d'installation<app_dir>/../fonts/<app_dir>/fonts/- Remontée depuis
<app_dir>à la recherche d'un répertoirefonts/contenantInter-Variable.ttf
Pour vos polices, omettez ce répertoire et appelez FontPaths::setHostFontFiles avant l'init du plugin. Utilisez les mêmes noms de familles Qt que le jeu embarqué (Noto/Inter).
Codes de langue disponibles
Passez ces codes à LANGUAGES (CMake) ou LNVK_LANGUAGES (qmake) :
| Code | Langue | Code | Langue |
|---|---|---|---|
ar | Arabe | lv | Letton |
be | Biélorusse | mk | Macédonien |
bg | Bulgare | mt | Maltais |
bn | Bengali | nb | Norvégien Bokmål |
bs | Bosniaque | nl | Néerlandais |
ca | Catalan | pl | Polonais |
cs | Tchèque | pt | Portugais |
cy | Gallois | ro | Roumain |
da | Danois | ru | Russe |
de | Allemand | sk | Slovaque |
el | Grec | sl | Slovène |
en | Anglais | sq | Albanais |
es | Espagnol | sr | Serbe |
et | Estonien | sv | Suédois |
fi | Finnois | ta | Tamoul |
fr | Français | te | Télougou |
ga | Irlandais | th | Thaï |
gl | Galicien | tr | Turc |
he | Hébreu | uk | Ukrainien |
hi | Hindi (translittération) | vi | Vietnamien |
hi-Deva | Hindi (Devanagari) | zh-Hans | Chinois simplifié (Pinyin) |
hr | Croate | zh-Hant | Chinois traditionnel (Pinyin) |
hu | Hongrois | zh-Hant-HK | Chinois Hong Kong (Cangjie) |
hy | Arménien | zh-Hant-TW | Chinois Taïwan (Zhuyin) |
is | Islandais | ja | Japonais (Romaji) |
it | Italien | ja-12key | Japonais (12 touches) |
ka | Géorgien | ko | Coréen |
kn | Kannada | lt | Lituanien |
Déploiement embarqué
Utilisez le préfixe d'installation ou le préfixe plat sur l'appareil. Exemple (préfixe d'installation) :
/opt/myapp/bin/myapp
/opt/myapp/qml/Ln/VirtualKeyboard/
/opt/myapp/share/lnvirtualkeyboard/dictionaries/
/opt/myapp/share/lnvirtualkeyboard/fonts/ (optional)
/opt/myapp/share/lnvirtualkeyboard/licenses/
Définissez LNVK_FONTS_DIR uniquement pour des polices embarquées hors chemin standard.
Compatibilité Qt
Le plugin est compatible avec Qt 5.15 et Qt 6.x. Utilisez la release correspondant à votre version majeure de Qt.