Languages
Input profiles
An input profile binds language behavior (IME, prediction, fonts) to a keyboard layout (key topology):
| Field | Role |
|---|---|
id | Stable profile identifier (for example en-qwerty, ja-romaji) |
languageTag | BCP 47 tag: drives IME, prediction, and font selection |
layoutId | Keyboard layout file |
displayName | Label on the space bar and in the language popup |
imeEngineId | IME engine (none, romaji, flick, pinyin, …) |
Bundled defaults define one profile per layout (56 total). Profile id combines languageTag and layout variant (for example en-qwerty, de-qwertz, zh-Hans-pinyin, ja-12key).
Defaults are embedded in the plugin. Omit inputProfiles in QML to use them; set only activeProfileIds and currentProfileId.
Activating bundled profiles
VirtualKeyboard {
width: parent.width
activeProfileIds: ["en-qwerty", "fr-azerty", "de-qwertz", "ja-romaji"]
currentProfileId: "en-qwerty"
}
Or at runtime via the singleton:
Component.onCompleted: {
Lnvk.activeProfileIds = ["en-qwerty", "fr-azerty", "de-qwertz", "ja-romaji"]
Lnvk.currentProfileId = "en-qwerty"
}
Japanese has two bundled profiles (ja-romaji, ja-12key). Hindi has transliteration (hi-transliteration) and Devanagari (hi-Deva-deva).
Custom profiles
Override or extend the bundled set by supplying inputProfiles (each object needs id, languageTag, layoutId, displayName, imeEngineId):
VirtualKeyboard {
inputProfiles: [
{
id: "en-qwerty",
languageTag: "en",
layoutId: "en",
displayName: "English",
imeEngineId: "none"
},
{
id: "es-qwerty",
languageTag: "es",
layoutId: "es",
displayName: "Español",
imeEngineId: "none"
}
]
activeProfileIds: ["en-qwerty", "es-qwerty"]
currentProfileId: "en-qwerty"
}
Switching at runtime
Users switch via the globe key (when ≥ 2 profiles are active) or long-press on the space bar.
Lnvk.selectProfile("fr-azerty") // by profile id
Lnvk.selectLanguage("fr") // first active profile with this languageTag
currentProfileId, currentLanguage, and currentDisplayName on the singleton reflect the active profile:
Text { text: Lnvk.currentDisplayName } // e.g. "English"
Finding profiles
Discovery helpers return objects from the full inputProfiles catalog (not only activeProfileIds). Each entry has id, languageTag, layoutId, displayName, and imeEngineId. Use Lnvk.activeProfiles for the enabled subset (same shape; used by the language popup).
| You have… | Call |
|---|---|
| Profile id | Lnvk.profileDisplayName(id) |
BCP‑47 languageTag ("ja", "zh-Hans") | Lnvk.profilesForLanguageTag(tag) |
// Two Japanese layouts share languageTag "ja"
const japanese = Lnvk.profilesForLanguageTag("ja")
if (japanese.length > 0)
Lnvk.selectProfile(japanese[0].id)
// Enabled profiles for the language popup
languageList.model = Lnvk.activeProfiles
selectLanguage(bcp47) switches among active profiles only (first exact languageTag match). Prefer selectProfile(id) when you know the profile id.
Available bundled profiles
Use profile id values in activeProfileIds, currentProfileId, and Lnvk.selectProfile(). Profile ids encode language and layout variant (for example ja-romaji, zh-Hans-pinyin, hi-Deva-deva). Full input methods (IME with candidate selection) are provided for Chinese, Japanese and Korean.
| Profile id | Display name |
|---|---|
ar-arabic | العربية |
be-cyrillic | Беларуская |
bg-cyrillic | Български |
bn-transliteration | বাংলা |
bs-qwertz | Bosanski |
ca-qwerty | Català |
cs-qwertz | Čeština |
cy-qwerty | Cymraeg |
da-qwerty | Dansk |
de-qwertz | Deutsch |
el-greek | Ελληνικά |
en-qwerty | English |
es-qwerty | Español |
et-qwerty | Eesti |
fi-qwerty | Suomi |
fr-azerty | Français |
ga-qwerty | Gaeilge |
gl-qwerty | Galego |
he-hebrew | עברית |
hi-Deva-deva | हिन्दी |
hi-transliteration | Hindi |
hr-qwertz | Hrvatski |
hu-qwertz | Magyar |
hy-armenian | Հayeren |
is-qwerty | Íslenska |
it-qwerty | Italiano |
ja-12key | 日本語 (12-key) |
ja-romaji | 日本語 (Romaji) |
ka-georgian | ქართული |
kn-transliteration | ಕನ್ನಡ |
ko-dubeolsik | 한국어 |
lt-qwerty | Lietuvių |
lv-qwerty | Latviešu |
mk-cyrillic | Македонски |
mt-qwerty | Malti |
nb-qwerty | Norsk |
nl-qwerty | Nederlands |
pl-qwerty | Polski |
pt-qwerty | Português |
ro-qwerty | Română |
ru-jcuken | Русский |
sk-qwertz | Slovenčina |
sl-qwertz | Slovenščina |
sq-qwerty | Shqip |
sr-cyrillic | Српски |
sv-qwerty | Svenska |
ta-transliteration | தமிழ் |
te-transliteration | తెలుగు |
th-kedmanee | ไทย |
tr-qwerty | Türkçe |
uk-jcuken | Українська |
vi-qwerty | Tiếng Việt |
zh-Hans-pinyin | 中文 (简体) |
zh-Hant-HK-cangjie | 中文 (香港) |
zh-Hant-TW-zhuyin | 中文 (台灣) |
zh-Hant-pinyin-hant | 中文 (繁體) |