Offres Produits Études de cas Expertises À propos Nous contacter Blog Offres d'emploi
FR EN

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.

ComposantTaille 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 :

  1. Famille Noto/Inter par script pour la langue active si cette famille est enregistrée
  2. Inter pour le latin si disponible
  3. QGuiApplication::font() si elle couvre le système d'écriture actif
  4. 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.

SourceLicenceUtilisé dans
Unicode Unihan databaseUnicode License v3pinyin*.trie, cangjie*.trie, zhuyin.trie, japanese.trie
CC-CEDICTCC BY-SA 3.0pinyin.trie, pinyin-hant.trie
FrequencyWords (OpenSubtitles 2018)CC BY-SA 4.0All prediction-*.pred, transliteration tries, bigram-*.bigram
Kannada Wikipedia titlesCC BY-SA 4.0transliteration-kn.trie, bigram-kn.bigram
rime-essayLGPL-3.0Statistiques de fréquence chinoises (classements uniquement)
mecab-ipadic 2.7.0NAIST Licensejapanese.trie (fallback), matrix-ja.mtx
Mozc OSS dictionaryBSD 3-Clause + NAISTjapanese.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 :

AssetOverride
DictionnairesLNVK_DICT_DIR (doit contenir layouts.lnlay)
PolicesLNVK_FONTS_DIR ou FontPaths::setHostFontFiles()
Plugin QMLQML2_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épertoire qml/ de Qt.
  • Emplacement personnalisé : placez Ln/ n'importe où et définissez QML2_IMPORT_PATH vers 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 :

  1. Variable d'environnement LNVK_DICT_DIR
  2. LNVK_DICT_DIR à la compilation avec un préfixe fixe
  3. <app_dir>/share/lnvirtualkeyboard/dictionaries/préfixe plat
  4. <app_dir>/../share/lnvirtualkeyboard/dictionaries/ — préfixe d'installation (par défaut)
  5. <app_dir>/../data/dictionaries/
  6. <app_dir>/data/dictionaries/
  7. Remontée depuis <app_dir> à la recherche de data/dictionaries/ contenant layouts.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 :

  1. Variable d'environnement LNVK_FONTS_DIR (chemin absolu vers le répertoire des polices)
  2. Compile-time LNVK_FONTS_DIR
  3. <app_dir>/share/lnvirtualkeyboard/fonts/ — préfixe plat
  4. <app_dir>/../share/lnvirtualkeyboard/fonts/ — préfixe d'installation
  5. <app_dir>/../fonts/
  6. <app_dir>/fonts/
  7. Remontée depuis <app_dir> à la recherche d'un répertoire fonts/ contenant Inter-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) :

CodeLangueCodeLangue
arArabelvLetton
beBiélorussemkMacédonien
bgBulgaremtMaltais
bnBengalinbNorvégien Bokmål
bsBosniaquenlNéerlandais
caCatalanplPolonais
csTchèqueptPortugais
cyGalloisroRoumain
daDanoisruRusse
deAllemandskSlovaque
elGrecslSlovène
enAnglaissqAlbanais
esEspagnolsrSerbe
etEstoniensvSuédois
fiFinnoistaTamoul
frFrançaisteTélougou
gaIrlandaisthThaï
glGalicientrTurc
heHébreuukUkrainien
hiHindi (translittération)viVietnamien
hi-DevaHindi (Devanagari)zh-HansChinois simplifié (Pinyin)
hrCroatezh-HantChinois traditionnel (Pinyin)
huHongroiszh-Hant-HKChinois Hong Kong (Cangjie)
hyArménienzh-Hant-TWChinois Taïwan (Zhuyin)
isIslandaisjaJaponais (Romaji)
itItalienja-12keyJaponais (12 touches)
kaGéorgienkoCoréen
knKannadaltLituanien

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.