Merge pull request #6137 from keymanapp/feat/windows/6099-emit-keystrokes-from-imx

feat(windows): emit keystrokes for imx keydown/up actions 🥑
This commit is contained in:
rc-swag 2022-01-24 16:47:42 +10:00 committed by GitHub
commit ad91e0e307
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
185 changed files with 15334 additions and 406 deletions

View file

@ -1,8 +1,8 @@
#
# Automatically merges pull requests opened by keyman-server
# The initial use of this action is to increment the patch
# The initial use of this action is to increment the patch
# version of Keyman with resources/build/increment-version.sh.
# That script creates a PR and then this workflow will be
# That script creates a PR and then this workflow will be
# triggered to approve the PR (from github-actions account), and
# then automerge it.
#
@ -14,15 +14,14 @@ on:
jobs:
build:
runs-on: ubuntu-latest
if: ${{ github.actor == 'keyman-server' && startsWith(github.event.pull_request.title, 'auto:') }}
steps:
- name: auto approve PR from keyman-server
uses: hmarr/auto-approve-action@v2.0.0
if: github.actor == 'keyman-server'
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: auto merge PR from keyman-server
uses: "pascalgn/automerge-action@7854d3bd607dccdaf0b2c134b699a812c8960213"
if: github.actor == 'keyman-server'
env:
GITHUB_TOKEN: "${{ secrets.AUTOINC_GITHUB_TOKEN }}"
MERGE_LABELS: ""

View file

@ -1,5 +1,45 @@
# Keyman Version History
## 15.0.183 alpha 2022-01-21
* chore(linux): Update changelogs for 14.0.284 :cherries: (#6132)
* chore(linux): Revert workaround for Python bug (#6133)
## 15.0.182 alpha 2022-01-21
* chore(linux): Add metadata file for packaging (#6127)
* fix(web): crash in setTitleFromKeyboard when no keyboard active (#6129)
## 15.0.181 alpha 2022-01-19
* fix(linux): Add workaround for Python bug (#6124)
* docs(linux): Add missing dependency (#6118)
## 15.0.180 alpha 2022-01-18
* feat(web): Caps Layer and double-tap gesture (#5989)
* fix(web): Use regex to determine display layer and functional layers (#6100)
## 15.0.179 alpha 2022-01-17
* feat(web): Start of Sentence support - part 1 (#5963)
* feat(developer): support for Caps Lock layer (#5988)
* fix(web): call postKeystroke on banner touch (#6004)
* chore(ios): project scripts should use /usr/bin/env bash (#6114)
* chore: update docs (#6115)
* chore(common): Check in crowdin strings for Kibaku (#6048)
* fix(mac): externalize strings for package info window localization (#6088)
* fix(developer): repatch #6074 (#6111)
* fix(linux): Fix lintian errors (#6106)
## 15.0.178 alpha 2022-01-14
* chore(common): Check in crowdin strings for Waha (#6050)
## 15.0.177 alpha 2022-01-13
* chore(common): Check in crowdin strings for Marghi (#6049)
## 15.0.176 alpha 2022-01-12
* fix(windows): add x64 build fix invalid memory access (#6057)

View file

@ -1 +1 @@
15.0.177
15.0.184

View file

@ -0,0 +1,154 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Context: Menu Action -->
<string name="action_share" comment="Menu action to send text content to another app">Ndǝɦǝnta</string>
<!-- Context: Menu Action -->
<string name="action_web" comment="Menu action to open Keyman browser">Brauza nǝr Web</string>
<!-- Context: Menu Action -->
<string name="action_text_size" comment="Menu action to adjust text size">Ngakurǝr Text</string>
<!-- Context: Menu Action -->
<string name="action_overflow" comment="Show additional menu items">Dzakti</string>
<!-- Context: Menu Action -->
<string name="action_clear_text" comment="Menu action to erase text">Kǝkǝrnta Text</string>
<!-- Context: Menu Action -->
<string name="action_info" comment="Menu action to display Keyman help page">Sǝr zǝndi</string>
<!-- Context: Menu Action -->
<string name="action_settings" comment="Menu action to open Settings menu">Settingyere</string>
<!-- Context: Menu Action -->
<string name="action_install_updates" comment="Menu notification that keyboard or dictionary updates available">Vu Updateyere</string>
<!-- Context: Title -->
<string name="title_version" comment="Title of Keyman for Android version">Jili: %1$s</string>
<!-- Context: Text label when old Chrome version installed -->
<string name="text_require_chrome_57" comment="Banner text when old version of Chrome is installed"> Kiman ada bara Krom vashion 57 ko nam bǝlin ta dza.</string>
<!-- Context: Button label -->
<string name="button_update_chrome" comment="Prompt to upgrade Chrome in the Play Store">Dzakti bǝlikurir Krom</string>
<!-- Context: Textfield prompt (&#8230; is the ellipsis character "...") -->
<string name="textview_hint" comment="Prompt to start typing">Badicini taiping akwani&#8230;</string>
<!-- Context: Splash screen (version/copyright info currently disabled -->
<!-- Context: Splash screen (version/copyright info currently disabled -->
<!-- Context: Text Size dialog -->
<string name="text_size" comment="Current text size (number)">Ngakurǝr Text: %1$d</string>
<!-- Context: Text Size dialog -->
<string name="ic_text_size_up" comment="Make text bigger">Dzakti ngakurir text</string>
<!-- Context: Text Size dialog -->
<string name="ic_text_size_down" comment="Make text smaller">Kǝnta ngakurir text</string>
<!-- Context: Clear Text dialog -->
<string name="all_text_will_be_cleared" comment="Erase all the text">\nShanga text ata fwavuntadzi\n</string>
<!-- Context: Get Started menu -->
<string name="get_started" comment="Menu for getting started">Badicini kulini</string>
<!-- Context: Get Started menu -->
<string name="add_a_keyboard" comment="Menu item to add a keyboard">Dzakǝkǝr kibod kadǝbar nyar ngɛ</string>
<!-- Context: Get Started menu -->
<string name="enable_system_keyboard" comment="Menu item to enable Keyman as system keyboard">ʻYati ka Keyman njai kibod nǝr system shang shang</string>
<!-- Context: Get Started menu -->
<string name="set_keyman_as_default" comment="Menu item to set Keyman as default system keyboard">Mǝrti ka Keyman dza njai default keyboard</string>
<!-- Context: Get Started menu -->
<string name="more_info" comment="Open the Keyman for Android help page">Dzaktǝr sǝr zǝndi</string>
<!-- Context: Get Started menu -->
<string name="show_get_started" comment="Show the &quot;Get Started&quot; menu on startup">Tsanti \"%1$s\" akwa badicini</string>
<!-- Context: Android Storage Permission -->
<string name="request_storage_permission" comment="Request storage permission to access keyboard packages"> Kadǝbar ka gǝ mǝzi vu packageyere, gyar Keyman ka dzǝ karatɛ vi pu suyere nam abǝla.</string>
<!-- Context: Android Storage Permission -->
<string name="storage_permission_denied" comment="Keyboard package installation may fail since Android storage permission not granted"> Ndǝ kanti yuwur bara vǝyir pu su. Bisu adiyata gyar ka gǝ vu package nǝr kibod wɛ</string>
<!-- Context: Keyman Settings menu -->
<string name="keyman_settings" comment="Settings menu title">Settingyere</string>
<!-- Context: Keyman Settings menu -->
<plurals name="installed_languages">
<item quantity="one">Vu nyayere (%1$d)</item>
<item quantity="other">Nyayere namtǝ ndǝ vu (%1$d)</item>
</plurals>
<!-- Context: Keyman Settings menu -->
<string name="install_keyboard_or_dictionary" comment="Menu item to install keyboard or dictionary">Vu Kibod ko Dictionary</string>
<!-- Context: Keyman Settings menu -->
<string name="change_display_language" comment="Menu action to change interface language">Nyar tsanti su</string>
<!-- Context: Keyman Settings menu -->
<string name="adjust_keyboard_height" comment="Menu action to adjust keyboard height">Dzuguti dzugamkurir kibod</string>
<!-- Context: Keyman Settings menu -->
<string name="spacebar_caption" comment="Menu action to set the spacebar caption">Kapshion nǝr Spesba</string>
<!-- Context: Keyman Settings menu / Spacebar caption -->
<string name="spacebar_caption_keyboard" comment="Spacebar caption option - keyboard">Kibod</string>
<!-- Context: Keyman Settings menu / Spacebar caption -->
<string name="spacebar_caption_language" comment="Spacebar caption option - language">Nya</string>
<!-- Context: Keyman Settings menu / Spacebar caption -->
<string name="spacebar_caption_language_keyboard" comment="Spacebar caption option - language + keyboard">Nya + Kibod</string>
<!-- Context: Keyman Settings menu / Spacebar caption -->
<string name="spacebar_caption_blank" comment="Spacebar caption option - blank">Kuraka rubwa</string>
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
<string name="spacebar_caption_hint_keyboard" comment="Spacebar caption hint - keyboard">Tsanti thlǝma kibod ata spesba</string>
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
<string name="spacebar_caption_hint_language" comment="Spacebar caption hint - language">Tsanti thlǝma nya ata spesba</string>
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
<string name="spacebar_caption_hint_language_keyboard" comment="Spacebar caption hint - language + keyboard">Nya aka kibod ata spesba</string>
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
<string name="spacebar_caption_hint_blank" comment="Spacebar caption hint - blank">Ta gǝta tsanti kapshion ata spesba</string>
<!-- Context: Keyman Settings menu -->
<string name="show_banner" comment="text suggestions banner">Tsanti banner kǝlara saka</string>
<!-- Context: Keyman Settings menu -->
<string name="show_banner_on" comment="Description when toggle is on">Namtǝ ndata ʻyati</string>
<!-- Context: Keyman Settings menu -->
<string name="show_banner_off" comment="Description when toggle is off">Ma tsai tsai, tsantin predictive text sai saka namtǝ ndǝ mburnta tǝni</string>
<!-- Context: Keyman Settings menu -->
<string name="show_send_crash_report" comment="permission for sending crash reports">Ka gǝ gyar hyantǝr rupotu nǝr suwar su akwa whalǝr sambar</string>
<!-- Context: Keyman Settings menu -->
<string name="show_send_crash_report_on" comment="Description when toggle is on">Ma ata kǝra kǝthlǝr, rupotu ata kǝra suwar su ndata mǝzi hyanti tǝni</string>
<!-- Context: Keyman Settings menu -->
<string name="show_send_crash_report_off" comment="Description when toggle is off">Ma dzǝ tsat tsai, rupotu nǝr suwar su adiyata mǝzi hyantǝdzi wɛ</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="install_from_keyman_dot_com" comment="Install package from Keyman server">Ɓui ka vu tubwar keyman.com</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="install_from_local_file" comment="Install package file from local device">Ɓui ka vu tubwar local file</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="install_from_other_device" comment="Scan QR Code">Ɓui ka vu tubwar divais damwa</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="add_languages_to_installed_keyboard" comment="Install additional languages from a keyboard package">Dzakti nya damwayere akuya ka gǝ vu kibod</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="add_language_subtext" comment="Additional information for adding another language">(tubwar kibod package)</string>
<!-- Context: Select Package and Select Languages menu -->
<string name="title_select_keyboard_package_list" comment="Select a keyboard package to add languages">Tsarba Package nǝr Kibod</string>
<!-- Context: Select Package and Select Languages menu -->
<string name="title_select_languages_for_package" comment="Select language names from the keyboard package">Tsarba nyayere kadǝbar %1$s</string>
<!-- Context: Select Package and Select Languages menu -->
<string name="added_language_to_keyboard" comment="Notification that a language name is added to a keyboard">Nyayere namtǝ ndǝ dzaktiyere %1$s to %2$s</string>
<!-- Context: Select Package and Select Languages menu -->
<string name="all_languages_installed" comment="Text when all languages from a keyboard package have been installed">Shanga nyayere ndǝ kurtǝ vu tǝdar</string>
<!-- Context: Adjust Keyboard Height menu -->
<string name="drag_the_keyboard" comment="First line of adjusting keyboard height">Ndǝrti kibod akuya ka gǝ kǝnta dzugamkurir ko saɓǝlkur su</string>
<!-- Context: Adjust Keyboard Height menu -->
<string name="rotate_the_device" comment="Second line of adjusting keyboard height">Mwari aka sǝr ʻya su akuyaka gǝ dzuguti njaiyir lanskep</string>
<!-- Context: Adjust Keyboard Height menu -->
<string name="reset_to_defaults" comment="Button to reset to default heights">Ɓǝla ʻyati tǝni apa Waci</string>
<!-- Context: Keyman Web Browser -->
<string name="hint_text" comment="Prompt to type in the browser search bar">Bara ko type URL</string>
<!-- Context: Keyman Web Browser -->
<string name="title_bookmarks" comment="Title for bookmarks">Bookmarkyere</string>
<!-- Context: Keyman Web Browser -->
<string name="no_bookmarks" comment="Text when bookmark list is empty">Bookmarkyere adiwɛ</string>
<!-- Context: Keyman Web Browser -->
<string name="add_bookmark" comment="Confirmation to add bookmark">Bookmarkyere adiwɛ</string>
<!-- Context: Keyman Web Browser -->
<string name="hint_title" comment="Page title for saved bookmark">Thlǝmɛ</string>
<!-- Context: Keyman Web Browser -->
<string name="hint_url" comment="Page URL for saved bookmark">Url</string>
<!-- Context: KMP Package strings -->
<string name="title_package_failed_to_install" comment="Error dialog title when package failed to install">Package %1$s ngǝla vudzi</string>
<!-- Context: KMP Package strings -->
<string name="downloading_keyboard_package" comment="Confirmation to download keyboard package filename">Download nǝr kibod package\n%1$s&#8230;</string>
<!-- Context: KMP Package strings -->
<string name="failed_to_extract" comment="Notification that keyboard package failed to unzip">Ngǝlata kǝlbadzi ko sǝgǝl</string>
<!-- Context: KMP Package strings -->
<string name="install_keyboard_package" comment="Title to install keyboard package">Hau ko vu Kibod</string>
<!-- Context: KMP Package strings -->
<string name="install_predictive_text_package" comment="Title to install dictionary package">Vu ko hau Dictionary</string>
<!-- Context: KMP Package strings -->
<string name="not_valid_package_file" comment="Notification when invalid package file cannot be installed">%1$s adi Keyman package file nam aka peda wɛ.\n%2$s\"</string>
<!-- Context: KMP Package strings -->
<string name="no_new_touch_keyboards_to_install" comment="Notification when no touch-optimized keyboards can be installed">Package nǝr kibod adiyaka sǝr tsukwar nǝr vu ka kibodyere ka dar vudzi ko haudzi wɛ</string>
<!-- Context: KMP Package strings -->
<string name="no_new_predictive_text_to_install" comment="Notification when no dictionaries can be installed">Predictive text adiwɛ namtǝ ndata mǝzi hau ko vu</string>
<!-- Context: KMP Package strings -->
<string name="no_targets_to_install" comment="Notification when a package doesn't contain keyboards or dictionaries">Kibodyere ko predictive text adiwɛ namtǝ ndata vu ko hau</string>
<!-- Context: KMP Package strings -->
<string name="no_associated_languages" comment="Notification when a keyboard package doesn't contain languages">Keyboard package adiyaka nyayere namtǝ ndata mǝzi vu ko hau</string>
<!-- Context: KMP Package strings -->
<string name="invalid_metadata" comment="kmp.json metadata file is invalid or missing in package">Invalid/Missing metadata in package</string>
</resources>

View file

@ -0,0 +1,155 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Context: Menu Action -->
<string name="action_share" comment="Menu action to send text content to another app">Tuguta</string>
<!-- Context: Menu Action -->
<string name="action_web" comment="Menu action to open Keyman browser">Web Browser</string>
<!-- Context: Menu Action -->
<string name="action_text_size" comment="Menu action to adjust text size">Kaduka Gwaɗa</string>
<!-- Context: Menu Action -->
<string name="action_overflow" comment="Show additional menu items">Mbakata</string>
<!-- Context: Menu Action -->
<string name="action_clear_text" comment="Menu action to erase text">Tsuweɗeɗa Gwaɗa</string>
<!-- Context: Menu Action -->
<string name="action_info" comment="Menu action to display Keyman help page">Info</string>
<!-- Context: Menu Action -->
<string name="action_settings" comment="Menu action to open Settings menu">Settings</string>
<!-- Context: Menu Action -->
<string name="action_install_updates" comment="Menu notification that keyboard or dictionary updates available">Fanta tinahunda sa magalo</string>
<!-- Context: Title -->
<string name="title_version" comment="Title of Keyman for Android version">Version: %1$s</string>
<!-- Context: Text label when old Chrome version installed -->
<string name="text_require_chrome_57" comment="Banner text when old version of Chrome is installed"> Keyman ɗowt Chrome version 57 ko wuliwa.</string>
<!-- Context: Button label -->
<string name="button_update_chrome" comment="Prompt to upgrade Chrome in the Play Store">Update Chrome</string>
<!-- Context: Textfield prompt (&#8230; is the ellipsis character "...") -->
<string name="textview_hint" comment="Prompt to start typing">A fuɗa vinda ahdina&#8230;</string>
<!-- Context: Splash screen (version/copyright info currently disabled -->
<!-- Context: Splash screen (version/copyright info currently disabled -->
<!-- Context: Text Size dialog -->
<string name="text_size" comment="Current text size (number)">Text Size: %1$d</string>
<!-- Context: Text Size dialog -->
<string name="ic_text_size_up" comment="Make text bigger">Text size up</string>
<!-- Context: Text Size dialog -->
<string name="ic_text_size_down" comment="Make text smaller">Text size down</string>
<!-- Context: Clear Text dialog -->
<string name="all_text_will_be_cleared" comment="Erase all the text">\nSma inaha ngana da ɗughwana\n</string>
<!-- Context: Get Started menu -->
<string name="get_started" comment="Menu for getting started">Yagha a fuɗa</string>
<!-- Context: Get Started menu -->
<string name="add_a_keyboard" comment="Menu item to add a keyboard">A mbaka t keyboard anga gwaɗa luwaghini</string>
<!-- Context: Get Started menu -->
<string name="enable_system_keyboard" comment="Menu item to enable Keyman as system keyboard">Maghva Keyman as system-wide keyboard</string>
<!-- Context: Get Started menu -->
<string name="set_keyman_as_default" comment="Menu item to set Keyman as default system keyboard">Affat Keyman man keyboard kol ɗughwana</string>
<!-- Context: Get Started menu -->
<string name="more_info" comment="Open the Keyman for Android help page">Mbakat info</string>
<!-- Context: Get Started menu -->
<string name="show_get_started" comment="Show the &quot;Get Started&quot; menu on startup">Marant \"%1$s\" taghan startup</string>
<!-- Context: Android Storage Permission -->
<string name="request_storage_permission" comment="Request storage permission to access keyboard packages"> Ka funt keyboard packages, avathla Keyman wativa jangat ina fal ta bileke.</string>
<!-- Context: Android Storage Permission -->
<string name="storage_permission_denied" comment="Keyboard package installation may fail since Android storage permission not granted"> Wativa fata ɗowlo thlaha thlaha. Kaɗa ha da fant keyboard package wo</string>
<!-- Context: Keyman Settings menu -->
<string name="keyman_settings" comment="Settings menu title">Settings</string>
<!-- Context: Keyman Settings menu -->
<plurals name="installed_languages">
<item quantity="zero">Gwaɗa luwagwaɗa luwa (%1$d)</item>
<item quantity="one">Gwaɗa luwagwaɗa luwa (%1$d)</item>
<item quantity="other">Gwaɗa luwagwaɗa luwa (%1$d)</item>
</plurals>
<!-- Context: Keyman Settings menu -->
<string name="install_keyboard_or_dictionary" comment="Menu item to install keyboard or dictionary">Fant Keyboard ko Dictionary</string>
<!-- Context: Keyman Settings menu -->
<string name="change_display_language" comment="Menu action to change interface language">Sangabt gwaɗa luwa</string>
<!-- Context: Keyman Settings menu -->
<string name="adjust_keyboard_height" comment="Menu action to adjust keyboard height">Gulat keyboard fiwukini</string>
<!-- Context: Keyman Settings menu -->
<string name="spacebar_caption" comment="Menu action to set the spacebar caption">Spacebar caption</string>
<!-- Context: Keyman Settings menu / Spacebar caption -->
<string name="spacebar_caption_keyboard" comment="Spacebar caption option - keyboard">Ina ta faftal jiv tadiye k vinda an kompitaina ta faftal jiv tadiye k vinda an kompita</string>
<!-- Context: Keyman Settings menu / Spacebar caption -->
<string name="spacebar_caption_language" comment="Spacebar caption option - language">Gwaɗa luwa</string>
<!-- Context: Keyman Settings menu / Spacebar caption -->
<string name="spacebar_caption_language_keyboard" comment="Spacebar caption option - language + keyboard">Gwaɗa luwa nda keyboard</string>
<!-- Context: Keyman Settings menu / Spacebar caption -->
<string name="spacebar_caption_blank" comment="Spacebar caption option - blank">Ha konuwo</string>
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
<string name="spacebar_caption_hint_keyboard" comment="Spacebar caption hint - keyboard">Marant keyboard zirin taghan spacebar</string>
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
<string name="spacebar_caption_hint_language" comment="Spacebar caption hint - language">Marant gwaɗa luwa taghan spacebar</string>
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
<string name="spacebar_caption_hint_language_keyboard" comment="Spacebar caption hint - language + keyboard">Gwaɗa luwa nda keyboard zirini taghan spacebar</string>
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
<string name="spacebar_caption_hint_blank" comment="Spacebar caption hint - blank">Eh marantaka t caption taghan spacebar</string>
<!-- Context: Keyman Settings menu -->
<string name="show_banner" comment="text suggestions banner">Ko ngawa an mara t banner</string>
<!-- Context: Keyman Settings menu -->
<string name="show_banner_on" comment="Description when toggle is on">Da moge molo</string>
<!-- Context: Keyman Settings menu -->
<string name="show_banner_off" comment="Description when toggle is off">Vita haɗuwo, kawai t marantal predictive text vita hahaɗe</string>
<!-- Context: Keyman Settings menu -->
<string name="show_send_crash_report" comment="permission for sending crash reports">Avathla t tsaghat gwaɗha tabga tala taghan network</string>
<!-- Context: Keyman Settings menu -->
<string name="show_send_crash_report_on" comment="Description when toggle is on">Vita tadeɗe, gwaɗha tabga tala an jivan jivo da tsighaptal jebe</string>
<!-- Context: Keyman Settings menu -->
<string name="show_send_crash_report_off" comment="Description when toggle is off">Vita haɗ tadewo, gwaɗan jivan jivo hal da tsighapta jebwo</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="install_from_keyman_dot_com" comment="Install package from Keyman server">An fa avla keyman.com</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="install_from_local_file" comment="Install package file from local device">An fa avla local file</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="install_from_other_device" comment="Scan QR Code">An fa da minaha sakwiɗi</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="add_languages_to_installed_keyboard" comment="Install additional languages from a keyboard package">A mbaka gwaɗa luwaha ka fant keyboard</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="add_language_subtext" comment="Additional information for adding another language">(avla keyboard package)</string>
<!-- Context: Select Package and Select Languages menu -->
<string name="title_select_keyboard_package_list" comment="Select a keyboard package to add languages">Abkla t Keyboard Package</string>
<!-- Context: Select Package and Select Languages menu -->
<string name="title_select_languages_for_package" comment="Select language names from the keyboard package">Abkla gwaɗaha luwa anga %1$s</string>
<!-- Context: Select Package and Select Languages menu -->
<string name="added_language_to_keyboard" comment="Notification that a language name is added to a keyboard">Gwaɗaha luwunda mbakalo %1$s to %2$s</string>
<!-- Context: Select Package and Select Languages menu -->
<string name="all_languages_installed" comment="Text when all languages from a keyboard package have been installed">Sma gwaɗaha luwunda falo</string>
<!-- Context: Adjust Keyboard Height menu -->
<string name="drag_the_keyboard" comment="First line of adjusting keyboard height">An tiɗat keyboard ka virata mbakat fiwuku</string>
<!-- Context: Adjust Keyboard Height menu -->
<string name="rotate_the_device" comment="Second line of adjusting keyboard height">Awava tina ngana ka gulat foto nda plavant bugo</string>
<!-- Context: Adjust Keyboard Height menu -->
<string name="reset_to_defaults" comment="Button to reset to default heights">Virata magat ina kol ɗughwana</string>
<!-- Context: Keyman Web Browser -->
<string name="hint_text" comment="Prompt to type in the browser search bar">Psa ko vinda URL</string>
<!-- Context: Keyman Web Browser -->
<string name="title_bookmarks" comment="Title for bookmarks">Bookmarks</string>
<!-- Context: Keyman Web Browser -->
<string name="no_bookmarks" comment="Text when bookmark list is empty">Haɗ Bookmarks wo</string>
<!-- Context: Keyman Web Browser -->
<string name="add_bookmark" comment="Confirmation to add bookmark">A mbakat Bookmark</string>
<!-- Context: Keyman Web Browser -->
<string name="hint_title" comment="Page title for saved bookmark">Title</string>
<!-- Context: Keyman Web Browser -->
<string name="hint_url" comment="Page URL for saved bookmark">Url</string>
<!-- Context: KMP Package strings -->
<string name="title_package_failed_to_install" comment="Error dialog title when package failed to install">Package %1$s kalavu kala ka fanta</string>
<!-- Context: KMP Package strings -->
<string name="downloading_keyboard_package" comment="Confirmation to download keyboard package filename">Angas t keyboard package\n%1$s&#8230;</string>
<!-- Context: KMP Package strings -->
<string name="failed_to_extract" comment="Notification that keyboard package failed to unzip">Kalavu kala k klapta</string>
<!-- Context: KMP Package strings -->
<string name="install_keyboard_package" comment="Title to install keyboard package">An fat Keyboard</string>
<!-- Context: KMP Package strings -->
<string name="install_predictive_text_package" comment="Title to install dictionary package">An fat Dictionary</string>
<!-- Context: KMP Package strings -->
<string name="not_valid_package_file" comment="Notification when invalid package file cannot be installed">%1$s is not a valid Keyman package file.\n%2$s\"</string>
<!-- Context: KMP Package strings -->
<string name="no_new_touch_keyboards_to_install" comment="Notification when no touch-optimized keyboards can be installed">Keyboard package has no touch-optimized keyboards to install</string>
<!-- Context: KMP Package strings -->
<string name="no_new_predictive_text_to_install" comment="Notification when no dictionaries can be installed">Ha wuliwa predictive text anga fantawo</string>
<!-- Context: KMP Package strings -->
<string name="no_targets_to_install" comment="Notification when a package doesn't contain keyboards or dictionaries">Ha keyboards ko predictive text anga fantawo</string>
<!-- Context: KMP Package strings -->
<string name="no_associated_languages" comment="Notification when a keyboard package doesn't contain languages">Keyboard package na haɗ nda gwaɗa luwunda garavata da fantal wo</string>
<!-- Context: KMP Package strings -->
<string name="invalid_metadata" comment="kmp.json metadata file is invalid or missing in package">Ɗughwanbuwo/zaɗata metadata an package</string>
</resources>

View file

@ -0,0 +1,154 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Context: Menu Action -->
<string name="action_share" comment="Menu action to send text content to another app">Ntiku</string>
<!-- Context: Menu Action -->
<string name="action_web" comment="Menu action to open Keyman browser">Web Browser</string>
<!-- Context: Menu Action -->
<string name="action_text_size" comment="Menu action to adjust text size">Nga nur Ruɓutsini</string>
<!-- Context: Menu Action -->
<string name="action_overflow" comment="Show additional menu items">Odi</string>
<!-- Context: Menu Action -->
<string name="action_clear_text" comment="Menu action to erase text">Kukulna ruɓutsini</string>
<!-- Context: Menu Action -->
<string name="action_info" comment="Menu action to display Keyman help page">Labar</string>
<!-- Context: Menu Action -->
<string name="action_settings" comment="Menu action to open Settings menu">Settings</string>
<!-- Context: Menu Action -->
<string name="action_install_updates" comment="Menu notification that keyboard or dictionary updates available">Install Updates</string>
<!-- Context: Title -->
<string name="title_version" comment="Title of Keyman for Android version">Version: %1$s</string>
<!-- Context: Text label when old Chrome version installed -->
<string name="text_require_chrome_57" comment="Banner text when old version of Chrome is installed">Keyman naja ayu version nur Chrome 57 akiya mai bilin.</string>
<!-- Context: Button label -->
<string name="button_update_chrome" comment="Prompt to upgrade Chrome in the Play Store">Fia Chrome bilin</string>
<!-- Context: Textfield prompt (&#8230; is the ellipsis character "...") -->
<string name="textview_hint" comment="Prompt to start typing">Baditsini ruɓutsini uvun&#8230;</string>
<!-- Context: Splash screen (version/copyright info currently disabled -->
<!-- Context: Splash screen (version/copyright info currently disabled -->
<!-- Context: Text Size dialog -->
<string name="text_size" comment="Current text size (number)">Nga nur ruɓutsini: %1$d</string>
<!-- Context: Text Size dialog -->
<string name="ic_text_size_up" comment="Make text bigger">Nga nur ruɓutsini adagiju</string>
<!-- Context: Text Size dialog -->
<string name="ic_text_size_down" comment="Make text smaller">Nga nur ruɓutsini adzia</string>
<!-- Context: Clear Text dialog -->
<string name="all_text_will_be_cleared" comment="Erase all the text">\nCa ruɓutsini ara kukulna\n</string>
<!-- Context: Get Started menu -->
<string name="get_started" comment="Menu for getting started">Kuga baditsini</string>
<!-- Context: Get Started menu -->
<string name="add_a_keyboard" comment="Menu item to add a keyboard">Mchaku ŋya nur keyboard</string>
<!-- Context: Get Started menu -->
<string name="enable_system_keyboard" comment="Menu item to enable Keyman as system keyboard">Enable Keyman as system-wide keyboard</string>
<!-- Context: Get Started menu -->
<string name="set_keyman_as_default" comment="Menu item to set Keyman as default system keyboard">Fia Keyman digu default nur keyboard ari</string>
<!-- Context: Get Started menu -->
<string name="more_info" comment="Open the Keyman for Android help page">Labar nagum odi</string>
<!-- Context: Get Started menu -->
<string name="show_get_started" comment="Show the &quot;Get Started&quot; menu on startup">Nchaba \"%1$s\" magu ga baditsini</string>
<!-- Context: Android Storage Permission -->
<string name="request_storage_permission" comment="Request storage permission to access keyboard packages">Kuga install package nur keyboard yer, ngeri lagu anu Keyman kija karatsini external storage.</string>
<!-- Context: Android Storage Permission -->
<string name="storage_permission_denied" comment="Keyboard package installation may fail since Android storage permission not granted">Naja nkani lagur ɗuwa su. Acittu install keyboard package mai</string>
<!-- Context: Keyman Settings menu -->
<string name="keyman_settings" comment="Settings menu title">Settings</string>
<!-- Context: Keyman Settings menu -->
<plurals name="installed_languages">
<item quantity="one">Installed ŋya yer (%1$d)</item>
<item quantity="other">Fia Ŋya yer (%1$d)</item>
</plurals>
<!-- Context: Keyman Settings menu -->
<string name="install_keyboard_or_dictionary" comment="Menu item to install keyboard or dictionary">Install Keyboard akiya mai Dictionary</string>
<!-- Context: Keyman Settings menu -->
<string name="change_display_language" comment="Menu action to change interface language">Ncha ŋya dun mji vur iu thlir duri</string>
<!-- Context: Keyman Settings menu -->
<string name="adjust_keyboard_height" comment="Menu action to adjust keyboard height">Fia dzigamkur nur keyboard kalkal</string>
<!-- Context: Keyman Settings menu -->
<string name="spacebar_caption" comment="Menu action to set the spacebar caption">Ruɓutsini ar Spaceba</string>
<!-- Context: Keyman Settings menu / Spacebar caption -->
<string name="spacebar_caption_keyboard" comment="Spacebar caption option - keyboard">Keyboard</string>
<!-- Context: Keyman Settings menu / Spacebar caption -->
<string name="spacebar_caption_language" comment="Spacebar caption option - language">Ŋya</string>
<!-- Context: Keyman Settings menu / Spacebar caption -->
<string name="spacebar_caption_language_keyboard" comment="Spacebar caption option - language + keyboard">Ŋya + Keyboard</string>
<!-- Context: Keyman Settings menu / Spacebar caption -->
<string name="spacebar_caption_blank" comment="Spacebar caption option - blank">Ruɓutsini aʻi mai</string>
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
<string name="spacebar_caption_hint_keyboard" comment="Spacebar caption hint - keyboard">Ŋcha thlimur keyboard arkra spaceba</string>
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
<string name="spacebar_caption_hint_language" comment="Spacebar caption hint - language">Ŋcha thlimur ŋya arkra spaceba</string>
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
<string name="spacebar_caption_hint_language_keyboard" comment="Spacebar caption hint - language + keyboard">Ŋya baɗa keyboard arkra spaceba</string>
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
<string name="spacebar_caption_hint_blank" comment="Spacebar caption hint - blank">Asuka ga ncha ruɓutsini arkra spaceba mai</string>
<!-- Context: Keyman Settings menu -->
<string name="show_banner" comment="text suggestions banner">Kuga ncha banner zarzar</string>
<!-- Context: Keyman Settings menu -->
<string name="show_banner_on" comment="Description when toggle is on">Nanda ara iu</string>
<!-- Context: Keyman Settings menu -->
<string name="show_banner_off" comment="Description when toggle is off">Ma naja vur iu thlir mai, naja vur ncha jili predictive text kuku vur iu thlir</string>
<!-- Context: Keyman Settings menu -->
<string name="show_send_crash_report" comment="permission for sending crash reports">Ngeri hyanba crash report u network</string>
<!-- Context: Keyman Settings menu -->
<string name="show_send_crash_report_on" comment="Description when toggle is on">Ma naja vur iu thlir, mji acittu hyanba crash report</string>
<!-- Context: Keyman Settings menu -->
<string name="show_send_crash_report_off" comment="Description when toggle is off">Ma naja vur iu thlir mai, mji acittu hyanba crash report mai</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="install_from_keyman_dot_com" comment="Install package from Keyman server">Install ara keyman.com</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="install_from_local_file" comment="Install package file from local device">Install ara local file</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="install_from_other_device" comment="Scan QR Code">Install ara su nagum yer</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="add_languages_to_installed_keyboard" comment="Install additional languages from a keyboard package">Mchaku ŋya yer ga installed keyboard</string>
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
<string name="add_language_subtext" comment="Additional information for adding another language">(ara keyboard package)</string>
<!-- Context: Select Package and Select Languages menu -->
<string name="title_select_keyboard_package_list" comment="Select a keyboard package to add languages">Caɗu Keyboard Package</string>
<!-- Context: Select Package and Select Languages menu -->
<string name="title_select_languages_for_package" comment="Select language names from the keyboard package">Caɗu jili ŋya yer anu %1$s</string>
<!-- Context: Select Package and Select Languages menu -->
<string name="added_language_to_keyboard" comment="Notification that a language name is added to a keyboard">Ŋya du mji a mchakuri %1$s alu %2$s</string>
<!-- Context: Select Package and Select Languages menu -->
<string name="all_languages_installed" comment="Text when all languages from a keyboard package have been installed">Ca ŋya yer kuku du mji akuya installed</string>
<!-- Context: Adjust Keyboard Height menu -->
<string name="drag_the_keyboard" comment="First line of adjusting keyboard height">Cina keyboard gadibar ngilaba dzigamkur ari</string>
<!-- Context: Adjust Keyboard Height menu -->
<string name="rotate_the_device" comment="Second line of adjusting keyboard height">Shina su ari ga ngilaba dzigamkur baɗa ŋga ari</string>
<!-- Context: Adjust Keyboard Height menu -->
<string name="reset_to_defaults" comment="Button to reset to default heights">Iri ga munagu alu lagu ginda nur dang</string>
<!-- Context: Keyman Web Browser -->
<string name="hint_text" comment="Prompt to type in the browser search bar">Nguba akiya mai ruɓutsini URL</string>
<!-- Context: Keyman Web Browser -->
<string name="title_bookmarks" comment="Title for bookmarks">Bookmarks</string>
<!-- Context: Keyman Web Browser -->
<string name="no_bookmarks" comment="Text when bookmark list is empty">Bookmarks aʻi mai</string>
<!-- Context: Keyman Web Browser -->
<string name="add_bookmark" comment="Confirmation to add bookmark">Mchaku Bookmark</string>
<!-- Context: Keyman Web Browser -->
<string name="hint_title" comment="Page title for saved bookmark">Kra ndir</string>
<!-- Context: Keyman Web Browser -->
<string name="hint_url" comment="Page URL for saved bookmark">Url</string>
<!-- Context: KMP Package strings -->
<string name="title_package_failed_to_install" comment="Error dialog title when package failed to install">Package %1$s a ngil ga install</string>
<!-- Context: KMP Package strings -->
<string name="downloading_keyboard_package" comment="Confirmation to download keyboard package filename">Kuga Download keyboard package \n%1$s&#8230;</string>
<!-- Context: KMP Package strings -->
<string name="failed_to_extract" comment="Notification that keyboard package failed to unzip">A ngil ga ziba</string>
<!-- Context: KMP Package strings -->
<string name="install_keyboard_package" comment="Title to install keyboard package">Install Keyboard</string>
<!-- Context: KMP Package strings -->
<string name="install_predictive_text_package" comment="Title to install dictionary package">Install Dictionary</string>
<!-- Context: KMP Package strings -->
<string name="not_valid_package_file" comment="Notification when invalid package file cannot be installed">%1$s naja aʻi Keyman package kuku kalkal mai. \n%2$s\"</string>
<!-- Context: KMP Package strings -->
<string name="no_new_touch_keyboards_to_install" comment="Notification when no touch-optimized keyboards can be installed">Keyboard package naja aga touch-optimized keyboards ga fu mai</string>
<!-- Context: KMP Package strings -->
<string name="no_new_predictive_text_to_install" comment="Notification when no dictionaries can be installed">Predictive text bilin aʻi mai ga install</string>
<!-- Context: KMP Package strings -->
<string name="no_targets_to_install" comment="Notification when a package doesn't contain keyboards or dictionaries">Keyboard akiya mai predictive text nanda aʻi mai ga install</string>
<!-- Context: KMP Package strings -->
<string name="no_associated_languages" comment="Notification when a keyboard package doesn't contain languages">Keyboard package naja aga ŋya nagum ga install mai</string>
<!-- Context: KMP Package strings -->
<string name="invalid_metadata" comment="kmp.json metadata file is invalid or missing in package">Kra kalkal/metadata package kuku ga sanakir akwa package ari</string>
</resources>

View file

@ -248,7 +248,8 @@
var keyPos = x.toString() + ',' + y.toString();
for(i=0; i<obj.length; i++)
{
s=s+obj[i].layer+'-'+obj[i].coreID;
// elementID contains the layer and coreID
s=s+obj[i].elementID;
if(obj[i].sp == 1 || obj[i].sp == 2) shift = true;
if(typeof(obj[i].text) != 'undefined' && obj[i].text != null && obj[i].text != '') s=s+':'+toHex(obj[i].text);
if(i < (obj.length -1)) s=s+';'

View file

@ -51,10 +51,13 @@ public class DisplayLanguages {
new DisplayLanguageType("de-DE", "German"),
new DisplayLanguageType("kr-NG", "Kanuri"),
new DisplayLanguageType("km-KH", "Khmer"),
new DisplayLanguageType("ckl-NG", "Kibaku"),
new DisplayLanguageType("mfi-NG", "Mandara (Wandala)"),
new DisplayLanguageType("mrt-NG", "Marghi"),
new DisplayLanguageType("ann", "Obolo"),
new DisplayLanguageType("ff-ZA", "Pulaar-Fulfulde"), // or Fulah
new DisplayLanguageType("shu-latn", "Shuwa (Latin)"),
new DisplayLanguageType("hia-NG", "Waha"),
new DisplayLanguageType("zh-CN", "中文(简体) (Simplified Chinese)")
};
return languages;

View file

@ -0,0 +1,158 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Device type -->
<!-- Application name (Keyman Engine for Android) -->
<!-- Context: Title for list -->
<plurals name="title_keyboards">
<item quantity="one">Kibod</item>
<item quantity="other">Kibodyere</item>
</plurals>
<!-- Context: Title for list -->
<plurals name="title_other_input_methods">
<item quantity="one">Other Input Method</item>
<item quantity="other">Other Input Methods</item>
</plurals>
<!-- Context: Title for list -->
<string name="title_add_keyboard" comment="Add a new keyboard">Dzakǝr Kibod Ɓǝlin</string>
<!-- Context: Title for list -->
<string name="title_languages_settings" comment="List of installed languages">Nyayere Namtǝ Ndǝ Vu</string>
<!-- Context: Title for list -->
<string name="title_language_settings" comment="Keyman Settings for a language">%1$s Settingyere</string>
<!-- Context: Button label -->
<string name="label_add" comment="Button to add an item">Pukǝr</string>
<!-- Context: Button label -->
<string name="label_back" comment="Button to go back">Mwari tubwa hi</string>
<!-- Context: Button label -->
<string name="label_cancel" comment="Button to cancel an action">Kansǝl</string>
<!-- Context: Button label -->
<string name="label_close" comment="Close a dialog">Harti</string>
<!-- Context: Button label. Removed in Keyman 15 -->
<string name="label_close_keyman" comment="Close the Keyman application">Harti Keyman</string>
<!-- Context: Button label -->
<string name="label_forward" comment="Button to go forward">Alǝkǝma</string>
<!-- Context: Button label -->
<string name="label_next_input_method" comment="Switch to next input method (replaces label_close_keyman)">Whalǝr ʻYati su Alǝkǝma</string>
<!-- Context: Button label -->
<string name="label_download" comment="Button to confirm downloading an item">Sǝgǝl akǝr</string>
<!-- Context: Button label -->
<string name="label_install" comment="Confirmation to install a package">Vu ko hau</string>
<!-- Context: Button label -->
<string name="label_later" comment="Do an action at a later time">Aɦǝla saka nkiɗu</string>
<!-- Context: Button label -->
<string name="label_next" comment="Go to the next screen">Akǝma</string>
<!-- Context: Button label -->
<string name="label_ok" comment="Button to acknowledge a dialog">Kal kal</string>
<!-- Context: Button label -->
<string name="label_update" comment="Dialog button to update a resource">Update</string>
<!-- Context: Keyboard Updates -->
<string name="cannot_connect" comment="Error message when network connection fails">Adi ata mǝzi ɓui ka lukwa Keyman server wɛ!</string>
<!-- Context: Keyboard Updates -->
<string name="confirm_delete_keyboard" comment="Confirmation to delete a keyboard">Gada bara ɗlǝba ka ɗalba kibod ǝni ya?</string>
<!-- Context: Keyboard Updates -->
<string name="confirm_download_keyboard" comment="Confirmation to download a keyboard update">Gada bara download vershon nam ɓǝlin nǝr kibod ǝni ya?</string>
<!-- Context: Keyboard Updates -->
<string name="confirm_update" comment="Confirmation to update several resources">Gada bara ka update kibodyere ba and dictionariyere kulini ya?</string>
<!-- Context: Keyboard Updates -->
<string name="keyboard_updates_channel">Updateyere nǝr sǝr kǝthlǝr</string>
<!-- Context: Keyboard Updates -->
<string name="keyboard_updates_available" comment="Notification when resource updates are available">Updateyere Nǝr Sǝr Kǝthlǝr Nam Adai</string>
<!-- Context: Keyboard Updates -->
<string name="update_available" comment="Currently installed version of a resource with an available update">%1$s (Updateyer Nam Adai)</string>
<!-- Context: Keyboard Updates -->
<string name="keyboard_update_message" comment="language name: keyboard name"> Updateyere nam adai nǝr kibod %1$s: %2$s </string>
<!-- Context: Keyboard Updates -->
<string name="dictionary_update_message">Updateyere nam adai nǝr dictionary %1$s: %2$s </string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="keyboard_version" comment="Label for keyboard version">Vershon nǝr kibod</string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="help_link" comment="Label for help link">Link nǝr dlarɛ</string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="uninstall_keyboard" comment="Label for uninstalling keyboard">Faba ka ɗalba kibod</string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="keyboard_picker_new_keyboard" comment="Mark a language name that's newly installed in keyboard list">[new] %1$s</string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="keyboard_qr_code" comment="QR Code description"> Skanba code ǝni akuya ka gǝ vu ǝni akwa\nkeyboard divais damwa</string>
<!-- Context: Keyboard Help welcome.htm title -->
<string name="welcome_package" comment="Title to welcome.htm page (name and version)">Usɛ aka si akwa %1$s</string>
<!-- Context: Keyboard app doesn't include FileProvider library needed to view help file -->
<string name="fileprovider_undefined" comment="FileProvider library needed to view help file"> Gada bara library nǝr FileProvider akuyaka gǝ wul su akwa fail nǝr dlarɛ: %1$s</string>
<!-- Context: Fatal keyboard error. Will load default keyboard -->
<string name="fatal_keyboard_error" comment="Fatal keyboard error (keyboard ID::packageID for language). Will load default keyboard"> Fatal keyboard error with %1$s:%2$s for %3$s language. Loading default keyboard.</string>
<!-- Context: Fatal keyboard error. -->
<string name="fatal_keyboard_error_short" comment="Error in keyboard (keyboard ID::packageID for language)."> Su kura kal kalakwa kibod %1$s:%2$s nǝr %3$s nya.</string>
<!-- Context: Query for associated dictionary -->
<string name="query_associated_model" comment="Check if there's an available dictionary to download">Ata kǝra chakǝnta akuyaka ɓui suyere tara tsukwar bwar dictionary kadǝbar ka ndǝ download ko sǝgǝl akǝr</string>
<!-- Context: Model Updates -->
<string name="confirm_download_model" comment="Confirmation to download a dictionary update">Gada bara download vershon nam ɓǝlin nǝr kibod ǝni ya?</string>
<!-- Context: No associated dictionary found -->
<string name="no_associated_model" comment="Confirmation there's no available dictionary to download">Dictionary adiwɛ akuya ka ndǝ download</string>
<!-- Context: Model Updates -->
<string name="catalog_unavailable" comment="Notification that the cloud resource catalog can't be updated">Katalog nǝr dlarɛ adiwɛ</string>
<!-- Context: Background download messages-->
<string name="catalog_download_start_in_background" comment="Notification that the resource catalog update will begin">Update nǝr Katalog badicini akwa background</string>
<!-- Context: Background download messages-->
<string name="catalog_download_is_running_in_background" comment="Notification that the resource catalog update is still downloading"> Katalogari tsu ata kǝra downloading; usɛ ɓǝla dzakti nkǝrti aɦǝla saka nkiɗu laka kadwam!</string>
<!-- Context: Background download messages-->
<string name="progress_message_checking_resource_is_running" comment="Progress notification that the check for a resource is still running ">Ata kǝra chakǝnta ka bara sǝr ampaniyere wato resource</string>
<!-- Context: Background download messages-->
<string name="keyboard_download_start_in_background" comment="Notification that a keyboard download has started">Downloading keyboard badicini akwa Background</string>
<!-- Context: Background download messages-->
<string name="keyboard_download_is_running_in_background" comment="Notification that a keyboard download is still running">Kibodnamtǝ gǝ tsarba ata kǝra downloading; usɛ dzakti nkǝrti kadawm aɦǝla saka nkiɗu laka!</string>
<!-- Context: Background download messages-->
<string name="keyboard_download_finished" comment="Notification that a keyboard download has finished">Keyboard download kǝ kuri!</string>
<!-- Context: Background download messages-->
<string name="dictionary_download_start_in_background" comment="Notification that a dictionary download has started">Downloading dictionary kǝ Badicini Aɦǝli</string>
<!-- Context: Background download messages-->
<string name="dictionary_download_is_running_in_background" comment="Notification that a dictionary download is still running">Kibod namtǝ gǝ tsarba ata kǝra downloading; usɛ dzakti nkǝrti kadawm aɦǝla saka nkiɗu laka!</string>
<!-- Context: Background download messages-->
<string name="dictionary_download_finished" comment="Notification that a dictionary download has finished">Keyboard download kǝ kuri.</string>
<!-- Context: Background download messages -->
<string name="download_failed" comment="Notification that a download failed">Download ta mǝzi ʻya wɛ</string>
<!-- Context: Background download messages -->
<string name="failed_to_retrieve_file" comment="Failed to retrieve downloaded file">Ta ɓui ka download fail wɛ</string>
<!-- Context: General Updates -->
<string name="update_check_unavailable" comment="Error message when a Keyman server can't be reached">Ta ɓui ka lukwa server wɛ!</string>
<!-- Context: General Updates -->
<string name="update_check_current" comment="Notification that all resources are up to date">"Shanga suyere nam adai ani up to date!"</string>
<!-- Context: General Updates -->
<string name="update_failed" comment="Notification that a resource update failed">Duku akwa ko hang ta ǝniyere ngǝlata ʻya update!</string>
<!-- Context: General Updates -->
<string name="update_success" comment="Notification that a resource update successfully updated">Sǝr kǝthlǝryere nam adai kǝ ʻya update kal kal!</string>
<!-- Context: Model Info -->
<string name="model_version" comment="Title for a dictionary version">Version nǝr Dictionary</string>
<!-- Context: Model Info -->
<string name="uninstall_model" comment="Label to uninstall a dictionary">Kǝlba ka ɗalba dictionary</string>
<!-- Context: Model Info -->
<string name="confirm_delete_model" comment="Confirmation to delete a dictionary">Gada bara kǝlba ka ɗalba dictionary ǝni ya?</string>
<!-- Context: Language Settings Keyboard install strings -->
<string name="keyboard_install_toast" comment="Notification when a keyboard is installed">%1$s ndǝ kurta vu kibod</string>
<!-- Context: Language Settings menu strings -->
<string name="enable_corrections" comment="Enable corrections from the suggestion banner">Mǝrti ka dza mǝzi ʻyati ka dzǝ dzukti suwar su wato correctionyere</string>
<!-- Context: Language Settings menu strings -->
<string name="enable_predictions" comment="Enable predictions from the suggestion banner">Enable predictions</string>
<!-- Context: Language Settings menu strings -->
<string name="model_label">Dictionary</string>
<!-- Context: Language Settings menu substring - Check for available dictionary -->
<string name="check_available_model" comment="Check for available dictionary">Baraba ka zǝndi dictionary nam adai</string>
<!-- Context: Language Settings menu strings -->
<string name="model_info_header" comment="Dictionary name">Dictionary: %1$s</string>
<!-- Context: Language Settings menu strings -->
<string name="model_picker_header" comment="Dictionaries for a specified language">%1$s dictionariyere</string>
<!-- Context: Language Settings menu strings -->
<!-- Context: Language Settings menu strings -->
<string name="model_install_toast" comment="Notification when a dictionary is installed">Dictionary namtǝ ndǝ vu ko hau</string>
<!-- Context: Language Settings menu strings -->
<plurals name="keyboard_count">
<item quantity="one">(%1$d kibod)</item>
<item quantity="other">(%1$d kibodyere)</item>
</plurals>
<!-- Context: "Change Display Language" menu -->
<string name="default_locale" comment="Use the device's current locale">Default Locale</string>
<!-- Context: Content descriptions -->
<!-- Context: Content descriptions -->
<!-- Context: Popup menu labels -->
<string name="label_delete" comment="Confirmation to delete an item">Kǝlba ka ɗalba</string>
<!-- Context: Shared preferences name -->
<!-- Context: Other strings -->
<string name="help_bubble_text">Tsukwar vi ǝni akuya ka gǝ pali kibod</string>
</resources>

View file

@ -0,0 +1,161 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Device type -->
<!-- Application name (Keyman Engine for Android) -->
<!-- Context: Title for list -->
<plurals name="title_keyboards">
<item quantity="zero">Keyboardina ta faftal jiv tadiye k vinda an kompitaina ta faftal jiv tadiye k vinda an kompita</item>
<item quantity="one">Keyboardina ta faftal jiv tadiye k vinda an kompitaina ta faftal jiv tadiye k vinda an kompita</item>
<item quantity="other">Keyboardina ta faftal jiv tadiye k vinda an kompitaina ta faftal jiv tadiye k vinda an kompita</item>
</plurals>
<!-- Context: Title for list -->
<plurals name="title_other_input_methods">
<item quantity="zero">Other Input Methods</item>
<item quantity="one">Other Input Method</item>
<item quantity="other">Other Input Methods</item>
</plurals>
<!-- Context: Title for list -->
<string name="title_add_keyboard" comment="Add a new keyboard">A mbakat wuliwa Keyboard</string>
<!-- Context: Title for list -->
<string name="title_languages_settings" comment="List of installed languages">Gwaɗaha luwahunda fanlo</string>
<!-- Context: Title for list -->
<string name="title_language_settings" comment="Keyman Settings for a language">%1$s Settings</string>
<!-- Context: Button label -->
<string name="label_add" comment="Button to add an item">Mbakata</string>
<!-- Context: Button label -->
<string name="label_back" comment="Button to go back">Uhili</string>
<!-- Context: Button label -->
<string name="label_cancel" comment="Button to cancel an action">Jata</string>
<!-- Context: Button label -->
<string name="label_close" comment="Close a dialog">Funta</string>
<!-- Context: Button label. Removed in Keyman 15 -->
<string name="label_close_keyman" comment="Close the Keyman application">Funt Keyman</string>
<!-- Context: Button label -->
<string name="label_forward" comment="Button to go forward">Mbakata jeb t kima</string>
<!-- Context: Button label -->
<string name="label_next_input_method" comment="Switch to next input method (replaces label_close_keyman)">Next Input Method</string>
<!-- Context: Button label -->
<string name="label_download" comment="Button to confirm downloading an item">Sangata</string>
<!-- Context: Button label -->
<string name="label_install" comment="Confirmation to install a package">Fanta</string>
<!-- Context: Button label -->
<string name="label_later" comment="Do an action at a later time">Peɗe</string>
<!-- Context: Button label -->
<string name="label_next" comment="Go to the next screen">Unda siɗi</string>
<!-- Context: Button label -->
<string name="label_ok" comment="Button to acknowledge a dialog">Muvaya</string>
<!-- Context: Button label -->
<string name="label_update" comment="Dialog button to update a resource">Haf tinunda sa magalo</string>
<!-- Context: Keyboard Updates -->
<string name="cannot_connect" comment="Error message when network connection fails">Ha da gwaghva nda Keyman server wo!</string>
<!-- Context: Keyboard Updates -->
<string name="confirm_delete_keyboard" comment="Confirmation to delete a keyboard">Ɗow ka k masunt tana keyboard na re?</string>
<!-- Context: Keyboard Updates -->
<string name="confirm_download_keyboard" comment="Confirmation to download a keyboard update">Ɗow ka k sangat tina wuliwa tana keyboard na re?</string>
<!-- Context: Keyboard Updates -->
<string name="confirm_update" comment="Confirmation to update several resources">Ɗow ka k haf tinunda sa magalo sakoro t keyboards na nda dictionaries na kana re?</string>
<!-- Context: Keyboard Updates -->
<string name="keyboard_updates_channel">Resource Updates</string>
<!-- Context: Keyboard Updates -->
<string name="keyboard_updates_available" comment="Notification when resource updates are available">Resource Updates hahaɗe</string>
<!-- Context: Keyboard Updates -->
<string name="update_available" comment="Currently installed version of a resource with an available update">%1$s (Update hahaɗe)</string>
<!-- Context: Keyboard Updates -->
<string name="keyboard_update_message" comment="language name: keyboard name"> Updates hahaɗe anga keyboard %1$s: %2$s </string>
<!-- Context: Keyboard Updates -->
<string name="dictionary_update_message">Updates hahaɗe anga dictionary %1$s: %2$s </string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="keyboard_version" comment="Label for keyboard version">Keyboard version</string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="help_link" comment="Label for help link">Help link</string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="uninstall_keyboard" comment="Label for uninstalling keyboard">Fan bol t keyboard wo</string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="keyboard_picker_new_keyboard" comment="Mark a language name that's newly installed in keyboard list">[new] %1$s</string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="keyboard_qr_code" comment="QR Code description"> Afkla fota nana code na anga klaf tana \nkeyboard tundaha sakwiɗi</string>
<!-- Context: Keyboard Help welcome.htm title -->
<string name="welcome_package" comment="Title to welcome.htm page (name and version)">Uss nda sukagha da vila %1$s</string>
<!-- Context: Keyboard app doesn't include FileProvider library needed to view help file -->
<string name="fileprovider_undefined" comment="FileProvider library needed to view help file"> FileProvider library needed to view help file: %1$s</string>
<!-- Context: Fatal keyboard error. Will load default keyboard -->
<string name="fatal_keyboard_error" comment="Fatal keyboard error (keyboard ID::packageID for language). Will load default keyboard"> Fatal keyboard nda kuskure %1$s:%2$s anga %3$s gwaɗaha luwa. Kalt girgira keyboard.</string>
<!-- Context: Fatal keyboard error. -->
<string name="fatal_keyboard_error_short" comment="Error in keyboard (keyboard ID::packageID for language)."> Kuskure an keyboard %1$s:%2$s for %3$s gwaɗa luwa.</string>
<!-- Context: Query for associated dictionary -->
<string name="query_associated_model" comment="Check if there's an available dictionary to download">Naghata anga gwaft dictionary da sangata</string>
<!-- Context: Model Updates -->
<string name="confirm_download_model" comment="Confirmation to download a dictionary update">Ɗow ka k sangat wuliwa nana dictionary na re?</string>
<!-- Context: No associated dictionary found -->
<string name="no_associated_model" comment="Confirmation there's no available dictionary to download">Ha dictionary k sangatawo</string>
<!-- Context: Model Updates -->
<string name="catalog_unavailable" comment="Notification that the cloud resource catalog can't be updated">The resource catalog is unavailable</string>
<!-- Context: Background download messages-->
<string name="catalog_download_start_in_background" comment="Notification that the resource catalog update will begin">Catalog update started in background</string>
<!-- Context: Background download messages-->
<string name="catalog_download_is_running_in_background" comment="Notification that the resource catalog update is still downloading"> Ana catalog nana hma t sangata; Gamsa an tika pighata hiɗeka!</string>
<!-- Context: Background download messages-->
<string name="progress_message_checking_resource_is_running" comment="Progress notification that the check for a resource is still running ">Nagha tinaha</string>
<!-- Context: Background download messages-->
<string name="keyboard_download_start_in_background" comment="Notification that a keyboard download has started">Sangat keyboard fuɗata an Background</string>
<!-- Context: Background download messages-->
<string name="keyboard_download_is_running_in_background" comment="Notification that a keyboard download is still running">Key board unda klafal na fuɗa fuɗa sangata; Gamsa an tika pighata hiɗeka!</string>
<!-- Context: Background download messages-->
<string name="keyboard_download_finished" comment="Notification that a keyboard download has finished">Keyboard kakiɗa sangata!</string>
<!-- Context: Background download messages-->
<string name="dictionary_download_start_in_background" comment="Notification that a dictionary download has started">Sangat dictionary fuɗa fuɗa an Background</string>
<!-- Context: Background download messages-->
<string name="dictionary_download_is_running_in_background" comment="Notification that a dictionary download is still running">Dictionary unda klafal na fuɗa fuɗa sangata; gamsa an tika pighata hiɗeka!</string>
<!-- Context: Background download messages-->
<string name="dictionary_download_finished" comment="Notification that a dictionary download has finished">Dictionary kakiɗa sangata.</string>
<!-- Context: Background download messages -->
<string name="download_failed" comment="Notification that a download failed">Sanga buwo</string>
<!-- Context: Background download messages -->
<string name="failed_to_retrieve_file" comment="Failed to retrieve downloaded file">Kalavukala k thlighaft file unda sangalo</string>
<!-- Context: General Updates -->
<string name="update_check_unavailable" comment="Error message when a Keyman server can't be reached">Javabt wativa kusat server wo!</string>
<!-- Context: General Updates -->
<string name="update_check_current" comment="Notification that all resources are up to date">"Sma inaha nganana ɗughwana!"</string>
<!-- Context: General Updates -->
<string name="update_failed" comment="Notification that a resource update failed">Tala ko kada inaha kol ɗughwana!</string>
<!-- Context: General Updates -->
<string name="update_success" comment="Notification that a resource update successfully updated">Inaha ngana maga magal saʻa ɗughwanukini!</string>
<!-- Context: Model Info -->
<string name="model_version" comment="Title for a dictionary version">Dictionary version</string>
<!-- Context: Model Info -->
<string name="uninstall_model" comment="Label to uninstall a dictionary">Fan bol t dictionary wo</string>
<!-- Context: Model Info -->
<string name="confirm_delete_model" comment="Confirmation to delete a dictionary">Ɗow ka k masun tana dictionary na re?</string>
<!-- Context: Language Settings Keyboard install strings -->
<string name="keyboard_install_toast" comment="Notification when a keyboard is installed">%1$s keyboard fan falo</string>
<!-- Context: Language Settings menu strings -->
<string name="enable_corrections" comment="Enable corrections from the suggestion banner">Magaghva virata magata</string>
<!-- Context: Language Settings menu strings -->
<string name="enable_predictions" comment="Enable predictions from the suggestion banner">Enable predictions</string>
<!-- Context: Language Settings menu strings -->
<string name="model_label">Dictionary</string>
<!-- Context: Language Settings menu substring - Check for available dictionary -->
<string name="check_available_model" comment="Check for available dictionary">A nighat dictionary unda hahaɗe</string>
<!-- Context: Language Settings menu strings -->
<string name="model_info_header" comment="Dictionary name">Dictionary: %1$s</string>
<!-- Context: Language Settings menu strings -->
<string name="model_picker_header" comment="Dictionaries for a specified language">%1$s dictionaries</string>
<!-- Context: Language Settings menu strings -->
<!-- Context: Language Settings menu strings -->
<string name="model_install_toast" comment="Notification when a dictionary is installed">Dictionary fan falo</string>
<!-- Context: Language Settings menu strings -->
<plurals name="keyboard_count">
<item quantity="zero">(%1$d keyboards)</item>
<item quantity="one">(%1$d keyboard)</item>
<item quantity="other">(%1$d keyboards)</item>
</plurals>
<!-- Context: "Change Display Language" menu -->
<string name="default_locale" comment="Use the device's current locale">Default Locale</string>
<!-- Context: Content descriptions -->
<!-- Context: Content descriptions -->
<!-- Context: Popup menu labels -->
<string name="label_delete" comment="Confirmation to delete an item">Masata</string>
<!-- Context: Shared preferences name -->
<!-- Context: Other strings -->
<string name="help_bubble_text">Aff fa jiv ahdina ka mbiɗat keyboard</string>
</resources>

View file

@ -0,0 +1,158 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Device type -->
<!-- Application name (Keyman Engine for Android) -->
<!-- Context: Title for list -->
<plurals name="title_keyboards">
<item quantity="one">Keyboard</item>
<item quantity="other">Keyboard</item>
</plurals>
<!-- Context: Title for list -->
<plurals name="title_other_input_methods">
<item quantity="one">Other Input Method</item>
<item quantity="other">Other Input Methods</item>
</plurals>
<!-- Context: Title for list -->
<string name="title_add_keyboard" comment="Add a new keyboard">Mchaku Keyboard bilin</string>
<!-- Context: Title for list -->
<string name="title_languages_settings" comment="List of installed languages">Fia Ŋya ari yer</string>
<!-- Context: Title for list -->
<string name="title_language_settings" comment="Keyman Settings for a language">%1$s Settings</string>
<!-- Context: Button label -->
<string name="label_add" comment="Button to add an item">Mchaku</string>
<!-- Context: Button label -->
<string name="label_back" comment="Button to go back">Yikuɗu</string>
<!-- Context: Button label -->
<string name="label_cancel" comment="Button to cancel an action">Kukulna</string>
<!-- Context: Button label -->
<string name="label_close" comment="Close a dialog">Ghaɗu</string>
<!-- Context: Button label. Removed in Keyman 15 -->
<string name="label_close_keyman" comment="Close the Keyman application">Ghaɗu Keyman</string>
<!-- Context: Button label -->
<string name="label_forward" comment="Button to go forward">Ladaŋwa</string>
<!-- Context: Button label -->
<string name="label_next_input_method" comment="Switch to next input method (replaces label_close_keyman)">Lagu fia ruɓutsini adaŋwa</string>
<!-- Context: Button label -->
<string name="label_download" comment="Button to confirm downloading an item">Download</string>
<!-- Context: Button label -->
<string name="label_install" comment="Confirmation to install a package">Install</string>
<!-- Context: Button label -->
<string name="label_later" comment="Do an action at a later time">Asikari</string>
<!-- Context: Button label -->
<string name="label_next" comment="Go to the next screen">Nagum</string>
<!-- Context: Button label -->
<string name="label_ok" comment="Button to acknowledge a dialog">OK</string>
<!-- Context: Button label -->
<string name="label_update" comment="Dialog button to update a resource">Update</string>
<!-- Context: Keyboard Updates -->
<string name="cannot_connect" comment="Error message when network connection fails">Accitu connect anu Keyman server mai!</string>
<!-- Context: Keyboard Updates -->
<string name="confirm_delete_keyboard" comment="Confirmation to delete a keyboard">Nagu ayu ga kukulna keyboard ari ya?</string>
<!-- Context: Keyboard Updates -->
<string name="confirm_download_keyboard" comment="Confirmation to download a keyboard update">Nagu ayu ga download version bilin nur keyboard ya?</string>
<!-- Context: Keyboard Updates -->
<string name="confirm_update" comment="Confirmation to update several resources">Nagu ayu ga update anu keyboard baɗa dictionaries yer abang?</string>
<!-- Context: Keyboard Updates -->
<string name="keyboard_updates_channel">Updates nur resource</string>
<!-- Context: Keyboard Updates -->
<string name="keyboard_updates_available" comment="Notification when resource updates are available">Updates nur Resource aʻi</string>
<!-- Context: Keyboard Updates -->
<string name="update_available" comment="Currently installed version of a resource with an available update">%1$s (Update aʻi)</string>
<!-- Context: Keyboard Updates -->
<string name="keyboard_update_message" comment="language name: keyboard name">Updates aʻi anu keyboard %1$s: %2$s </string>
<!-- Context: Keyboard Updates -->
<string name="dictionary_update_message">Updates aʻi anu dictionary %1$s: %2$s </string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="keyboard_version" comment="Label for keyboard version">Version nur keyman</string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="help_link" comment="Label for help link">Help link</string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="uninstall_keyboard" comment="Label for uninstalling keyboard">Uninstall keyboard</string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="keyboard_picker_new_keyboard" comment="Mark a language name that's newly installed in keyboard list">[bilin] %1$s</string>
<!-- Context: Keyboard Info and Keyboard Settings -->
<string name="keyboard_qr_code" comment="QR Code description"> Scan this code to load this\nkeyboard on another device</string>
<!-- Context: Keyboard Help welcome.htm title -->
<string name="welcome_package" comment="Title to welcome.htm page (name and version)">Usi ga shili %1$s</string>
<!-- Context: Keyboard app doesn't include FileProvider library needed to view help file -->
<string name="fileprovider_undefined" comment="FileProvider library needed to view help file">FileProvider library needed to view help file: %1$s</string>
<!-- Context: Fatal keyboard error. Will load default keyboard -->
<string name="fatal_keyboard_error" comment="Fatal keyboard error (keyboard ID::packageID for language). Will load default keyboard"> Fatal keyboard error with %1$s:%2$s for %3$s language. Loading default keyboard.</string>
<!-- Context: Fatal keyboard error. -->
<string name="fatal_keyboard_error_short" comment="Error in keyboard (keyboard ID::packageID for language).">Ŋya nur keyboard %1$s:%2$s anu %3$s kra kalkal.</string>
<!-- Context: Query for associated dictionary -->
<string name="query_associated_model" comment="Check if there's an available dictionary to download">Luba dictionary kuku nagu acittu downloadi</string>
<!-- Context: Model Updates -->
<string name="confirm_download_model" comment="Confirmation to download a dictionary update">Nagu ayu ga download version bilin nur dictionary ya?</string>
<!-- Context: No associated dictionary found -->
<string name="no_associated_model" comment="Confirmation there's no available dictionary to download">Dictionary aʻi mai ga download</string>
<!-- Context: Model Updates -->
<string name="catalog_unavailable" comment="Notification that the cloud resource catalog can't be updated">Catalog nur kari yer aʻi mai</string>
<!-- Context: Background download messages-->
<string name="catalog_download_start_in_background" comment="Notification that the resource catalog update will begin">Catalog update started in background</string>
<!-- Context: Background download messages-->
<string name="catalog_download_is_running_in_background" comment="Notification that the resource catalog update is still downloading">Catalog tsu naja vur downloading; manki kuga bura ngilaba!</string>
<!-- Context: Background download messages-->
<string name="progress_message_checking_resource_is_running" comment="Progress notification that the check for a resource is still running ">Luba kari yer</string>
<!-- Context: Background download messages-->
<string name="keyboard_download_start_in_background" comment="Notification that a keyboard download has started">Downloading keyboard a baditsini akwa Background</string>
<!-- Context: Background download messages-->
<string name="keyboard_download_is_running_in_background" comment="Notification that a keyboard download is still running">Keyboard dun mji a caɗu naja vur dowloadi manki bura ngilaba u latu kushu!</string>
<!-- Context: Background download messages-->
<string name="keyboard_download_finished" comment="Notification that a keyboard download has finished">Keyboard download akuɗuri!</string>
<!-- Context: Background download messages-->
<string name="dictionary_download_start_in_background" comment="Notification that a dictionary download has started">Downloading dictionary a baditsini akwa Background</string>
<!-- Context: Background download messages-->
<string name="dictionary_download_is_running_in_background" comment="Notification that a dictionary download is still running">Dictionary kuku dun mji a caɗu naja vur downloadi: manki ngilaba u latu kushu!</string>
<!-- Context: Background download messages-->
<string name="dictionary_download_finished" comment="Notification that a dictionary download has finished">Download nur dictionary akuɗuri.</string>
<!-- Context: Background download messages -->
<string name="download_failed" comment="Notification that a download failed">Download a ngiliri</string>
<!-- Context: Background download messages -->
<string name="failed_to_retrieve_file" comment="Failed to retrieve downloaded file">Acittu ziba aga file dun mji a iu download</string>
<!-- Context: General Updates -->
<string name="update_check_unavailable" comment="Error message when a Keyman server can't be reached">Acittu gwa kwa server mai!</string>
<!-- Context: General Updates -->
<string name="update_check_current" comment="Notification that all resources are up to date">"Ca thlir ari nanda bilin!"</string>
<!-- Context: General Updates -->
<string name="update_failed" comment="Notification that a resource update failed">Resources pathlu akiya mai mithlu a ngil ga iu update!</string>
<!-- Context: General Updates -->
<string name="update_success" comment="Notification that a resource update successfully updated">Resources successfully updated!</string>
<!-- Context: Model Info -->
<string name="model_version" comment="Title for a dictionary version">Dictionary version</string>
<!-- Context: Model Info -->
<string name="uninstall_model" comment="Label to uninstall a dictionary">Uninstall dictionary</string>
<!-- Context: Model Info -->
<string name="confirm_delete_model" comment="Confirmation to delete a dictionary">Nagu ayu ga kukulna dictionary ya?</string>
<!-- Context: Language Settings Keyboard install strings -->
<string name="keyboard_install_toast" comment="Notification when a keyboard is installed">%1$s keyboard installed</string>
<!-- Context: Language Settings menu strings -->
<string name="enable_corrections" comment="Enable corrections from the suggestion banner">Enable corrections</string>
<!-- Context: Language Settings menu strings -->
<string name="enable_predictions" comment="Enable predictions from the suggestion banner">Enable predictions</string>
<!-- Context: Language Settings menu strings -->
<string name="model_label">Dictionary</string>
<!-- Context: Language Settings menu substring - Check for available dictionary -->
<string name="check_available_model" comment="Check for available dictionary">Kutu ma dictionary aʻi</string>
<!-- Context: Language Settings menu strings -->
<string name="model_info_header" comment="Dictionary name">Dictionary: %1$s</string>
<!-- Context: Language Settings menu strings -->
<string name="model_picker_header" comment="Dictionaries for a specified language">%1$s dictionaries</string>
<!-- Context: Language Settings menu strings -->
<!-- Context: Language Settings menu strings -->
<string name="model_install_toast" comment="Notification when a dictionary is installed">Dictionary installed</string>
<!-- Context: Language Settings menu strings -->
<plurals name="keyboard_count">
<item quantity="one">(%1$d keyboard)</item>
<item quantity="other">(%1$d keyboards)</item>
</plurals>
<!-- Context: "Change Display Language" menu -->
<string name="default_locale" comment="Use the device's current locale">Default Locale</string>
<!-- Context: Content descriptions -->
<!-- Context: Content descriptions -->
<!-- Context: Popup menu labels -->
<string name="label_delete" comment="Confirmation to delete an item">Kukulna</string>
<!-- Context: Shared preferences name -->
<!-- Context: Other strings -->
<string name="help_bubble_text">Ncina ga pubila keyboard</string>
</resources>

View file

@ -70,7 +70,7 @@ km_kbp_context *km_kbp_state_context(km_kbp_state *state)
}
km_kbp_status kbp_state_get_intermediate_context(
km_kbp_state *state,
km_kbp_state *state,
km_kbp_context_item ** context_items
) {
assert(state);
@ -116,7 +116,7 @@ km_kbp_status km_kbp_state_queue_action_items(
return KM_KBP_STATUS_INVALID_ARGUMENT;
}
if (!processor.queue_action(action_items)) {
if (!processor.queue_action(state, action_items)) {
return KM_KBP_STATUS_KEY_ERROR;
}
}

View file

@ -110,6 +110,8 @@ namespace kmx {
#define TSS_COMPARISON 30
#define TSS__KEYMAN_80_MAX 30
/* Keyman 9.0 system stores */
#define TSS_PLATFORM 31
@ -126,7 +128,23 @@ namespace kmx {
#define TSS_TARGETS 38
#define TSS__MAX 38
#define TSS__KEYMAN_90_MAX 38
/* Keyman 14.0 system stores */
#define TSS_CASEDKEYS 39
#define TSS__KEYMAN_140_MAX 39
/* Keyman 15.0 system stores */
#define TSS_BEGIN_NEWCONTEXT 40
#define TSS_BEGIN_POSTKEYSTROKE 41
#define TSS_LAYERCHANGED 42
#define TSS__KEYMAN_150_MAX 42
#define TSS__MAX 42
/* wm_keyman_control_internal message control codes */

View file

@ -103,7 +103,9 @@ kmx_processor::update_option(
return option(scope, key, value);
}
bool kmx_processor::queue_action(
bool
kmx_processor::queue_action(
km_kbp_state * state,
km_kbp_action_item const * action_item
) {
switch (action_item->type) {
@ -136,11 +138,17 @@ bool kmx_processor::queue_action(
break;
}
case KM_KBP_IT_PERSIST_OPT:
case KM_KBP_IT_EMIT_KEYSTROKE:
case KM_KBP_IT_CAPSLOCK:
DebugLog("kmx_processor::queue_action: Warning handling of action type [%d] not implented \n", action_item->type);
return false;
break;
case KM_KBP_IT_EMIT_KEYSTROKE:
// By pass the kmx processor and put this action into the core queue immediately
// This has to be done as the kmx processor QueAction does not have an
// emit key stroke type.
// currently only supporting emitting the current key stroke
state->actions().push_emit_keystroke();
break;
case KM_KBP_IT_INVALIDATE_CONTEXT:
_kmx.GetActions()->QueueAction(QIT_INVALIDATECONTEXT, 0);
break;

View file

@ -60,7 +60,11 @@ namespace kbp
km_kbp_state *state
) override;
bool queue_action(km_kbp_action_item const* action_item) override;
bool
queue_action(
km_kbp_state * state,
km_kbp_action_item const* action_item
) override;
km_kbp_context_item * get_intermediate_context() override;

View file

@ -114,9 +114,15 @@ namespace km {
return KM_KBP_STATUS_OK;
}
bool mock_processor::queue_action(km_kbp_action_item const* action_item) {
bool mock_processor::queue_action(
km_kbp_state * state,
km_kbp_action_item const* action_item
)
{
assert(state);
assert(action_item);
// TODO Implement
if ((!state) || (!action_item))
return false;
return false;
}

View file

@ -53,7 +53,10 @@ namespace kbp
km_kbp_status process_queued_actions( km_kbp_state *state) override;
bool queue_action(km_kbp_action_item const* action_item) override;
bool queue_action(
km_kbp_state * state,
km_kbp_action_item const* action_item
) override;
km_kbp_context_item * get_intermediate_context() override;

View file

@ -75,11 +75,15 @@ namespace kbp
/**
* Add the action items to this keyboard processor queue
*
* @param state An opaque pointer to a state object
* @param action_item
* @param bool return true if action item list is successfully processed
*/
virtual bool
queue_action(km_kbp_action_item const* action_item) = 0;
queue_action(
km_kbp_state * state,
km_kbp_action_item const* action_item
) = 0;
/**
* Returns the keyboardprocessor context as an array of

View file

@ -70,8 +70,15 @@ namespace km {
return KM_KBP_STATUS_OK;
}
bool rust_mock_processor::queue_action(km_kbp_action_item const* action_item) {
assert(action_item);
bool rust_mock_processor::queue_action(
km_kbp_state * state,
km_kbp_action_item const* action_item
)
{
assert(state);
assert(action_item);
if ((!state) || (!action_item))
return false;
// TODO Implement
return false;
}

View file

@ -50,7 +50,10 @@ namespace kbp
km_kbp_status process_queued_actions( km_kbp_state *state) override;
bool queue_action(km_kbp_action_item const* action_item) override;
bool queue_action(
km_kbp_state * state,
km_kbp_action_item const* action_item
) override;
km_kbp_context_item * get_intermediate_context() override;

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/input-processor",
"version": "15.0.177",
"version": "15.0.184",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/input-processor",
"version": "15.0.177",
"version": "15.0.184",
"description": "The core text and prediction processing engine for KeymanWeb",
"repository": {
"type": "git",
@ -18,8 +18,8 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/lexical-model-compiler": "^15.0.177",
"@keymanapp/resources-gosh": "^15.0.177",
"@keymanapp/lexical-model-compiler": "^15.0.184",
"@keymanapp/resources-gosh": "^15.0.184",
"@types/node": "^11.9.4",
"chai": "^4.3.4",
"mocha": "^8.4.0",
@ -34,11 +34,11 @@
"mocha": "mocha"
},
"dependencies": {
"@keymanapp/keyboard-processor": "^15.0.177",
"@keymanapp/lexical-model-layer": "^15.0.177",
"@keymanapp/models-types": "^15.0.177",
"@keymanapp/web-environment": "^15.0.177",
"@keymanapp/web-utils": "^15.0.177",
"@keymanapp/keyboard-processor": "^15.0.184",
"@keymanapp/lexical-model-layer": "^15.0.184",
"@keymanapp/models-types": "^15.0.184",
"@keymanapp/web-environment": "^15.0.184",
"@keymanapp/web-utils": "^15.0.184",
"eventemitter3": "^4.0.0"
}
}

View file

@ -10,14 +10,16 @@ namespace com.keyman.text {
baseLayout: 'us'
}
private device: utils.DeviceSpec;
private kbdProcessor: KeyboardProcessor;
private lngProcessor: prediction.LanguageProcessor;
constructor(options?: ProcessorInitOptions) {
constructor(device: utils.DeviceSpec, options?: ProcessorInitOptions) {
if(!options) {
options = InputProcessor.DEFAULT_OPTIONS;
}
this.device = device;
this.kbdProcessor = new KeyboardProcessor(options);
this.lngProcessor = new prediction.LanguageProcessor();
}
@ -50,11 +52,28 @@ namespace com.keyman.text {
return this.languageProcessor.activeModel;
}
/**
/**
* Tell the currently active keyboard that a new context has been selected,
* e.g. by focus change, selection change, keyboard change, etc.
*
* @param {Object} outputTarget The OutputTarget that has focus
* @returns {Object} A RuleBehavior object describing the cumulative effects of
* all matched keyboard rules
*/
processNewContextEvent(outputTarget: OutputTarget): RuleBehavior {
const ruleBehavior = this.keyboardProcessor.processNewContextEvent(this.device, outputTarget);
if(ruleBehavior) {
ruleBehavior.finalize(this.keyboardProcessor, outputTarget);
}
return ruleBehavior;
}
/**
* Simulate a keystroke according to the touched keyboard button element
*
* Handles default output and keyboard processing for both OSK and physical keystrokes.
*
*
* @param {Object} keyEvent The abstracted KeyEvent to use for keystroke processing
* @param {Object} outputTarget The OutputTarget receiving the KeyEvent
* @returns {Object} A RuleBehavior object describing the cumulative effects of
@ -105,6 +124,8 @@ namespace com.keyman.text {
// Current, long-existing assumption - it's DOM-backed.
let preInputMock = Mock.from(outputTarget);
const startingLayerId = this.keyboardProcessor.layerId;
// We presently need the true keystroke to run on the FULL context. That index is still
// needed for some indexing operations when comparing two different output targets.
let ruleBehavior = this.keyboardProcessor.processKeystroke(keyEvent, outputTarget);
@ -113,7 +134,7 @@ namespace com.keyman.text {
if(keyEvent.kNextLayer) {
this.keyboardProcessor.selectLayer(keyEvent);
}
// Should we swallow any further processing of keystroke events for this keydown-keypress sequence?
if(ruleBehavior != null) {
let alternates: Alternate[];
@ -123,7 +144,7 @@ namespace com.keyman.text {
if(this.languageProcessor.isActive && !ruleBehavior.triggersDefaultCommand) {
let keyDistribution = keyEvent.keyDistribution;
// We don't need to track absolute indexing during alternate-generation;
// We don't need to track absolute indexing during alternate-generation;
// only position-relative, so it's better to use a sliding window for context
// when making alternates. (Slightly worse for short text, matters greatly
// for long text.)
@ -141,7 +162,7 @@ namespace com.keyman.text {
let _globalThis = com.keyman.utils.getGlobalObject();
let timer: () => number;
// Available by default on `window` in browsers, but _not_ on `global` in Node,
// Available by default on `window` in browsers, but _not_ on `global` in Node,
// surprisingly. Since we can't use code dependent on `require` statements
// at present, we have to condition upon it actually existing.
if(_globalThis['performance'] && _globalThis['performance']['now']) {
@ -152,15 +173,15 @@ namespace com.keyman.text {
TIMEOUT_THRESHOLD = timer() + 16; // + 16ms.
} // else {
// We _could_ just use Date.now() as a backup... but that (probably) only matters
// when unit testing. So... we actually don't _need_ time thresholding when in
// when unit testing. So... we actually don't _need_ time thresholding when in
// a Node environment.
// }
// Tracks a minimum probability for keystroke probability. Anything less will not be
// included in alternate calculations.
// included in alternate calculations.
//
// Seek to match SearchSpace.EDIT_DISTANCE_COST_SCALE from the predictive-text engine.
// Reasoning for the selected value may be seen there. Short version - keystrokes
// Reasoning for the selected value may be seen there. Short version - keystrokes
// that _appear_ very precise may otherwise not even consider directly-neighboring keys.
let KEYSTROKE_EPSILON = Math.exp(-5);
@ -169,7 +190,7 @@ namespace com.keyman.text {
let activeLayout = this.activeKeyboard.layout(keyEvent.device.formFactor);
alternates = [];
let totalMass = 0; // Tracks sum of non-error probabilities.
for(let pair of keyDistribution) {
if(pair.p < KEYSTROKE_EPSILON) {
@ -184,7 +205,7 @@ namespace com.keyman.text {
}
let mock = Mock.from(windowedMock);
let altKey = activeLayout.getLayer(keyEvent.kbdLayer).getKey(pair.keyId);
if(!altKey) {
console.warn("Potential fat-finger key could not be found in layer!");
@ -193,14 +214,14 @@ namespace com.keyman.text {
let altEvent = altKey.constructKeyEvent(this.keyboardProcessor, keyEvent.device);
let alternateBehavior = this.keyboardProcessor.processKeystroke(altEvent, mock);
// If alternateBehavior.beep == true, ignore it. It's a disallowed key sequence,
// so we expect users to never intend their use.
//
// Also possible that this set of conditions fail for all evaluated alternates.
if(alternateBehavior && !alternateBehavior.beep && pair.p > 0) {
let transform: Transform = alternateBehavior.transcription.transform;
// Ensure that the alternate's token id matches that of the current keystroke, as we only
// record the matched rule's context (since they match)
transform.id = ruleBehavior.transcription.token;
@ -224,7 +245,7 @@ namespace com.keyman.text {
ruleBehavior.finalize(this.keyboardProcessor, outputTarget);
// -- All keystroke (and 'alternate') processing is now complete. Time to finalize everything! --
// Notify the ModelManager of new input - it's predictive text time!
if(alternates && alternates.length > 0) {
ruleBehavior.transcription.alternates = alternates;
@ -237,6 +258,20 @@ namespace com.keyman.text {
// For DOM-aware targets, this will trigger a DOM event page designers may listen for.
outputTarget.doInputEvent();
}
// The keyboard may want to take an action after all other keystroke processing is
// finished, for example to switch layers. This action may not have any output
// but may change system store or variable store values. Given this, we don't need to
// save anything about the post behavior, after finalizing it
// We need to tell the keyboard if the layer has been changed, either by a keyboard rule itself,
// or by the touch layout 'nextlayer' control.
this.keyboardProcessor.layerChangedStore.set(startingLayerId == this.keyboardProcessor.layerId ? '0' : '1');
let postRuleBehavior = this.keyboardProcessor.processPostKeystroke(keyEvent.device, outputTarget);
if(postRuleBehavior) {
postRuleBehavior.finalize(this.keyboardProcessor, outputTarget);
}
}
return ruleBehavior;
@ -245,6 +280,12 @@ namespace com.keyman.text {
public resetContext(outputTarget?: OutputTarget) {
this.keyboardProcessor.resetContext();
this.languageProcessor.invalidateContext(outputTarget);
// Let the keyboard do its initial group processing
//console.log('processNewContextEvent called from resetContext');
if(outputTarget) {
this.processNewContextEvent(outputTarget);
}
}
}
}

View file

@ -24,7 +24,7 @@ namespace com.keyman.text.prediction {
path: string;
/**
* The raw JS script defining the model. Only used if `path` is not specified.
* The raw JS script defining the model. Only used if `path` is not specified.
*/
code: string;
}
@ -123,10 +123,10 @@ namespace com.keyman.text.prediction {
lp.emit('statechange', 'active');
}
return this.lmEngine.loadModel(source, specType).then(function(config: Configuration) {
return this.lmEngine.loadModel(source, specType).then(function(config: Configuration) {
lp.configuration = config;
lp.emit('statechange', 'configured');
}).catch(function(error) {
}).catch(function(error) {
// Does this provide enough logging information?
let message: string;
if(error instanceof Error) {
@ -185,7 +185,7 @@ namespace com.keyman.text.prediction {
if(!this.currentModel || !this.configuration) {
return null;
}
// We've already invalidated any suggestions resulting from any previously-existing Promise -
// may as well officially invalidate them via event.
this.emit("invalidatesuggestions", 'new');
@ -197,7 +197,7 @@ namespace com.keyman.text.prediction {
if(!outputTarget) {
throw "Accepting suggestions requires a destination OutputTarget instance."
}
// Find the state of the context at the time the suggestion was generated.
// This may refer to the context before an input keystroke or before application
// of a predictive suggestion.
@ -218,6 +218,10 @@ namespace com.keyman.text.prediction {
let transform = final.buildTransformFrom(outputTarget);
outputTarget.apply(transform);
// Tell the banner that a suggestion was applied, so it can call the
// keyboard's PostKeystroke entry point as needed
this.emit('suggestionapplied', outputTarget);
// Build a 'reversion' Transcription that can be used to undo this apply() if needed,
// replacing the suggestion transform with the original input text.
let preApply = text.Mock.from(original.preInput);
@ -259,7 +263,7 @@ namespace com.keyman.text.prediction {
if(!outputTarget) {
throw "Accepting suggestions requires a destination OutputTarget instance."
}
// Find the state of the context at the time the suggestion was generated.
// This may refer to the context before an input keystroke or before application
// of a predictive suggestion.
@ -271,7 +275,7 @@ namespace com.keyman.text.prediction {
console.warn("Could not apply the Suggestion!");
return;
}
// Apply the Reversion!
// Step 1: determine the final output text
@ -355,7 +359,7 @@ namespace com.keyman.text.prediction {
}
/**
* Retrieves the context and output state of KMW immediately before the prediction with
* Retrieves the context and output state of KMW immediately before the prediction with
* token `id` was generated. Must correspond to a 'recent' one, as only so many are stored
* in `ModelManager`'s history buffer.
* @param id A unique identifier corresponding to a recent `Transcription`.

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/keyboard-processor",
"version": "15.0.177",
"version": "15.0.184",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/keyboard-processor",
"version": "15.0.177",
"version": "15.0.184",
"description": "Core module for Keyman keyboard support in KeymanWeb.",
"repository": {
"type": "git",
@ -18,7 +18,7 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/resources-gosh": "^15.0.177",
"@keymanapp/resources-gosh": "^15.0.184",
"chai": "^4.3.4",
"mocha": "^8.4.0",
"mocha-teamcity-reporter": "^4.0.0",
@ -32,9 +32,9 @@
"mocha": "mocha"
},
"dependencies": {
"@keymanapp/models-types": "^15.0.177",
"@keymanapp/web-environment": "^15.0.177",
"@keymanapp/web-utils": "^15.0.177",
"@keymanapp/models-types": "^15.0.184",
"@keymanapp/web-environment": "^15.0.184",
"@keymanapp/web-utils": "^15.0.184",
"@types/node": "^11.9.4"
}
}

View file

@ -158,13 +158,12 @@ namespace com.keyman.keyboards {
// Start: mirrors _GetKeyEventProperties
// Override key shift state if specified for key in layout (corrected for popup keys KMEW-93)
let keyShiftState = text.KeyboardProcessor.getModifierState(layer);
// First check the virtual key, and process shift, control, alt or function keys
var Lkc: text.KeyEvent = {
Lmodifiers: keyShiftState,
Lstates: 0,
// Override key shift state if specified for key in layout (corrected for popup keys KMEW-93)
Lmodifiers: text.KeyboardProcessor.getModifierState(layer),
Lstates: text.KeyboardProcessor.getStateFromLayer(layer),
Lcode: keyName ? text.Codes.keyCodes[keyName] : 0,
LisVirtualKey: true,
vkCode: 0,

View file

@ -58,12 +58,26 @@ namespace com.keyman.keyboards {
}
/**
* Calls the keyboard's `gs` function, which represents the keyboard source's group(main).
* Calls the keyboard's `gs` function, which represents the keyboard source's begin Unicode group.
*/
process(outputTarget: text.OutputTarget, keystroke: text.KeyEvent): boolean {
return this.scriptObject['gs'](outputTarget, keystroke);
}
/**
* Calls the keyboard's `gn` function, which represents the keyboard source's begin newContext group.
*/
processNewContextEvent(outputTarget: text.OutputTarget, keystroke: text.KeyEvent): boolean {
return this.scriptObject['gn'] ? this.scriptObject['gn'](outputTarget, keystroke) : false;
}
/**
* Calls the keyboard's `gpk` function, which represents the keyboard source's begin postKeystroke group.
*/
processPostKeystroke(outputTarget: text.OutputTarget, keystroke: text.KeyEvent): boolean {
return this.scriptObject['gpk'] ? this.scriptObject['gpk'](outputTarget, keystroke) : false;
}
get isHollow(): boolean {
return this.scriptObject == Keyboard.DEFAULT_SCRIPT_OBJECT;
}

View file

@ -185,6 +185,7 @@ namespace com.keyman.text {
static readonly TSS_LAYER: number = 33;
static readonly TSS_PLATFORM: number = 31;
static readonly TSS_LAYERCHANGED: number = 42;
systemStores: {[storeID: number]: SystemStore};
@ -201,6 +202,7 @@ namespace com.keyman.text {
this.systemStores[KeyboardInterface.TSS_PLATFORM] = new PlatformSystemStore(this);
this.systemStores[KeyboardInterface.TSS_LAYER] = new MutableSystemStore(KeyboardInterface.TSS_LAYER, 'default');
this.systemStores[KeyboardInterface.TSS_LAYERCHANGED] = new MutableSystemStore(KeyboardInterface.TSS_LAYERCHANGED, '0');
this.variableStoreSerializer = variableStoreSerializer;
}
@ -948,20 +950,59 @@ namespace com.keyman.text {
this.output(1, outputTarget, "");
}
/**
* Function processNewContextEvent
* Scope Private
* @param {Object} outputTarget The target receiving input
* @param {Object} keystroke The input keystroke (with its properties) to be mapped by the keyboard.
* Description Calls the keyboard's `begin newContext` group
* @returns {RuleBehavior} Record of commands and state changes that result from executing `begin NewContext`
*/
processNewContextEvent(outputTarget: OutputTarget, keystroke: KeyEvent): RuleBehavior {
if(!this.activeKeyboard) {
throw "No active keyboard for keystroke processing!";
}
return this.process(this.activeKeyboard.processNewContextEvent.bind(this.activeKeyboard), outputTarget, keystroke);
}
/**
* Function processPostKeystroke
* Scope Private
* @param {Object} outputTarget The target receiving input
* @param {Object} keystroke The input keystroke with relevant properties to be mapped by the keyboard.
* Description Calls the keyboard's `begin postKeystroke` group
* @returns {RuleBehavior} Record of commands and state changes that result from executing `begin PostKeystroke`
*/
processPostKeystroke(outputTarget: OutputTarget, keystroke: KeyEvent): RuleBehavior {
if(!this.activeKeyboard) {
throw "No active keyboard for keystroke processing!";
}
return this.process(this.activeKeyboard.processPostKeystroke.bind(this.activeKeyboard), outputTarget, keystroke);
}
/**
* Function processKeystroke
* Scope Private
* @param {Object} element The page element receiving input
* @param {Object} outputTarget The target receiving input
* @param {Object} keystroke The input keystroke (with its properties) to be mapped by the keyboard.
* Description Encapsulates calls to keyboard input processing.
* @returns {number} 0 if no match is made, otherwise 1.
* @returns {RuleBehavior} Record of commands and state changes that result from executing `begin Unicode`
*/
processKeystroke(outputTarget: OutputTarget, keystroke: KeyEvent): RuleBehavior {
if(!this.activeKeyboard) {
throw "No active keyboard for keystroke processing!";
}
return this.process(this.activeKeyboard.process.bind(this.activeKeyboard), outputTarget, keystroke);
}
private process(callee, outputTarget: OutputTarget, keystroke: KeyEvent): RuleBehavior {
// Clear internal state tracking data from prior keystrokes.
if(!outputTarget) {
throw "No target specified for keyboard output!";
} else if(!this.activeKeyboard) {
throw "No active keyboard for keystroke processing!";
} else if(!callee) {
throw "No callee for keystroke processing!";
}
outputTarget.invalidateSelection();
@ -984,7 +1025,7 @@ namespace com.keyman.text {
// Calls the start-group of the active keyboard.
this.activeTargetOutput = outputTarget;
var matched = this.activeKeyboard.process(outputTarget, keystroke);
var matched = callee(outputTarget, keystroke);
this.activeTargetOutput = null;
// Finalize the rule's results.

View file

@ -20,12 +20,12 @@ namespace com.keyman.text {
kLayer?: string; // The key's layer property
kbdLayer?: string; // The virtual keyboard's active layer
kNextLayer?: string;
// Holds relevant event properties leading to construction of this KeyEvent.
source?: any; // Technically, KeyEvent|MouseEvent|Touch - but those are DOM types that must be kept out of headless mode.
// Holds a generated fat-finger distribution (when appropriate)
keyDistribution?: KeyDistribution;
/**
* The device model for web-core to follow when processing the keystroke.
*/
@ -35,5 +35,13 @@ namespace com.keyman.text {
* `true` if this event was produced by sources other than a DOM-based KeyboardEvent.
*/
isSynthetic: boolean = true;
public static constructNullKeyEvent(device: utils.DeviceSpec): KeyEvent {
const keyEvent = new KeyEvent();
keyEvent.Lcode = 0;
keyEvent.kName = '';
keyEvent.device = device;
return keyEvent;
}
};
}

View file

@ -91,6 +91,10 @@ namespace com.keyman.text {
return this.keyboardInterface.systemStores[KeyboardInterface.TSS_LAYER] as MutableSystemStore;
}
public get layerChangedStore(): MutableSystemStore {
return this.keyboardInterface.systemStores[KeyboardInterface.TSS_LAYERCHANGED] as MutableSystemStore;
}
public get layerId(): string {
return this.layerStore.value;
}
@ -207,6 +211,24 @@ namespace com.keyman.text {
}
}
constructNullKeyEvent(device: utils.DeviceSpec): KeyEvent {
const keyEvent = KeyEvent.constructNullKeyEvent(device);
this.setSyntheticEventDefaults(keyEvent);
return keyEvent;
}
processNewContextEvent(device: utils.DeviceSpec, outputTarget: OutputTarget): RuleBehavior {
return this.activeKeyboard ?
this.keyboardInterface.processNewContextEvent(outputTarget, this.constructNullKeyEvent(device)) :
null;
}
processPostKeystroke(device: utils.DeviceSpec, outputTarget: OutputTarget): RuleBehavior {
return this.activeKeyboard ?
this.keyboardInterface.processPostKeystroke(outputTarget, this.constructNullKeyEvent(device)) :
null;
}
processKeystroke(keyEvent: KeyEvent, outputTarget: OutputTarget): RuleBehavior {
var matchBehavior: RuleBehavior;
@ -342,6 +364,22 @@ namespace com.keyman.text {
return modifier;
}
/**
* Get state key state from layer id
*
* @param {string} layerId layer id (e.g. caps)
* @return {number} modifier key state (desktop keyboards)
*/
static getStateFromLayer(layerId: string): number {
var modifier=0;
if(layerId.indexOf('caps') >= 0) {
modifier |= Codes.modifierCodes['CAPS'];
}
return modifier;
}
/**
* @summary Look up a custom virtual key code in the virtual key code dictionary KVKD. On first run, will build the dictionary.
*

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/recorder-core",
"version": "15.0.177",
"version": "15.0.184",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/recorder-core",
"version": "15.0.177",
"version": "15.0.184",
"description": "Core classes used to develop KeymanWeb test cases based on keystrokes",
"main": "index.js",
"scripts": {
@ -17,10 +17,10 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"dependencies": {
"@keymanapp/keyboard-processor": "^15.0.177",
"@keymanapp/models-types": "^15.0.177",
"@keymanapp/web-environment": "^15.0.177",
"@keymanapp/web-utils": "^15.0.177",
"@keymanapp/keyboard-processor": "^15.0.184",
"@keymanapp/models-types": "^15.0.184",
"@keymanapp/web-environment": "^15.0.184",
"@keymanapp/web-utils": "^15.0.184",
"@types/node": "^11.9.4"
},
"devDependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-sentry-manager",
"version": "15.0.177",
"version": "15.0.184",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-sentry-manager",
"version": "15.0.177",
"version": "15.0.184",
"description": "Common setup for KeymanWeb's Sentry-based error reporting",
"main": "dist/index.js",
"scripts": {
@ -20,7 +20,7 @@
"typescript": "^3.8.3"
},
"dependencies": {
"@keymanapp/web-environment": "^15.0.177",
"@keymanapp/web-environment": "^15.0.184",
"@sentry/browser": "^5.27.4"
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-utils",
"version": "15.0.177",
"version": "15.0.184",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/web-utils",
"version": "15.0.177",
"version": "15.0.184",
"description": "Common utility functions used throughout other Keyman packages",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@ -20,8 +20,8 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/resources-gosh": "^15.0.177",
"@keymanapp/web-environment": "^15.0.177",
"@keymanapp/resources-gosh": "^15.0.184",
"@keymanapp/web-environment": "^15.0.184",
"@types/node": "^14.0.5",
"typescript": "^3.8.3"
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-templates",
"version": "15.0.177",
"version": "15.0.184",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-templates",
"version": "15.0.177",
"version": "15.0.184",
"description": "Backing model implementations (templates) for Keyman's modelling layer",
"keywords": [
"lm",
@ -42,8 +42,8 @@
"url": "https://github.com/keymanapp/keyman/issues"
},
"devDependencies": {
"@keymanapp/models-types": "^15.0.177",
"@keymanapp/web-utils": "^15.0.177",
"@keymanapp/models-types": "^15.0.184",
"@keymanapp/web-utils": "^15.0.184",
"@types/chai": "^4.2.11",
"@types/mocha": "^7.0.2",
"@types/node": "^14.0.4",
@ -52,6 +52,6 @@
"typescript": "^3.8.3"
},
"dependencies": {
"@keymanapp/models-wordbreakers": "^15.0.177"
"@keymanapp/models-wordbreakers": "^15.0.184"
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-types",
"version": "15.0.177",
"version": "15.0.184",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-types",
"version": "15.0.177",
"version": "15.0.184",
"description": "Type definitions in used in the modeling (lexical model/predictive text) component of Keyman.",
"types": "./index.d.ts",
"scripts": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-wordbreakers",
"version": "15.0.177",
"version": "15.0.184",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/models-wordbreakers",
"version": "15.0.177",
"version": "15.0.184",
"description": "Word breakers bundled in the modeling layer",
"keywords": [
"lexical model",
@ -40,7 +40,7 @@
"url": "https://github.com/keymanapp/keyman/issues"
},
"devDependencies": {
"@keymanapp/models-types": "^15.0.177",
"@keymanapp/models-types": "^15.0.184",
"@types/chai": "^4.2.11",
"@types/mocha": "^7.0.2",
"chai": "^4.3.4",

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-layer",
"version": "15.0.177",
"version": "15.0.184",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-layer",
"version": "15.0.177",
"version": "15.0.184",
"description": "Keyman/Predictive Text integration layer",
"main": "build/index.js",
"scripts": {
@ -21,8 +21,8 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
"@keymanapp/models-types": "^15.0.177",
"@keymanapp/resources-gosh": "^15.0.177",
"@keymanapp/models-types": "^15.0.184",
"@keymanapp/resources-gosh": "^15.0.184",
"@types/node": "^10.17.21",
"chai": "^4.3.4",
"karma": "^6.3.4",
@ -46,10 +46,10 @@
"typescript": "^3.8.3"
},
"dependencies": {
"@keymanapp/models-templates": "^15.0.177",
"@keymanapp/models-wordbreakers": "^15.0.177",
"@keymanapp/web-environment": "^15.0.177",
"@keymanapp/web-utils": "^15.0.177",
"@keymanapp/models-templates": "^15.0.184",
"@keymanapp/models-wordbreakers": "^15.0.184",
"@keymanapp/web-environment": "^15.0.184",
"@keymanapp/web-utils": "^15.0.184",
"es6-shim": "^0.35.5",
"string.prototype.codepointat": "^0.2.1",
"string.prototype.startswith": "^0.2.0"

View file

@ -0,0 +1,6 @@
Caps Lock Layer 3620 Change History
====================
1.0 (2021-11-30)
----------------
* Created by

View file

@ -0,0 +1,21 @@
The MIT License (MIT)
© 2021
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,30 @@
Caps Lock Layer 3620 keyboard
==============
Version 1.0
Description
-----------
Caps Lock Layer 3620 generated from template
Links
-----
Copyright
---------
See [LICENSE.md](LICENSE.md)
Supported Platforms
-------------------
* Windows
* macOS
* Linux
* Web
* iPhone
* iPad
* Android phone
* Android tablet
* Mobile devices
* Desktop devices
* Tablet devices

View file

@ -0,0 +1,7 @@
{
"license": "mit",
"languages": [
"en"
],
"description": "Caps Lock Layer 3620 generated from template"
}

View file

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="utf-8"?>
<KeymanDeveloperProject>
<Options>
<BuildPath>$PROJECTPATH\build</BuildPath>
<CompilerWarningsAsErrors>True</CompilerWarningsAsErrors>
<WarnDeprecatedCode>True</WarnDeprecatedCode>
<CheckFilenameConventions>True</CheckFilenameConventions>
<ProjectType>keyboard</ProjectType>
</Options>
<Files>
<File>
<ID>id_ae750e073bdf1a73f961466813e93a67</ID>
<Filename>caps_lock_layer_3620.kmn</Filename>
<Filepath>source\caps_lock_layer_3620.kmn</Filepath>
<FileVersion>1.0</FileVersion>
<FileType>.kmn</FileType>
<Details>
<Name>Caps Lock Layer 3620</Name>
<Copyright>©</Copyright>
</Details>
</File>
<File>
<ID>id_8572983c5fa67dc8f3e31da0333521b5</ID>
<Filename>caps_lock_layer_3620.kps</Filename>
<Filepath>source\caps_lock_layer_3620.kps</Filepath>
<FileVersion></FileVersion>
<FileType>.kps</FileType>
<Details>
<Name>Caps Lock Layer 3620</Name>
<Copyright>©</Copyright>
</Details>
</File>
<File>
<ID>id_ede98e4633e239f933cbfd1f4e1b766c</ID>
<Filename>HISTORY.md</Filename>
<Filepath>HISTORY.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_53e892b8b41cc4caece1cfd5ef21d6e7</ID>
<Filename>LICENSE.md</Filename>
<Filepath>LICENSE.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_0730bb7c2e8f9ea2438b52e419dd86c9</ID>
<Filename>README.md</Filename>
<Filepath>README.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_fff8738ee01fad8282ccd871d1b1d7ec</ID>
<Filename>caps_lock_layer_3620.keyboard_info</Filename>
<Filepath>caps_lock_layer_3620.keyboard_info</Filepath>
<FileVersion></FileVersion>
<FileType>.keyboard_info</FileType>
</File>
<File>
<ID>id_6beb4ed096b4f0d03913a0cf0dc1c10b</ID>
<Filename>caps_lock_layer_3620.kmx</Filename>
<Filepath>source\..\build\caps_lock_layer_3620.kmx</Filepath>
<FileVersion></FileVersion>
<FileType>.kmx</FileType>
<ParentFileID>id_8572983c5fa67dc8f3e31da0333521b5</ParentFileID>
</File>
<File>
<ID>id_85da30900c1f778b42f47770aa7d67ae</ID>
<Filename>caps_lock_layer_3620.js</Filename>
<Filepath>source\..\build\caps_lock_layer_3620.js</Filepath>
<FileVersion></FileVersion>
<FileType>.js</FileType>
<ParentFileID>id_8572983c5fa67dc8f3e31da0333521b5</ParentFileID>
</File>
<File>
<ID>id_456ab3d34c321e614773101797d2a54f</ID>
<Filename>caps_lock_layer_3620.kvk</Filename>
<Filepath>source\..\build\caps_lock_layer_3620.kvk</Filepath>
<FileVersion></FileVersion>
<FileType>.kvk</FileType>
<ParentFileID>id_8572983c5fa67dc8f3e31da0333521b5</ParentFileID>
</File>
<File>
<ID>id_356e5d149c1e539356d72698c1e401a6</ID>
<Filename>welcome.htm</Filename>
<Filepath>source\welcome.htm</Filepath>
<FileVersion></FileVersion>
<FileType>.htm</FileType>
<ParentFileID>id_8572983c5fa67dc8f3e31da0333521b5</ParentFileID>
</File>
<File>
<ID>id_8da344c4cea6f467013357fe099006f5</ID>
<Filename>readme.htm</Filename>
<Filepath>source\readme.htm</Filepath>
<FileVersion></FileVersion>
<FileType>.htm</FileType>
<ParentFileID>id_8572983c5fa67dc8f3e31da0333521b5</ParentFileID>
</File>
</Files>
</KeymanDeveloperProject>

View file

@ -0,0 +1,891 @@
{
"tablet": {
"font": "Tahoma",
"layer": [
{
"id": "default",
"row": [
{
"id": 1,
"key": [
{
"id": "K_Q",
"text": "q"
},
{
"id": "K_W",
"text": "w"
},
{
"id": "K_E",
"text": "e"
},
{
"id": "K_R",
"text": "r"
},
{
"id": "K_T",
"text": "t"
},
{
"id": "K_Y",
"text": "y"
},
{
"id": "K_U",
"text": "u"
},
{
"id": "K_I",
"text": "i"
},
{
"id": "K_O",
"text": "o"
},
{
"id": "K_P",
"text": "p"
}
]
},
{
"id": 2,
"key": [
{
"id": "K_A",
"text": "a",
"pad": 70
},
{
"id": "K_S",
"text": "s"
},
{
"id": "K_D",
"text": "d"
},
{
"id": "K_F",
"text": "f"
},
{
"id": "K_G",
"text": "g"
},
{
"id": "K_H",
"text": "h"
},
{
"id": "K_J",
"text": "j"
},
{
"id": "K_K",
"text": "k"
},
{
"id": "K_L",
"text": "l"
},
{
"id": "T_new_54",
"text": "",
"width": "10",
"sp": "10"
}
]
},
{
"id": 3,
"key": [
{
"id": "K_SHIFT",
"text": "*Shift*",
"width": "110",
"sp": "1",
"nextlayer": "shift"
},
{
"id": "K_Z",
"text": "z"
},
{
"id": "K_X",
"text": "x"
},
{
"id": "K_C",
"text": "c"
},
{
"id": "K_V",
"text": "v"
},
{
"id": "K_B",
"text": "b"
},
{
"id": "K_N",
"text": "n"
},
{
"id": "K_M",
"text": "m"
},
{
"id": "K_PERIOD",
"text": ".",
"sk": [
{
"text": ",",
"id": "K_COMMA"
},
{
"text": "!",
"id": "K_1",
"layer": "shift"
},
{
"text": "?",
"id": "K_SLASH",
"layer": "shift"
},
{
"text": "'",
"id": "K_QUOTE"
},
{
"text": "\"",
"id": "K_QUOTE",
"layer": "shift"
},
{
"text": "\\",
"id": "K_BKSLASH"
},
{
"text": ":",
"id": "K_COLON",
"layer": "shift"
},
{
"text": ";",
"id": "K_COLON"
}
]
},
{
"id": "K_BKSP",
"text": "*BkSp*",
"width": "90",
"sp": "1"
}
]
},
{
"id": 4,
"key": [
{
"id": "K_NUMLOCK",
"text": "*123*",
"width": "140",
"sp": "1",
"nextlayer": "numeric"
},
{
"id": "K_LOPT",
"text": "*Menu*",
"width": "120",
"sp": "1"
},
{
"id": "K_SPACE",
"text": "",
"width": "630",
"sp": "0"
},
{
"id": "K_ENTER",
"text": "*Enter*",
"width": "140",
"sp": "1"
}
]
}
]
},
{
"id": "shift",
"row": [
{
"id": 1,
"key": [
{
"id": "K_Q",
"text": "Q"
},
{
"id": "K_W",
"text": "W"
},
{
"id": "K_E",
"text": "E"
},
{
"id": "K_R",
"text": "R"
},
{
"id": "K_T",
"text": "T"
},
{
"id": "K_Y",
"text": "Y"
},
{
"id": "K_U",
"text": "U"
},
{
"id": "K_I",
"text": "I"
},
{
"id": "K_O",
"text": "O"
},
{
"id": "K_P",
"text": "P"
}
]
},
{
"id": 2,
"key": [
{
"id": "K_A",
"text": "A",
"pad": 70
},
{
"id": "K_S",
"text": "S"
},
{
"id": "K_D",
"text": "D"
},
{
"id": "K_F",
"text": "F"
},
{
"id": "K_G",
"text": "G"
},
{
"id": "K_H",
"text": "H"
},
{
"id": "K_J",
"text": "J"
},
{
"id": "K_K",
"text": "K"
},
{
"id": "K_L",
"text": "L"
},
{
"id": "T_new_190",
"text": "",
"width": "10",
"sp": "10"
}
]
},
{
"id": 3,
"key": [
{
"id": "K_SHIFT",
"text": "*Shift*",
"width": "110",
"sp": "2",
"nextlayer": "default"
},
{
"id": "K_Z",
"text": "Z"
},
{
"id": "K_X",
"text": "X"
},
{
"id": "K_C",
"text": "C"
},
{
"id": "K_V",
"text": "V"
},
{
"id": "K_B",
"text": "B"
},
{
"id": "K_N",
"text": "N"
},
{
"id": "K_M",
"text": "M"
},
{
"id": "K_PERIOD",
"text": ".",
"layer": "default",
"sk": [
{
"text": ",",
"id": "K_COMMA",
"layer": "default"
},
{
"text": "!",
"id": "K_1",
"layer": "shift"
},
{
"text": "?",
"id": "K_SLASH",
"layer": "shift"
},
{
"text": "'",
"id": "K_QUOTE",
"layer": "default"
},
{
"text": "\"",
"id": "K_QUOTE",
"layer": "shift"
},
{
"text": "\\",
"id": "K_BKSLASH",
"layer": "default"
},
{
"text": ":",
"id": "K_COLON",
"layer": "shift"
},
{
"text": ";",
"id": "K_COLON",
"layer": "default"
}
]
},
{
"id": "K_BKSP",
"text": "*BkSp*",
"width": "90",
"sp": "1"
}
]
},
{
"id": 4,
"key": [
{
"id": "K_NUMLOCK",
"text": "*123*",
"width": "140",
"sp": "1",
"nextlayer": "numeric"
},
{
"id": "K_LOPT",
"text": "*Menu*",
"width": "120",
"sp": "1"
},
{
"id": "K_SPACE",
"text": "",
"width": "630",
"sp": "0"
},
{
"id": "K_ENTER",
"text": "*Enter*",
"width": "140",
"sp": "1"
}
]
}
]
},
{
"id": "numeric",
"row": [
{
"id": 1,
"key": [
{
"id": "K_1",
"text": "1"
},
{
"id": "K_2",
"text": "2"
},
{
"id": "K_3",
"text": "3"
},
{
"id": "K_4",
"text": "4"
},
{
"id": "K_5",
"text": "5"
},
{
"id": "K_6",
"text": "6"
},
{
"id": "K_7",
"text": "7"
},
{
"id": "K_8",
"text": "8"
},
{
"id": "K_9",
"text": "9"
},
{
"id": "K_0",
"text": "0"
}
]
},
{
"id": 2,
"key": [
{
"id": "K_4",
"text": "$",
"pad": 70,
"layer": "shift"
},
{
"id": "K_2",
"text": "@",
"layer": "shift"
},
{
"id": "K_3",
"text": "#",
"layer": "shift"
},
{
"id": "K_5",
"text": "%",
"layer": "shift"
},
{
"id": "K_7",
"text": "&",
"layer": "shift"
},
{
"id": "K_HYPHEN",
"text": "_",
"layer": "shift"
},
{
"id": "K_EQUAL",
"text": "=",
"layer": "default"
},
{
"id": "K_BKSLASH",
"text": "|",
"layer": "shift"
},
{
"id": "K_BKSLASH",
"text": "\\",
"layer": "default"
},
{
"id": "T_new_536",
"text": "",
"width": "10",
"sp": "10"
}
]
},
{
"id": 3,
"key": [
{
"id": "K_SHIFT",
"text": "*Shift*",
"width": "110",
"sp": "1",
"nextlayer": "shift"
},
{
"id": "K_LBRKT",
"text": "[",
"sk": [
{
"id": "U_00AB",
"text": "«"
},
{
"id": "K_COMMA",
"text": "<",
"layer": "shift"
},
{
"id": "K_LBRKT",
"text": "{",
"layer": "shift"
}
]
},
{
"id": "K_9",
"text": "(",
"layer": "shift"
},
{
"id": "K_0",
"text": ")",
"layer": "shift"
},
{
"id": "K_RBRKT",
"text": "]",
"sk": [
{
"id": "U_00BB",
"text": "»"
},
{
"id": "K_PERIOD",
"text": ">",
"layer": "shift"
},
{
"id": "K_RBRKT",
"text": "}",
"layer": "shift"
}
]
},
{
"id": "K_EQUAL",
"text": "+",
"layer": "shift"
},
{
"id": "K_HYPHEN",
"text": "-",
"layer": "default"
},
{
"id": "K_8",
"text": "*",
"layer": "shift"
},
{
"id": "K_SLASH",
"text": "/",
"layer": "default"
},
{
"id": "K_BKSP",
"text": "*BkSp*",
"width": "90",
"sp": "1"
}
]
},
{
"id": 4,
"key": [
{
"id": "K_LOWER",
"text": "*abc*",
"width": "140",
"sp": "1",
"nextlayer": "default"
},
{
"id": "K_LOPT",
"text": "*Menu*",
"width": "120",
"sp": "1"
},
{
"id": "K_SPACE",
"text": "",
"width": "630",
"sp": "0"
},
{
"id": "K_ENTER",
"text": "*Enter*",
"width": "140",
"sp": "1"
}
]
}
]
},
{
"id": "caps",
"row": [
{
"id": 1,
"key": [
{
"id": "K_Q",
"text": "Q"
},
{
"id": "K_W",
"text": "W"
},
{
"id": "K_E",
"text": "E"
},
{
"id": "K_R",
"text": "R"
},
{
"id": "K_T",
"text": "T"
},
{
"id": "K_Y",
"text": "Y"
},
{
"id": "K_U",
"text": "U"
},
{
"id": "K_I",
"text": "I"
},
{
"id": "K_O",
"text": "O"
},
{
"id": "K_P",
"text": "P"
}
]
},
{
"id": 2,
"key": [
{
"id": "K_A",
"text": "A",
"pad": 70
},
{
"id": "K_S",
"text": "S"
},
{
"id": "K_D",
"text": "D"
},
{
"id": "K_F",
"text": "F"
},
{
"id": "K_G",
"text": "G"
},
{
"id": "K_H",
"text": "H"
},
{
"id": "K_J",
"text": "J"
},
{
"id": "K_K",
"text": "K"
},
{
"id": "K_L",
"text": "L"
},
{
"id": "T_new_190",
"text": "",
"width": "10",
"sp": "10"
}
]
},
{
"id": 3,
"key": [
{
"id": "K_SHIFT",
"text": "*ShiftedLock*",
"width": "110",
"sp": "2",
"nextlayer": "default"
},
{
"id": "K_Z",
"text": "Z"
},
{
"id": "K_X",
"text": "X"
},
{
"id": "K_C",
"text": "C"
},
{
"id": "K_V",
"text": "V"
},
{
"id": "K_B",
"text": "B"
},
{
"id": "K_N",
"text": "N"
},
{
"id": "K_M",
"text": "M"
},
{
"id": "K_PERIOD",
"text": ".",
"layer": "default",
"sk": [
{
"text": ",",
"id": "K_COMMA",
"layer": "default"
},
{
"text": "!",
"id": "K_1",
"layer": "shift"
},
{
"text": "?",
"id": "K_SLASH",
"layer": "shift"
},
{
"text": "'",
"id": "K_QUOTE",
"layer": "default"
},
{
"text": "\"",
"id": "K_QUOTE",
"layer": "shift"
},
{
"text": "\\",
"id": "K_BKSLASH",
"layer": "default"
},
{
"text": ":",
"id": "K_COLON",
"layer": "shift"
},
{
"text": ";",
"id": "K_COLON",
"layer": "default"
}
]
},
{
"id": "K_BKSP",
"text": "*BkSp*",
"width": "90",
"sp": "1"
}
]
},
{
"id": 4,
"key": [
{
"id": "K_NUMLOCK",
"text": "*123*",
"width": "140",
"sp": "1",
"nextlayer": "numeric"
},
{
"id": "K_LOPT",
"text": "*Menu*",
"width": "120",
"sp": "1"
},
{
"id": "K_SPACE",
"text": "",
"width": "630",
"sp": "0"
},
{
"id": "K_ENTER",
"text": "*Enter*",
"width": "140",
"sp": "1"
}
]
}
]
}
],
"displayUnderlying": false
}
}

View file

@ -0,0 +1,20 @@
c caps_lock_layer_3620 generated from template at 2021-11-30 14:58:52
c with name "Caps Lock Layer 3620"
store(&VERSION) '10.0'
store(&NAME) 'Caps Lock Layer 3620'
store(&COPYRIGHT) '©'
store(&KEYBOARDVERSION) '1.0'
store(&TARGETS) 'any'
store(&VISUALKEYBOARD) 'caps_lock_layer_3620.kvks'
store(&LAYOUTFILE) 'caps_lock_layer_3620.keyman-touch-layout'
begin Unicode > use(main)
store(key) [K_A] .. [K_Z] [SHIFT K_A] .. [SHIFT K_Z]
store(out) 'a' .. 'z' 'A' .. 'Z'
store(&CasedKeys) [K_A] .. [K_Z]
group(main) using keys
+ any(key) > index(out, 1)

View file

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<Package>
<System>
<KeymanDeveloperVersion>15.0.114.0</KeymanDeveloperVersion>
<FileVersion>7.0</FileVersion>
</System>
<Options>
<ExecuteProgram></ExecuteProgram>
<ReadMeFile>readme.htm</ReadMeFile>
<MSIFileName></MSIFileName>
<MSIOptions></MSIOptions>
<FollowKeyboardVersion/>
</Options>
<StartMenu>
<Folder></Folder>
<Items/>
</StartMenu>
<Info>
<Name URL="">Caps Lock Layer 3620</Name>
<Copyright URL="">©</Copyright>
<Author URL=""></Author>
<Version URL=""></Version>
</Info>
<Files>
<File>
<Name>..\build\caps_lock_layer_3620.kmx</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.kmx</FileType>
</File>
<File>
<Name>..\build\caps_lock_layer_3620.js</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.js</FileType>
</File>
<File>
<Name>..\build\caps_lock_layer_3620.kvk</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.kvk</FileType>
</File>
<File>
<Name>welcome.htm</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
<File>
<Name>readme.htm</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
</Files>
<Keyboards>
<Keyboard>
<Name>Caps Lock Layer 3620</Name>
<ID>caps_lock_layer_3620</ID>
<Version>1.0</Version>
<Languages>
<Language ID="en">English</Language>
</Languages>
</Keyboard>
</Keyboards>
<Strings/>
</Package>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<visualkeyboard>
<header>
<version>10.0</version>
<kbdname>caps_lock_layer_3620</kbdname>
<flags/>
</header>
</visualkeyboard>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Caps Lock Layer 3620</title>
<style type="text/css">
p { font: 10pt Tahoma; }
h1 { font: bold 16pt Tahoma; color: #4444cc; margin-bottom: 2px }
h2 { font: bold 12pt Tahoma; color: #4444cc; }
</style>
</head>
<body>
<h1>Caps Lock Layer 3620</h1>
<p>
Caps Lock Layer 3620 1.0 generated from template.
</p>
<p>©</p>
</body>
</html>

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Start Using Caps Lock Layer 3620</title>
<style type="text/css">
p { font: 10pt Tahoma; }
h1 { font: bold 16pt Tahoma; color: #4444cc; margin-bottom: 2px }
h2 { font: bold 12pt Tahoma; color: #4444cc; }
</style>
</head>
<body>
<h1>Start Using Caps Lock Layer 3620</h1>
<p>
Caps Lock Layer 3620 1.0 generated from template.
</p>
<h1>Keyboard Layout</h1>
<!-- Insert Keyboard Layout Images or HTML here -->
</body>
</html>

View file

@ -0,0 +1,6 @@
full_caps_3620_3621 Change History
====================
1.0 (2021-12-01)
----------------
* Created by

View file

@ -0,0 +1,21 @@
The MIT License (MIT)
© 2021
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,30 @@
full_caps_3620_3621 keyboard
==============
Version 1.0
Description
-----------
full_caps_3620_3621 generated from template
Links
-----
Copyright
---------
See [LICENSE.md](LICENSE.md)
Supported Platforms
-------------------
* Windows
* macOS
* Linux
* Web
* iPhone
* iPad
* Android phone
* Android tablet
* Mobile devices
* Desktop devices
* Tablet devices

View file

@ -0,0 +1,7 @@
{
"license": "mit",
"languages": [
"en"
],
"description": "full_caps_3620_3621 generated from template"
}

View file

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="utf-8"?>
<KeymanDeveloperProject>
<Options>
<BuildPath>$PROJECTPATH\build</BuildPath>
<CompilerWarningsAsErrors>True</CompilerWarningsAsErrors>
<WarnDeprecatedCode>True</WarnDeprecatedCode>
<CheckFilenameConventions>True</CheckFilenameConventions>
<ProjectType>keyboard</ProjectType>
</Options>
<Files>
<File>
<ID>id_48789b910029398efc8e93b3cf8ead67</ID>
<Filename>full_caps_3620_3621.kmn</Filename>
<Filepath>source\full_caps_3620_3621.kmn</Filepath>
<FileVersion>1.0</FileVersion>
<FileType>.kmn</FileType>
<Details>
<Name>full_caps_3620_3621</Name>
<Copyright>©</Copyright>
</Details>
</File>
<File>
<ID>id_0a20f9a938ef015f88d1e10294793d49</ID>
<Filename>full_caps_3620_3621.kps</Filename>
<Filepath>source\full_caps_3620_3621.kps</Filepath>
<FileVersion></FileVersion>
<FileType>.kps</FileType>
<Details>
<Name>full_caps_3620_3621</Name>
<Copyright>©</Copyright>
</Details>
</File>
<File>
<ID>id_ede98e4633e239f933cbfd1f4e1b766c</ID>
<Filename>HISTORY.md</Filename>
<Filepath>HISTORY.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_53e892b8b41cc4caece1cfd5ef21d6e7</ID>
<Filename>LICENSE.md</Filename>
<Filepath>LICENSE.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_0730bb7c2e8f9ea2438b52e419dd86c9</ID>
<Filename>README.md</Filename>
<Filepath>README.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_da795226173614238dd92754311e5f15</ID>
<Filename>full_caps_3620_3621.keyboard_info</Filename>
<Filepath>full_caps_3620_3621.keyboard_info</Filepath>
<FileVersion></FileVersion>
<FileType>.keyboard_info</FileType>
</File>
<File>
<ID>id_3087832d59de33f9903fc21ba620b576</ID>
<Filename>full_caps_3620_3621.kmx</Filename>
<Filepath>source\..\build\full_caps_3620_3621.kmx</Filepath>
<FileVersion></FileVersion>
<FileType>.kmx</FileType>
<ParentFileID>id_0a20f9a938ef015f88d1e10294793d49</ParentFileID>
</File>
<File>
<ID>id_5ac2d34b9f02b291dd03055796f14de3</ID>
<Filename>full_caps_3620_3621.js</Filename>
<Filepath>source\..\build\full_caps_3620_3621.js</Filepath>
<FileVersion></FileVersion>
<FileType>.js</FileType>
<ParentFileID>id_0a20f9a938ef015f88d1e10294793d49</ParentFileID>
</File>
<File>
<ID>id_74e4dcbb99594bddbe39b1fcac0ea24f</ID>
<Filename>full_caps_3620_3621.kvk</Filename>
<Filepath>source\..\build\full_caps_3620_3621.kvk</Filepath>
<FileVersion></FileVersion>
<FileType>.kvk</FileType>
<ParentFileID>id_0a20f9a938ef015f88d1e10294793d49</ParentFileID>
</File>
<File>
<ID>id_356e5d149c1e539356d72698c1e401a6</ID>
<Filename>welcome.htm</Filename>
<Filepath>source\welcome.htm</Filepath>
<FileVersion></FileVersion>
<FileType>.htm</FileType>
<ParentFileID>id_0a20f9a938ef015f88d1e10294793d49</ParentFileID>
</File>
<File>
<ID>id_8da344c4cea6f467013357fe099006f5</ID>
<Filename>readme.htm</Filename>
<Filepath>source\readme.htm</Filepath>
<FileVersion></FileVersion>
<FileType>.htm</FileType>
<ParentFileID>id_0a20f9a938ef015f88d1e10294793d49</ParentFileID>
</File>
</Files>
</KeymanDeveloperProject>

View file

@ -0,0 +1,889 @@
{
"tablet": {
"font": "Tahoma",
"layer": [
{
"id": "default",
"row": [
{
"id": 1,
"key": [
{
"id": "K_Q",
"text": "q"
},
{
"id": "K_W",
"text": "w"
},
{
"id": "K_E",
"text": "e"
},
{
"id": "K_R",
"text": "r"
},
{
"id": "K_T",
"text": "t"
},
{
"id": "K_Y",
"text": "y"
},
{
"id": "K_U",
"text": "u"
},
{
"id": "K_I",
"text": "i"
},
{
"id": "K_O",
"text": "o"
},
{
"id": "K_P",
"text": "p"
}
]
},
{
"id": 2,
"key": [
{
"id": "K_A",
"text": "a",
"pad": 70
},
{
"id": "K_S",
"text": "s"
},
{
"id": "K_D",
"text": "d"
},
{
"id": "K_F",
"text": "f"
},
{
"id": "K_G",
"text": "g"
},
{
"id": "K_H",
"text": "h"
},
{
"id": "K_J",
"text": "j"
},
{
"id": "K_K",
"text": "k"
},
{
"id": "K_L",
"text": "l"
},
{
"id": "T_new_54",
"text": "",
"width": "10",
"sp": "10"
}
]
},
{
"id": 3,
"key": [
{
"id": "K_SHIFT",
"text": "*Shift*",
"width": "110",
"sp": "1",
"nextlayer": "shift"
},
{
"id": "K_Z",
"text": "z"
},
{
"id": "K_X",
"text": "x"
},
{
"id": "K_C",
"text": "c"
},
{
"id": "K_V",
"text": "v"
},
{
"id": "K_B",
"text": "b"
},
{
"id": "K_N",
"text": "n"
},
{
"id": "K_M",
"text": "m"
},
{
"id": "K_PERIOD",
"text": ".",
"sk": [
{
"text": ",",
"id": "K_COMMA"
},
{
"text": "!",
"id": "K_1",
"layer": "shift"
},
{
"text": "?",
"id": "K_SLASH",
"layer": "shift"
},
{
"text": "'",
"id": "K_QUOTE"
},
{
"text": "\"",
"id": "K_QUOTE",
"layer": "shift"
},
{
"text": "\\",
"id": "K_BKSLASH"
},
{
"text": ":",
"id": "K_COLON",
"layer": "shift"
},
{
"text": ";",
"id": "K_COLON"
}
]
},
{
"id": "K_BKSP",
"text": "*BkSp*",
"width": "90",
"sp": "1"
}
]
},
{
"id": 4,
"key": [
{
"id": "K_NUMLOCK",
"text": "*123*",
"width": "140",
"sp": "1",
"nextlayer": "numeric"
},
{
"id": "K_LOPT",
"text": "*Menu*",
"width": "120",
"sp": "1"
},
{
"id": "K_SPACE",
"text": "",
"width": "630",
"sp": "0"
},
{
"id": "K_ENTER",
"text": "*Enter*",
"width": "140",
"sp": "1"
}
]
}
]
},
{
"id": "shift",
"row": [
{
"id": 1,
"key": [
{
"id": "K_Q",
"text": "Q"
},
{
"id": "K_W",
"text": "W"
},
{
"id": "K_E",
"text": "E"
},
{
"id": "K_R",
"text": "R"
},
{
"id": "K_T",
"text": "T"
},
{
"id": "K_Y",
"text": "Y"
},
{
"id": "K_U",
"text": "U"
},
{
"id": "K_I",
"text": "I"
},
{
"id": "K_O",
"text": "O"
},
{
"id": "K_P",
"text": "P"
}
]
},
{
"id": 2,
"key": [
{
"id": "K_A",
"text": "A",
"pad": 70
},
{
"id": "K_S",
"text": "S"
},
{
"id": "K_D",
"text": "D"
},
{
"id": "K_F",
"text": "F"
},
{
"id": "K_G",
"text": "G"
},
{
"id": "K_H",
"text": "H"
},
{
"id": "K_J",
"text": "J"
},
{
"id": "K_K",
"text": "K"
},
{
"id": "K_L",
"text": "L"
},
{
"id": "T_new_88",
"text": "",
"width": "10",
"sp": "10"
}
]
},
{
"id": 3,
"key": [
{
"id": "K_SHIFT",
"text": "*Shift*",
"width": "110",
"sp": "2",
"nextlayer": "default"
},
{
"id": "K_Z",
"text": "Z"
},
{
"id": "K_X",
"text": "X"
},
{
"id": "K_C",
"text": "C"
},
{
"id": "K_V",
"text": "V"
},
{
"id": "K_B",
"text": "B"
},
{
"id": "K_N",
"text": "N"
},
{
"id": "K_M",
"text": "M"
},
{
"id": "K_PERIOD",
"text": ".",
"layer": "default",
"sk": [
{
"text": ",",
"id": "K_COMMA",
"layer": "default"
},
{
"text": "!",
"id": "K_1",
"layer": "shift"
},
{
"text": "?",
"id": "K_SLASH",
"layer": "shift"
},
{
"text": "'",
"id": "K_QUOTE",
"layer": "default"
},
{
"text": "\"",
"id": "K_QUOTE",
"layer": "shift"
},
{
"text": "\\",
"id": "K_BKSLASH",
"layer": "default"
},
{
"text": ":",
"id": "K_COLON",
"layer": "shift"
},
{
"text": ";",
"id": "K_COLON",
"layer": "default"
}
]
},
{
"id": "K_BKSP",
"text": "*BkSp*",
"width": "90",
"sp": "1"
}
]
},
{
"id": 4,
"key": [
{
"id": "K_NUMLOCK",
"text": "*123*",
"width": "140",
"sp": "1",
"nextlayer": "numeric"
},
{
"id": "K_LOPT",
"text": "*Menu*",
"width": "120",
"sp": "1"
},
{
"id": "K_SPACE",
"text": "",
"width": "630",
"sp": "0"
},
{
"id": "K_ENTER",
"text": "*Enter*",
"width": "140",
"sp": "1"
}
]
}
]
},
{
"id": "numeric",
"row": [
{
"id": 1,
"key": [
{
"id": "K_1",
"text": "1"
},
{
"id": "K_2",
"text": "2"
},
{
"id": "K_3",
"text": "3"
},
{
"id": "K_4",
"text": "4"
},
{
"id": "K_5",
"text": "5"
},
{
"id": "K_6",
"text": "6"
},
{
"id": "K_7",
"text": "7"
},
{
"id": "K_8",
"text": "8"
},
{
"id": "K_9",
"text": "9"
},
{
"id": "K_0",
"text": "0"
}
]
},
{
"id": 2,
"key": [
{
"id": "K_4",
"text": "$",
"layer": "shift",
"pad": 70
},
{
"id": "K_2",
"text": "@",
"layer": "shift"
},
{
"id": "K_3",
"text": "#",
"layer": "shift"
},
{
"id": "K_5",
"text": "%",
"layer": "shift"
},
{
"id": "K_7",
"text": "&",
"layer": "shift"
},
{
"id": "K_HYPHEN",
"text": "_",
"layer": "shift"
},
{
"id": "K_EQUAL",
"text": "=",
"layer": "default"
},
{
"id": "K_BKSLASH",
"text": "|",
"layer": "shift"
},
{
"id": "K_BKSLASH",
"text": "\\",
"layer": "default"
},
{
"text": "",
"width": "10",
"sp": "10"
}
]
},
{
"id": 3,
"key": [
{
"id": "K_SHIFT",
"text": "*Shift*",
"width": "110",
"sp": "1"
},
{
"id": "K_LBRKT",
"text": "[",
"sk": [
{
"id": "U_00AB",
"text": "«"
},
{
"id": "K_COMMA",
"text": "<",
"layer": "shift"
},
{
"id": "K_LBRKT",
"text": "{",
"layer": "shift"
}
]
},
{
"id": "K_9",
"text": "(",
"layer": "shift"
},
{
"id": "K_0",
"text": ")",
"layer": "shift"
},
{
"id": "K_RBRKT",
"text": "]",
"sk": [
{
"id": "U_00BB",
"text": "»"
},
{
"id": "K_PERIOD",
"text": ">",
"layer": "shift"
},
{
"id": "K_RBRKT",
"text": "}",
"layer": "shift"
}
]
},
{
"id": "K_EQUAL",
"text": "+",
"layer": "shift"
},
{
"id": "K_HYPHEN",
"text": "-",
"layer": "default"
},
{
"id": "K_8",
"text": "*",
"layer": "shift"
},
{
"id": "K_SLASH",
"text": "/",
"layer": "default"
},
{
"id": "K_BKSP",
"text": "*BkSp*",
"width": "90",
"sp": "1"
}
]
},
{
"id": 4,
"key": [
{
"id": "K_LOWER",
"text": "*abc*",
"width": "140",
"sp": "1",
"nextlayer": "default"
},
{
"id": "K_LOPT",
"text": "*Menu*",
"width": "120",
"sp": "1"
},
{
"id": "K_SPACE",
"text": "",
"width": "630",
"sp": "0"
},
{
"id": "K_ENTER",
"text": "*Enter*",
"width": "140",
"sp": "1"
}
]
}
]
},
{
"id": "caps",
"row": [
{
"id": 1,
"key": [
{
"id": "K_Q",
"text": "Q"
},
{
"id": "K_W",
"text": "W"
},
{
"id": "K_E",
"text": "E"
},
{
"id": "K_R",
"text": "R"
},
{
"id": "K_T",
"text": "T"
},
{
"id": "K_Y",
"text": "Y"
},
{
"id": "K_U",
"text": "U"
},
{
"id": "K_I",
"text": "I"
},
{
"id": "K_O",
"text": "O"
},
{
"id": "K_P",
"text": "P"
}
]
},
{
"id": 2,
"key": [
{
"id": "K_A",
"text": "A",
"pad": 70
},
{
"id": "K_S",
"text": "S"
},
{
"id": "K_D",
"text": "D"
},
{
"id": "K_F",
"text": "F"
},
{
"id": "K_G",
"text": "G"
},
{
"id": "K_H",
"text": "H"
},
{
"id": "K_J",
"text": "J"
},
{
"id": "K_K",
"text": "K"
},
{
"id": "K_L",
"text": "L"
},
{
"id": "T_new_88",
"text": "",
"width": "10",
"sp": "10"
}
]
},
{
"id": 3,
"key": [
{
"id": "K_SHIFT",
"text": "*ShiftedLock*",
"width": "110",
"sp": "2",
"nextlayer": "default"
},
{
"id": "K_Z",
"text": "Z"
},
{
"id": "K_X",
"text": "X"
},
{
"id": "K_C",
"text": "C"
},
{
"id": "K_V",
"text": "V"
},
{
"id": "K_B",
"text": "B"
},
{
"id": "K_N",
"text": "N"
},
{
"id": "K_M",
"text": "M"
},
{
"id": "K_PERIOD",
"text": ".",
"layer": "default",
"sk": [
{
"text": ",",
"id": "K_COMMA",
"layer": "default"
},
{
"text": "!",
"id": "K_1",
"layer": "shift"
},
{
"text": "?",
"id": "K_SLASH",
"layer": "shift"
},
{
"text": "'",
"id": "K_QUOTE",
"layer": "default"
},
{
"text": "\"",
"id": "K_QUOTE",
"layer": "shift"
},
{
"text": "\\",
"id": "K_BKSLASH",
"layer": "default"
},
{
"text": ":",
"id": "K_COLON",
"layer": "shift"
},
{
"text": ";",
"id": "K_COLON",
"layer": "default"
}
]
},
{
"id": "K_BKSP",
"text": "*BkSp*",
"width": "90",
"sp": "1"
}
]
},
{
"id": 4,
"key": [
{
"id": "K_NUMLOCK",
"text": "*123*",
"width": "140",
"sp": "1",
"nextlayer": "numeric"
},
{
"id": "K_LOPT",
"text": "*Menu*",
"width": "120",
"sp": "1"
},
{
"id": "K_SPACE",
"text": "",
"width": "630",
"sp": "0"
},
{
"id": "K_ENTER",
"text": "*Enter*",
"width": "140",
"sp": "1"
}
]
}
]
}
],
"displayUnderlying": false
}
}

View file

@ -0,0 +1,56 @@
c full_caps_3620_3621 generated from template at 2021-12-01 08:45:15
c with name "full_caps_3620_3621"
store(&VERSION) '10.0'
store(&NAME) 'full_caps_3620_3621'
store(&COPYRIGHT) '©'
store(&KEYBOARDVERSION) '1.0'
store(&TARGETS) 'any'
store(&VISUALKEYBOARD) 'full_caps_3620_3621.kvks'
store(&LAYOUTFILE) 'full_caps_3620_3621.keyman-touch-layout'
begin Unicode > use(main)
begin NewContext > use(NewContext)
begin PostKeystroke > use(PostKeystroke)
store(key) [K_A] .. [K_Z] [SHIFT K_A] .. [SHIFT K_Z]
store(out) 'a' .. 'z' 'A' .. 'Z'
store(&CasedKeys) [K_A] .. [K_Z]
store(caps) 'A'..'Z'
store(digit) '0'..'9'
group(NewContext) readonly
c Any time we get a new context, by mouse click, tap,
c cursor movement, new document, etc, we'll try and
c determine the best layer to use
nomatch > use(nextLayer)
group(PostKeystroke) readonly
c this is a heuristic: if we find two+ characters in capitals, leave
c us in shift layer, assuming the user hasn't just switched layer
c themselves. Not sure if this is a good idea!
c if(&layerChanged = "0") if(&layer = 'shift') any(caps) any(caps) > layer('caps') c ??? is this a good idea?
c stay on the numeric layer if we are there already
if(&layerChanged = "0") if(&layer = 'numeric') any(digit) > context
c don't cancel caps lock layer
if(&layer = 'caps') > context
c no other changes, so detect sentence or layer change, as long
c as the user hasn't attempted to change layer themselves
if(&layerChanged = "0") > use(nextLayer)
group(nextLayer) readonly
store(sentencePunctuation) '.?!'
nul > layer('shift')
c note that 'readonly' layers do not need to use 'context' unless there is
c no other content on output of rule (empty output is illegal)
any(sentencePunctuation) ' ' > layer('shift')
any(sentencePunctuation) ' ' > layer('shift')
nomatch > layer('default')
group(main) using keys
+ any(key) > index(out, 1)

View file

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<Package>
<System>
<KeymanDeveloperVersion>15.0.114.0</KeymanDeveloperVersion>
<FileVersion>7.0</FileVersion>
</System>
<Options>
<ExecuteProgram></ExecuteProgram>
<ReadMeFile>readme.htm</ReadMeFile>
<MSIFileName></MSIFileName>
<MSIOptions></MSIOptions>
<FollowKeyboardVersion/>
</Options>
<StartMenu>
<Folder></Folder>
<Items/>
</StartMenu>
<Info>
<Name URL="">full_caps_3620_3621</Name>
<Copyright URL="">©</Copyright>
<Author URL=""></Author>
<Version URL=""></Version>
</Info>
<Files>
<File>
<Name>..\build\full_caps_3620_3621.kmx</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.kmx</FileType>
</File>
<File>
<Name>..\build\full_caps_3620_3621.js</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.js</FileType>
</File>
<File>
<Name>..\build\full_caps_3620_3621.kvk</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.kvk</FileType>
</File>
<File>
<Name>welcome.htm</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
<File>
<Name>readme.htm</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
</Files>
<Keyboards>
<Keyboard>
<Name>full_caps_3620_3621</Name>
<ID>full_caps_3620_3621</ID>
<Version>1.0</Version>
<Languages>
<Language ID="en">English</Language>
</Languages>
</Keyboard>
</Keyboards>
<Strings/>
</Package>

View file

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<visualkeyboard>
<header>
<version>10.0</version>
<kbdname>full_caps_3620_3621</kbdname>
<flags/>
</header>
<encoding name="unicode" fontname="Arial" fontsize="-12">
<layer shift="">
<key vkey="K_BKQUOTE">`</key>
<key vkey="K_1">1</key>
<key vkey="K_2">2</key>
<key vkey="K_3">3</key>
<key vkey="K_4">4</key>
<key vkey="K_5">5</key>
<key vkey="K_6">6</key>
<key vkey="K_7">7</key>
<key vkey="K_8">8</key>
<key vkey="K_9">9</key>
<key vkey="K_0">0</key>
<key vkey="K_HYPHEN">-</key>
<key vkey="K_EQUAL">=</key>
<key vkey="K_Q">q</key>
<key vkey="K_W">w</key>
<key vkey="K_E">e</key>
<key vkey="K_R">r</key>
<key vkey="K_T">t</key>
<key vkey="K_Y">y</key>
<key vkey="K_U">u</key>
<key vkey="K_I">i</key>
<key vkey="K_O">o</key>
<key vkey="K_P">p</key>
<key vkey="K_LBRKT">[</key>
<key vkey="K_RBRKT">]</key>
<key vkey="K_BKSLASH">\</key>
<key vkey="K_A">a</key>
<key vkey="K_S">s</key>
<key vkey="K_D">d</key>
<key vkey="K_F">f</key>
<key vkey="K_G">g</key>
<key vkey="K_H">h</key>
<key vkey="K_J">j</key>
<key vkey="K_K">k</key>
<key vkey="K_L">l</key>
<key vkey="K_COLON">;</key>
<key vkey="K_QUOTE">'</key>
<key vkey="K_oE2">\</key>
<key vkey="K_Z">z</key>
<key vkey="K_X">x</key>
<key vkey="K_C">c</key>
<key vkey="K_V">v</key>
<key vkey="K_B">b</key>
<key vkey="K_N">n</key>
<key vkey="K_M">m</key>
<key vkey="K_COMMA">,</key>
<key vkey="K_PERIOD">.</key>
<key vkey="K_SLASH">/</key>
</layer>
<layer shift="S">
<key vkey="K_BKQUOTE">~</key>
<key vkey="K_1">!</key>
<key vkey="K_2">@</key>
<key vkey="K_3">#</key>
<key vkey="K_4">$</key>
<key vkey="K_5">%</key>
<key vkey="K_6">^</key>
<key vkey="K_7">&amp;</key>
<key vkey="K_8">*</key>
<key vkey="K_9">(</key>
<key vkey="K_0">)</key>
<key vkey="K_HYPHEN">_</key>
<key vkey="K_EQUAL">+</key>
<key vkey="K_Q">Q</key>
<key vkey="K_W">W</key>
<key vkey="K_E">E</key>
<key vkey="K_R">R</key>
<key vkey="K_T">T</key>
<key vkey="K_Y">Y</key>
<key vkey="K_U">U</key>
<key vkey="K_I">I</key>
<key vkey="K_O">O</key>
<key vkey="K_P">P</key>
<key vkey="K_LBRKT">{</key>
<key vkey="K_RBRKT">}</key>
<key vkey="K_BKSLASH">|</key>
<key vkey="K_A">A</key>
<key vkey="K_S">S</key>
<key vkey="K_D">D</key>
<key vkey="K_F">F</key>
<key vkey="K_G">G</key>
<key vkey="K_H">H</key>
<key vkey="K_J">J</key>
<key vkey="K_K">K</key>
<key vkey="K_L">L</key>
<key vkey="K_COLON">:</key>
<key vkey="K_QUOTE">"</key>
<key vkey="K_oE2">|</key>
<key vkey="K_Z">Z</key>
<key vkey="K_X">X</key>
<key vkey="K_C">C</key>
<key vkey="K_V">V</key>
<key vkey="K_B">B</key>
<key vkey="K_N">N</key>
<key vkey="K_M">M</key>
<key vkey="K_COMMA">&lt;</key>
<key vkey="K_PERIOD">&gt;</key>
<key vkey="K_SLASH">?</key>
</layer>
</encoding>
</visualkeyboard>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>full_caps_3620_3621</title>
<style type="text/css">
p { font: 10pt Tahoma; }
h1 { font: bold 16pt Tahoma; color: #4444cc; margin-bottom: 2px }
h2 { font: bold 12pt Tahoma; color: #4444cc; }
</style>
</head>
<body>
<h1>full_caps_3620_3621</h1>
<p>
full_caps_3620_3621 1.0 generated from template.
</p>
<p>©</p>
</body>
</html>

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Start Using full_caps_3620_3621</title>
<style type="text/css">
p { font: 10pt Tahoma; }
h1 { font: bold 16pt Tahoma; color: #4444cc; margin-bottom: 2px }
h2 { font: bold 12pt Tahoma; color: #4444cc; }
</style>
</head>
<body>
<h1>Start Using full_caps_3620_3621</h1>
<p>
full_caps_3620_3621 1.0 generated from template.
</p>
<h1>Keyboard Layout</h1>
<!-- Insert Keyboard Layout Images or HTML here -->
</body>
</html>

View file

@ -0,0 +1 @@
build/

View file

@ -0,0 +1,6 @@
start_of_sentence_3621 Change History
====================
1.0 (2021-11-22)
----------------
* Created by

View file

@ -0,0 +1,21 @@
The MIT License (MIT)
© 2021
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,30 @@
start_of_sentence_3621 keyboard
==============
Version 1.0
Description
-----------
start_of_sentence_3621 generated from template
Links
-----
Copyright
---------
See [LICENSE.md](LICENSE.md)
Supported Platforms
-------------------
* Windows
* macOS
* Linux
* Web
* iPhone
* iPad
* Android phone
* Android tablet
* Mobile devices
* Desktop devices
* Tablet devices

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>start_of_sentence_3621</title>
<style type="text/css">
p { font: 10pt Tahoma; }
h1 { font: bold 16pt Tahoma; color: #4444cc; margin-bottom: 2px }
h2 { font: bold 12pt Tahoma; color: #4444cc; }
</style>
</head>
<body>
<h1>start_of_sentence_3621</h1>
<p>
start_of_sentence_3621 1.0 generated from template.
</p>
<p>©</p>
</body>
</html>

View file

@ -0,0 +1,50 @@
c This keyboard provides a reasonably complete example of
c start-of-sentence detection, for use in testing #3621.
store(&VERSION) '10.0'
store(&NAME) 'start_of_sentence_3621'
store(&COPYRIGHT) '©'
store(&KEYBOARDVERSION) '1.0'
store(&TARGETS) 'any'
store(&VISUALKEYBOARD) 'start_of_sentence_3621.kvks'
store(&LAYOUTFILE) 'start_of_sentence_3621.keyman-touch-layout'
begin Unicode > use(main)
begin NewContext > use(NewContext)
begin PostKeystroke > use(PostKeystroke)
group(NewContext) readonly
c Any time we get a new context, by mouse click, tap,
c cursor movement, new document, etc, we'll try and
c determine the best layer to use
nomatch > use(nextLayer)
group(PostKeystroke) readonly
store(caps) 'A'..'Z'
store(digit) '0'..'9'
c this is a heuristic that we can use until we support a CAPS layer (#3620):
c if we find two+ characters in capitals, leave us in shift layer,
c assuming the user hasn't just switched layer themselves. Once we have a
c proper CAPS layer, we'll get rid of this.
if(&layerChanged = "0") any(caps) any(caps) > context
c stay on the numeric layer if we are there already
if(&layerChanged = "0") if(&layer = 'numeric') any(digit) > context
c no other changes, so detect sentence or layer change, as long
c as the user hasn't attempted to change layer themselves
if(&layerChanged = "0") > use(nextLayer)
group(nextLayer) readonly
store(sentencePunctuation) '.?!'
nul > layer('shift')
c note that 'readonly' layers do not need to use 'context' unless there is
c no other content on output of rule (empty output is illegal)
any(sentencePunctuation) ' ' > layer('shift')
any(sentencePunctuation) ' ' > layer('shift')
nomatch > layer('default')
group(main) using keys

View file

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<Package>
<System>
<KeymanDeveloperVersion>15.0.114.0</KeymanDeveloperVersion>
<FileVersion>7.0</FileVersion>
</System>
<Options>
<ExecuteProgram></ExecuteProgram>
<ReadMeFile>readme.htm</ReadMeFile>
<MSIFileName></MSIFileName>
<MSIOptions></MSIOptions>
<FollowKeyboardVersion/>
</Options>
<StartMenu>
<Folder></Folder>
<Items/>
</StartMenu>
<Info>
<Name URL="">start_of_sentence_3621</Name>
<Copyright URL="">©</Copyright>
<Author URL=""></Author>
<Version URL=""></Version>
</Info>
<Files>
<File>
<Name>..\build\start_of_sentence_3621.kmx</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.kmx</FileType>
</File>
<File>
<Name>..\build\start_of_sentence_3621.js</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.js</FileType>
</File>
<File>
<Name>..\build\start_of_sentence_3621.kvk</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.kvk</FileType>
</File>
<File>
<Name>welcome.htm</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
<File>
<Name>readme.htm</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
</Files>
<Keyboards>
<Keyboard>
<Name>start_of_sentence_3621</Name>
<ID>start_of_sentence_3621</ID>
<Version>1.0</Version>
<Languages>
<Language ID="en">English</Language>
</Languages>
</Keyboard>
</Keyboards>
<Strings/>
</Package>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<visualkeyboard>
<header>
<version>10.0</version>
<kbdname>start_of_sentence_3621</kbdname>
<flags/>
</header>
</visualkeyboard>

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Start Using start_of_sentence_3621</title>
<style type="text/css">
p { font: 10pt Tahoma; }
h1 { font: bold 16pt Tahoma; color: #4444cc; margin-bottom: 2px }
h2 { font: bold 12pt Tahoma; color: #4444cc; }
</style>
</head>
<body>
<h1>Start Using start_of_sentence_3621</h1>
<p>
start_of_sentence_3621 1.0 generated from template.
</p>
<h1>Keyboard Layout</h1>
<!-- Insert Keyboard Layout Images or HTML here -->
</body>
</html>

View file

@ -0,0 +1,7 @@
{
"license": "mit",
"languages": [
"en"
],
"description": "start_of_sentence_3621 generated from template"
}

View file

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="utf-8"?>
<KeymanDeveloperProject>
<Options>
<BuildPath>$PROJECTPATH\build</BuildPath>
<CompilerWarningsAsErrors>True</CompilerWarningsAsErrors>
<WarnDeprecatedCode>True</WarnDeprecatedCode>
<CheckFilenameConventions>True</CheckFilenameConventions>
<ProjectType>keyboard</ProjectType>
</Options>
<Files>
<File>
<ID>id_51d2ccbdcbeeb798d532100b86252a19</ID>
<Filename>start_of_sentence_3621.kmn</Filename>
<Filepath>source\start_of_sentence_3621.kmn</Filepath>
<FileVersion>1.0</FileVersion>
<FileType>.kmn</FileType>
<Details>
<Name>start_of_sentence_3621</Name>
<Copyright>©</Copyright>
</Details>
</File>
<File>
<ID>id_feb278f5f21f5a2c56418aef3d610100</ID>
<Filename>start_of_sentence_3621.kps</Filename>
<Filepath>source\start_of_sentence_3621.kps</Filepath>
<FileVersion></FileVersion>
<FileType>.kps</FileType>
<Details>
<Name>start_of_sentence_3621</Name>
<Copyright>©</Copyright>
</Details>
</File>
<File>
<ID>id_ede98e4633e239f933cbfd1f4e1b766c</ID>
<Filename>HISTORY.md</Filename>
<Filepath>HISTORY.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_53e892b8b41cc4caece1cfd5ef21d6e7</ID>
<Filename>LICENSE.md</Filename>
<Filepath>LICENSE.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_0730bb7c2e8f9ea2438b52e419dd86c9</ID>
<Filename>README.md</Filename>
<Filepath>README.md</Filepath>
<FileVersion></FileVersion>
<FileType>.md</FileType>
</File>
<File>
<ID>id_31c9e544d5ff29ebb5ee3006e39f5624</ID>
<Filename>start_of_sentence_3621.keyboard_info</Filename>
<Filepath>start_of_sentence_3621.keyboard_info</Filepath>
<FileVersion></FileVersion>
<FileType>.keyboard_info</FileType>
</File>
<File>
<ID>id_8b42366ff2333c0b6d85e2d23cf930d7</ID>
<Filename>start_of_sentence_3621.kmx</Filename>
<Filepath>source\..\build\start_of_sentence_3621.kmx</Filepath>
<FileVersion></FileVersion>
<FileType>.kmx</FileType>
<ParentFileID>id_feb278f5f21f5a2c56418aef3d610100</ParentFileID>
</File>
<File>
<ID>id_b0e85ab76446356d09d86b4187efbdad</ID>
<Filename>start_of_sentence_3621.js</Filename>
<Filepath>source\..\build\start_of_sentence_3621.js</Filepath>
<FileVersion></FileVersion>
<FileType>.js</FileType>
<ParentFileID>id_feb278f5f21f5a2c56418aef3d610100</ParentFileID>
</File>
<File>
<ID>id_3659e166ed1a8f97952e727f3a571a88</ID>
<Filename>start_of_sentence_3621.kvk</Filename>
<Filepath>source\..\build\start_of_sentence_3621.kvk</Filepath>
<FileVersion></FileVersion>
<FileType>.kvk</FileType>
<ParentFileID>id_feb278f5f21f5a2c56418aef3d610100</ParentFileID>
</File>
<File>
<ID>id_356e5d149c1e539356d72698c1e401a6</ID>
<Filename>welcome.htm</Filename>
<Filepath>source\welcome.htm</Filepath>
<FileVersion></FileVersion>
<FileType>.htm</FileType>
<ParentFileID>id_feb278f5f21f5a2c56418aef3d610100</ParentFileID>
</File>
<File>
<ID>id_8da344c4cea6f467013357fe099006f5</ID>
<Filename>readme.htm</Filename>
<Filepath>source\readme.htm</Filepath>
<FileVersion></FileVersion>
<FileType>.htm</FileType>
<ParentFileID>id_feb278f5f21f5a2c56418aef3d610100</ParentFileID>
</File>
</Files>
</KeymanDeveloperProject>

View file

@ -91,7 +91,8 @@ cp "$KEYMAN_MODELCOMPILER_ROOT/package-lock.json" "$KEYMAN_WIX_TEMP_MODELCOMPILE
# Yuck! ref: https://github.com/npm/cli/issues/3975#issuecomment-985305678
# ref: https://github.com/npm/cli/issues/2921
# can't use npm uninstall because it depends on @keymanapp/models-types being present!
cat package.json | grep -v "@keymanapp/models-templates" | grep -v "@keymanapp/models-wordbreakers" > package.json || true
cat "$KEYMAN_MODELCOMPILER_ROOT/package.json" | grep -v "@keymanapp/models-templates" | grep -v "@keymanapp/models-wordbreakers" > package.json || true
npm install kmtypes.tgz --production --no-optional
npm install --production --no-optional

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-compiler",
"version": "15.0.177",
"version": "15.0.184",
"lockfileVersion": 2,
"requires": true,
"packages": {

View file

@ -1,6 +1,6 @@
{
"name": "@keymanapp/lexical-model-compiler",
"version": "15.0.177",
"version": "15.0.184",
"description": "Keyman Developer lexical model compiler",
"keywords": [
"keyboard",
@ -37,14 +37,14 @@
"node": ">=12.0.0"
},
"dependencies": {
"@keymanapp/models-types": "^15.0.177",
"@keymanapp/models-types": "^15.0.184",
"commander": "^3.0.0",
"typescript": "^3.8.3",
"xml2js": "^0.4.19"
},
"devDependencies": {
"@keymanapp/models-templates": "^15.0.177",
"@keymanapp/models-wordbreakers": "^15.0.177",
"@keymanapp/models-templates": "^15.0.184",
"@keymanapp/models-wordbreakers": "^15.0.184",
"@types/chai": "^4.1.7",
"@types/mocha": "^5.2.7",
"@types/node": "^10.14.6",

View file

@ -6,15 +6,14 @@ On Linux, you can build the following projects:
* [Keyman for Linux](#keyman-for-linux)
* [Keyman Core](#keyman-core) (Linux only) (aka common/core/desktop)
The following projects **cannot** be built on Linux because of outdated dependencies:
<!-- TODO: can we build Android, Web, Core-Wasm and Common/Web on Linux? -->
<!-- TODO: document how to build for Android, Web, Core-Wasm and Common/Web on Linux. See TC build agent for details. -->
* Keyman for Android
* Keyman Core (wasm targets)
* Common/Web (aka common/core/web)
* KeymanWeb
The following projects **cannot** be built on Linux:
* Keyman for Windows
* Keyman Developer
* Keyman for macOS
@ -46,7 +45,7 @@ They are most easily installed with the `mk-build-deps` tool:
```bash
sudo apt update
sudo apt install devscripts
sudo apt install devscripts equivs
sudo mk-build-deps --install linux/debian/control
```

6
docs/build/macos.md vendored
View file

@ -55,6 +55,12 @@ These dependencies are also listed below if you'd prefer to install manually.
brew install bash jq python3 meson ninja rustup-init coreutils pandoc rustup-init
```
On M1 only (as greadlink is not on the path otherwise in XCode):
```shell
sudo ln -s /opt/homebrew/bin/greadlink /usr/local/bin/greadlink
```
* Web: node.js, emscripten, wasm-pack, openjdk 8
```shell

View file

@ -1058,8 +1058,8 @@
C06D37271F81F4E100F61AE0 /* Frameworks */,
C06D37281F81F4E100F61AE0 /* Headers */,
C06D37291F81F4E100F61AE0 /* Resources */,
CEC0C66F2410B005003E1BCD /* ShellScript */,
CE880430247F6EB6009BCA1A /* ShellScript */,
CEC0C66F2410B005003E1BCD /* Run Script - upload dsyms to Sentry */,
CE880430247F6EB6009BCA1A /* Run Script - set bundle versions */,
);
buildRules = (
);
@ -1306,7 +1306,7 @@
shellPath = /bin/sh;
shellScript = "#if which swiftlint >/dev/null; then\n# swiftlint --config ../../.swiftlint.yml\n#else\n# echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\n#fi\n";
};
CE880430247F6EB6009BCA1A /* ShellScript */ = {
CE880430247F6EB6009BCA1A /* Run Script - set bundle versions */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@ -1315,16 +1315,17 @@
);
inputPaths = (
);
name = "Run Script - set bundle versions";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellPath = "/usr/bin/env bash";
shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n. \"$KEYMAN_ROOT/resources/build/xcode-utils.sh\"\n\nphaseSetBundleVersions true\n";
showEnvVarsInLog = 0;
};
CEC0C66F2410B005003E1BCD /* ShellScript */ = {
CEC0C66F2410B005003E1BCD /* Run Script - upload dsyms to Sentry */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@ -1334,12 +1335,13 @@
inputPaths = (
"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}",
);
name = "Run Script - upload dsyms to Sentry";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellPath = "/usr/bin/env bash";
shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n. \"$KEYMAN_ROOT/resources/build/xcode-utils.sh\"\n\nif [ ${UPLOAD_SENTRY:-false} = true ]; then\n # Calls resource script to perform the dSYM upload\n phaseSentryDsymUpload \"keyman-ios\"\nfi\n";
showEnvVarsInLog = 0;
};

View file

@ -0,0 +1,2 @@
/* Class = "UILabel"; text = "Scan this code to load this keyboard on another device"; ObjectID = "z2O-MT-IoV"; */
"z2O-MT-IoV.text" = "Ka gǝ skan kod ǝni akuya ka gǝ vu kibod akwa devais damwa";

View file

@ -0,0 +1,2 @@
/* Class = "UILabel"; text = "Scan this code to load this keyboard on another device"; ObjectID = "z2O-MT-IoV"; */
"z2O-MT-IoV.text" = "Afklat t fota nana code na guka klaft tana keyboard taghan unda sakwiɗi";

View file

@ -0,0 +1,2 @@
/* Class = "UILabel"; text = "Scan this code to load this keyboard on another device"; ObjectID = "z2O-MT-IoV"; */
"z2O-MT-IoV.text" = "Kuga iu scan nur code ga fia keyboard arkra su nagum";

View file

@ -0,0 +1,254 @@
/* A descriptive message used for errors when the app is already busy downloading */
"alert-download-error-busy" = "Tsu ata kǝra downloading.";
/* A descriptive message used when a download fails */
"alert-download-error-detail" = "Su kura kal kal ʻya sakatu ata kǝra download ko vu su alukwa.";
/* Title for a "download failed" alert */
"alert-download-error-title" = "Su ʻya sakar download kura kal kal";
/* Title for a general alert about errors */
"alert-error-title" = "Su adai kura kal kal";
/* A descriptive message used when no internet connection is detected */
"alert-no-connection-detail" = "Adi ɓui ka tsǝbti Keyman server wɛ. Usɛ dzakti nkǝrti kadawm aɦǝla saka nkiɗu laka.";
/* Title for a "no connection" alert */
"alert-no-connection-title" = "Su kura kal kal ʻya akwa sakar connection";
/* Short text for a 'back' navigational command. Used to return to the previous screen */
"command-back" = "Mwari tubwa hi";
/* Short text for a 'cancel' command. Used to back out of a menu or install process without making changes */
"command-cancel" = "Kansǝl";
/* Short text for a 'done' command. Used to back out of settings menus after changes have been made */
"command-done" = "Kurai ʻyati";
/* Short text for an 'install' command. Used to confirm installation of a package. */
"command-install" = "Vu ko hau";
/* Short text for a 'next' navigational command. Used to advance to the next screen */
"command-next" = "Lǝkǝma";
/* Short text for an 'OK' command. Used for some error alerts */
"command-ok" = "Kal kal";
/* Short text for confirmining 'uninstall' commands. */
"command-uninstall" = "Faba ka kǝlba";
/* Text for the command to uninstall a keyboard */
"command-uninstall-keyboard" = "Kǝlba ka ɗalba kibod";
/* Confirmation text to display before uninstalling a keyboard */
"command-uninstall-keyboard-confirm" = "Gada bara ka kǝlba ka ɗalba kibod ǝni ya?";
/* Text for the command to uninstall a lexical model */
"command-uninstall-lexical-model" = "Kǝlba ka ɗalba dictionary";
/* Confirmation text to display before uninstalling a lexical model */
"command-uninstall-lexical-model-confirm" = "Gada bara ka kǝlba ka ɗalba dictionary ǝni ya?";
/* Text for error when a keyboard cannot load properly */
"error-loading-keyboard" = "Ta mǝzi ka vu ko hau kibod namtǝ gǝ yuwɛ wɛ";
/* Text for error when a lexical model cannot load properly */
"error-loading-lexical-model" = "Ta mǝzi ka vu ko hau dictionary namtǝ gǝ yuwɛ wɛ";
/* Text for error when an installed file is unexpectedly missing */
"error-missing-file" = "Fail namtǝ ndada bara adi ɓuidzi wɛ.";
/* Text for error when an installed file is unexpectedly missing */
"error-missing-file-critical" = "Fal laka nǝr ampani adi ɓuidzi wɛ ko ndǝ bara ka shang. Usɛ ɓǝla nkǝrti vu appari.";
/* Text for errors in data received from search queries */
"error-query-decoding" = "Serveri aka damicinidzi lakayere tubwar naurayere kulini";
/* A descriptive message used when a download fails */
"error-query-general" = "Su kura kal kal ata kǝra ʻya akwa kwa kwaliyir ndǝrɛ aka server";
/* Text for error when a search query is unexpectedly empty */
"error-query-no-data" = "Server adi ɓui ka na ndɛ amsa wɛ";
/* Text for general errors where not much information is known */
"error-unknown" = "Laifi laka kura ndǝta tǝmacini ku ʻya ko wakacini";
/* Text for error when updating a resource: cannot download because no source is available */
"error-update-no-link" = "Sǝr tsanti nǝr updateyere adiwɛ kadǝbar package ǝni";
/* Text for error when updating a resource: Keyman does not know how to update the resource */
"error-update-not-managed" = "Adiyata mǝzi update kariyere namtǝ engine nǝr Keyman adiyada manage wɛ";
/* Text for the command to open the help page of a keyboard, as shown on resource information views */
"info-command-help-keyboard" = "Dlarɛ nǝr kibod";
/* Text for the command to open the help page of a lexical model, as shown on resource information views */
"info-command-help-lexical-model" = "Dlarɛ nǝr dictionary";
/* Text label for displaying a keyboard's version, as shown on resource information views */
"info-label-version-keyboard" = "Vershon nǝr kibod";
/* Text label for displaying a lexical model's version, as shown on resource information views */
"info-label-version-lexical-model" = "Jiliyir dictionary";
/* Label used for the "package info" / readme tab with the package installation prompt on phones. */
"installer-label-package-info" = "Sǝr zǝndi ata kǝra package";
/* Label used for the language-selection tab with the package installation prompt on phones. */
"installer-label-select-languages" = "Tsarba Nya(yere)";
/* Label used with a package's version, as seen within the package installation prompt. Example: "Version: 14.0.0" */
"installer-label-version" = "Jili: %@";
/* Section header for languages supported by a package, as seen within the package installation prompt */
"installer-section-available-languages" = "Nyayere Nam Adai";
/* Text for the help popup for changing keyboards with the globe key */
"keyboard-help-change" = "Ntsani vi ǝni akuya ka gǝ pali kibod";
/* Text for the command to exit the Keyman keyboard in favor of other keyboards installed on the system */
"keyboard-menu-exit" = "Harti %@";
/* Error installing a Keyman package - could not allocate a location to install it */
"kmp-error-file-system" = "Su kura kal kal ʻya sakar vu package - su kura kal kal akwa file-system";
/* Error installing a Keyman package - could not copy package files */
"kmp-error-file-copying" = "Ada tsanti su kura kal kal sakar vu su - adi ɓui ka kopuba failyere nam kal kal wɛ";
/* Error opening a Keyman package - package is not valid */
"kmp-error-invalid" = "Package nǝr failari suwatǝdzi.";
/* Error opening a Keyman package - it does not exist / the specified location is wrong */
"kmp-error-missing" = "Pakeji ǝni musaman adi saga buidzi wɛ.";
/* Error installing a Keyman package - expected resource (keyboard or dictionary) is missing */
"kmp-error-missing-resource" = "Package ǝni adiyaka kibod ko dictionary namtǝ gǝ yuwɛ wɛ.";
/* Error opening a Keyman package - cannot parse contents */
"kmp-error-no-metadata" = "Package ǝni ndadi tsati tǝni kal kal wɛ - suyere nam akwa ndadi zǝndi wɛ.";
/* Error opening a Keyman package - package's contents are for desktop platforms only */
"kmp-error-unsupported" = "Jili pakeji ǝni adi aka sǝr dlarɛ ala divaisǝr ngɛ wɛ.";
/* Error opening a Keyman package - package contains unexpected resource (keyboard or dictionary) type */
"kmp-error-wrong-type" = "Package ǝni adiyaka jili su namtǝ ndǝ tǝmacini wɛ.";
/* Title for the Installed Languages menu */
"menu-installed-languages-title" = "Nyayere Namtǝ Ndǝ Vu ko hau";
/* Section header for lexical models within a language-specific settings menu */
"menu-langsettings-label-lexical-models" = "Dictionariyere";
/* Section header for keyboards within a language-specific settings menu */
"menu-langsettings-section-keyboards" = "Kibodyere";
/* Section header for the settings toggles within a language-specific settings menu */
"menu-langsettings-section-settings" = "Settingyere nǝr Nyayere";
/* Title for the language-specific settings menus */
"menu-langsettings-title" = "%@ Settingyere";
/* Label for the toggle that enables corrections that is displayed within a language-specific settings menu */
"menu-langsettings-toggle-correct" = "Enable corrections";
/* Label for the toggle that enables predictions that is displayed within a language-specific settings menu */
"menu-langsettings-toggle-predict" = "Enable predictions";
/* Help message for a prompt that appears for confirming a lexical model download: language (1): lexical model (dictionary) name (2) */
"menu-lexical-model-install-message" = "Gada bara ka vu ko hau dictionary ǝni ya?";
/* Title for a prompt that appears for confirming a lexical model download: language (1): lexical model (dictionary) name (2) */
"menu-lexical-model-install-title" = "%1$@: %2$@";
/* Text for an info alert indicating that no lexical models are available */
"menu-lexical-model-none-message" = "Dictionariyere adiyakwani wɛ";
/* Title for the lexical model menu, a submenu of the language-specific settings menus */
"menu-lexical-model-title" = "%@ Dictionariyere";
/* Title for the keyboard picker */
"menu-picker-title" = "Kibodyere";
/* Primary text for the Settings menu option to report keyboard crashes */
"menu-settings-error-report" = "Gyar ka dzǝ rupotu kura kal kalǝr su";
/* Secondary text for the Settings menu option to report keyboard crashes */
"menu-settings-error-report-description" = "Ata bara \"ɓuidzǝr lukwar su shang shang\"";
/* Primary text for the Settings menu local-file package installation option */
"menu-settings-install-from-file" = "Vu ko Hau Tubwar File";
/* Secondary text for the Settings menu local-file package installation option */
"menu-settings-install-from-file-description" = "Braus ala .kmp files";
/* Primary text for the Settings menu option that displays the iOS system menu options for the app's keyboard */
"menu-settings-system-keyboard-menu" = "Settingyere nǝr System Kibod";
/* Label for the "Show Banner" toggle on the main settings screen */
"menu-settings-show-banner" = "Tsanti Banner";
/* Label for the "Get Started" automatic display toggle seen in the Settings menu */
"menu-settings-startup-get-started" = "Tsanti 'Badicini Kǝthlǝr' ata mburntar kǝthlǝr";
/* Title for the main Settings menu */
"menu-settings-title" = "Settingyere nǝr Keyman";
/* Secondary text showing current setting for spacebar caption - blank */
"menu-settings-spacebar-hint-blank" = "Ta gǝta tsanti kapshion ko spesba";
/* Secondary text showing current setting for spacebar caption - keyboard */
"menu-settings-spacebar-hint-keyboard" = "Tsanti thlǝma kibod ata spesba";
/* Secondary text showing current setting for spacebar caption - language */
"menu-settings-spacebar-hint-language" = "Tsanti thlǝma nya ata spesba";
/* Secondary text showing current setting for spacebar caption - language + keyboard */
"menu-settings-spacebar-hint-languageKeyboard" = "Tsanti nya ba kibod ata spesba";
/* Label for the "Spacebar Caption" item on the main settings screen */
"menu-settings-spacebar-text" = "Kapshion nǝr spesba";
/* Title for the "Spacebar Caption" settings screen */
"menu-settings-spacebar-title" = "Kapshion nǝr spesba";
/* Text showing name of spacebar caption - blank */
"menu-settings-spacebar-item-blank" = "Kuraka rubwa akwa";
/* Text showing name of spacebar caption - keyboard */
"menu-settings-spacebar-item-keyboard" = "Kibod";
/* Text showing name of spacebar caption - language */
"menu-settings-spacebar-item-language" = "Nya";
/* Text showing name of spacebar caption - language + keyboard */
"menu-settings-spacebar-item-languageKeyboard" = "Nya ba kibod";
/* Short text for notification: download failure for keyboard */
"notification-download-failure-keyboard" = "Download nǝr Keyman ta ʻya wɛ";
/* Short text for notification: download failure for lexical model */
"notification-download-failure-lexical-model" = "Dictionary download ta ʻya wɛ";
/* Short text for notification: download success for keyboard */
"notification-download-success-keyboard" = "Ndǝ sǝgǝl aka kibod kura bwanai";
/* Short text for notification: download success for lexical model */
"notification-download-success-lexical-model" = "Ndǝ sǝgǝl aka lexical model kuraka bwanai";
/* Short text for notification: downloading a keyboard */
"notification-downloading-keyboard" = "Ata kǝra download kibod\U2026";
/* Short text for notification: downloading a lexical model */
"notification-downloading-lexical-model" = "Ata kǝra download dictionary\U2026";
/* Short text for notification: an update is available */
"notification-update-available" = "Update Adai";
/* Short text for notification: currently updating */
"notification-update-processing" = "Ata kǝra ʻya updating\U2026";
/* Text indicating success at installing new keyboards or dictionaries */
"success-install" = "Vudzi kuraka bwanai.";
/* A title to use in alerts indicating 'success' at whatever task the user requested */
"success-title" = "ʻYatǝdzi";

View file

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>menu-langsettings-lexical-model-count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>%u ndǝ vu ko hau dictionary</string>
<key>other</key>
<string>%u ndǝ vu ko hau dictionariyere</string>
</dict>
</dict>
<key>notification-update-failed</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>%u update adi ʻya wɛ</string>
<key>other</key>
<string>%u updateyere ada ʻya wɛ</string>
</dict>
</dict>
<key>notification-update-success</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>%u update ku ʻya</string>
<key>other</key>
<string>%u updateyere ku ʻyatǝdzi</string>
</dict>
</dict>
<key>settings-keyboards-installed-count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>%u ndǝ vu ko hau kibod</string>
<key>other</key>
<string>%u ndǝ vu ko hau kibodyere</string>
</dict>
</dict>
<key>settings-languages-installed-count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>%u ndǝ vu nya akwa</string>
<key>other</key>
<string>%u ndǝ vu nyayere akwa</string>
</dict>
</dict>
<key>package-default-found-keyboards</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>Bui %u kibod akwa package:</string>
<key>other</key>
<string>Ɓui %u kibodyere akwa package:</string>
</dict>
</dict>
<key>package-default-found-lexical-models</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>Ɓui %u dictionary akwa package:</string>
<key>other</key>
<string>Ɓui %u dictionariyere akwa package:</string>
</dict>
</dict>
</dict>
</plist>

View file

@ -0,0 +1,254 @@
/* A descriptive message used for errors when the app is already busy downloading */
"alert-download-error-busy" = "Tun daga ghalaya t kal sukweɗe.";
/* A descriptive message used when a download fails */
"alert-download-error-detail" = "Haha ina magavata sirta kal sikweɗe ko fanta.";
/* Title for a "download failed" alert */
"alert-download-error-title" = "Kuskure magalo sarta kal sukweɗe";
/* Title for a general alert about errors */
"alert-error-title" = "Kuskure";
/* A descriptive message used when no internet connection is detected */
"alert-no-connection-detail" = "Da kusataka t Keyman server. Gamsa antika guleng t kima.";
/* Title for a "no connection" alert */
"alert-no-connection-title" = "Haha kuskura njagwata";
/* Short text for a 'back' navigational command. Used to return to the previous screen */
"command-back" = "Uhili";
/* Short text for a 'cancel' command. Used to back out of a menu or install process without making changes */
"command-cancel" = "Jata";
/* Short text for a 'done' command. Used to back out of settings menus after changes have been made */
"command-done" = "Kukuɗa";
/* Short text for an 'install' command. Used to confirm installation of a package. */
"command-install" = "Fanta";
/* Short text for a 'next' navigational command. Used to advance to the next screen */
"command-next" = "Unda siɗi";
/* Short text for an 'OK' command. Used for some error alerts */
"command-ok" = "Toh";
/* Short text for confirmining 'uninstall' commands. */
"command-uninstall" = "Fan bolwo";
/* Text for the command to uninstall a keyboard */
"command-uninstall-keyboard" = "Fan bol t keyboard nganawo";
/* Confirmation text to display before uninstalling a keyboard */
"command-uninstall-keyboard-confirm" = "Haka ɗow ka fan tana keyboard nure?";
/* Text for the command to uninstall a lexical model */
"command-uninstall-lexical-model" = "Fan bol t dictionary wo";
/* Confirmation text to display before uninstalling a lexical model */
"command-uninstall-lexical-model-confirm" = "Haka ɗow fan tana dictionary nure?";
/* Text for error when a keyboard cannot load properly */
"error-loading-keyboard" = "Ha da wawata klaft keyboard unda ɗowal wo";
/* Text for error when a lexical model cannot load properly */
"error-loading-lexical-model" = "Ha da wawata klaft dictionary unda ɗowal wo";
/* Text for error when an installed file is unexpectedly missing */
"error-missing-file" = "File unda ɗowal na javabolwo.";
/* Text for error when an installed file is unexpectedly missing */
"error-missing-file-critical" = "File unda bla na java bolwo. Gamsa avira tikan tina fanta ngana.";
/* Text for errors in data received from search queries */
"error-query-decoding" = "Server ngana ɗakanana haha ina kol ɗughwana amndiya]";
/* A descriptive message used when a download fails */
"error-query-general" = "Haha kuskura kor gwaɗa nda server";
/* Text for error when a search query is unexpectedly empty */
"error-query-no-data" = "Server ngana na ha mog thlina wo";
/* Text for general errors where not much information is known */
"error-unknown" = "Kuskure kol sinantal faravata";
/* Text for error when updating a resource: cannot download because no source is available */
"error-update-no-link" = "Ha inunda nighangal da maran tinunda sa magawo anga nana package nawo";
/* Text for error when updating a resource: Keyman does not know how to update the resource */
"error-update-not-managed" = "Ha da javat tinahunda sa magal ghalayawo kol magatal nda keyman engine wo";
/* Text for the command to open the help page of a keyboard, as shown on resource information views */
"info-command-help-keyboard" = "Keyboard unda t tamoko";
/* Text for the command to open the help page of a lexical model, as shown on resource information views */
"info-command-help-lexical-model" = "Dictionary tamoko";
/* Text label for displaying a keyboard's version, as shown on resource information views */
"info-label-version-keyboard" = "Sangabt keyboard";
/* Text label for displaying a lexical model's version, as shown on resource information views */
"info-label-version-lexical-model" = "Sangabt dictionary";
/* Label used for the "package info" / readme tab with the package installation prompt on phones. */
"installer-label-package-info" = "Package Info";
/* Label used for the language-selection tab with the package installation prompt on phones. */
"installer-label-select-languages" = "Klabt gwaɗa luwaha";
/* Label used with a package's version, as seen within the package installation prompt. Example: "Version: 14.0.0" */
"installer-label-version" = "Sangabt: %@";
/* Section header for languages supported by a package, as seen within the package installation prompt */
"installer-section-available-languages" = "Gwaɗaha luwunda hahaɗe";
/* Text for the help popup for changing keyboards with the globe key */
"keyboard-help-change" = "Aff fa jiv ahdina ka mbiɗat keyboard";
/* Text for the command to exit the Keyman keyboard in favor of other keyboards installed on the system */
"keyboard-menu-exit" = "Funta %@";
/* Error installing a Keyman package - could not allocate a location to install it */
"kmp-error-file-system" = "Kuskura fant package - file - system kuskure";
/* Error installing a Keyman package - could not copy package files */
"kmp-error-file-copying" = "Kuskura fant package - klafba t files unda ɗowal wo";
/* Error opening a Keyman package - package is not valid */
"kmp-error-invalid" = "Package's file na ɗughwan buwo.";
/* Error opening a Keyman package - it does not exist / the specified location is wrong */
"kmp-error-missing" = "Inunda sinaglo package haɗuwo ha mog thlinawo.";
/* Error installing a Keyman package - expected resource (keyboard or dictionary) is missing */
"kmp-error-missing-resource" = "Nana package nana haɗ nda keyboard unda ɗowal wo ko dictionary.";
/* Error opening a Keyman package - cannot parse contents */
"kmp-error-no-metadata" = "Nana package nana babol ɗughwanawo - contents sinanbolwo.";
/* Error opening a Keyman package - package's contents are for desktop platforms only */
"kmp-error-unsupported" = "Nana package nana haɗ ta fanast jiv t device ghahaghuwo.";
/* Error opening a Keyman package - package contains unexpected resource (keyboard or dictionary) type */
"kmp-error-wrong-type" = "Nana package nana haɗ nda inahunda ɗowal wo.";
/* Title for the Installed Languages menu */
"menu-installed-languages-title" = "Gwaɗaha luwunda fanlo";
/* Section header for lexical models within a language-specific settings menu */
"menu-langsettings-label-lexical-models" = "Dictionaries";
/* Section header for keyboards within a language-specific settings menu */
"menu-langsettings-section-keyboards" = "Keyboards";
/* Section header for the settings toggles within a language-specific settings menu */
"menu-langsettings-section-settings" = "Language Settings";
/* Title for the language-specific settings menus */
"menu-langsettings-title" = "%@ Settings";
/* Label for the toggle that enables corrections that is displayed within a language-specific settings menu */
"menu-langsettings-toggle-correct" = "Magaghva kuskure";
/* Label for the toggle that enables predictions that is displayed within a language-specific settings menu */
"menu-langsettings-toggle-predict" = "Magaghva predictions";
/* Help message for a prompt that appears for confirming a lexical model download: language (1): lexical model (dictionary) name (2) */
"menu-lexical-model-install-message" = "Ɗowka ka fant tana dictionary na re?";
/* Title for a prompt that appears for confirming a lexical model download: language (1): lexical model (dictionary) name (2) */
"menu-lexical-model-install-title" = "%1$@: %2$@";
/* Text for an info alert indicating that no lexical models are available */
"menu-lexical-model-none-message" = "Haɗ dictionaries wo";
/* Title for the lexical model menu, a submenu of the language-specific settings menus */
"menu-lexical-model-title" = "%@ Dictionaries";
/* Title for the keyboard picker */
"menu-picker-title" = "Keyboards";
/* Primary text for the Settings menu option to report keyboard crashes */
"menu-settings-error-report" = "Avathla kor t kuskure";
/* Secondary text for the Settings menu option to report keyboard crashes */
"menu-settings-error-report-description" = "Ma da ɗowt \"wativ sosaya\"";
/* Primary text for the Settings menu local-file package installation option */
"menu-settings-install-from-file" = "Fanta avla File";
/* Secondary text for the Settings menu local-file package installation option */
"menu-settings-install-from-file-description" = "Browse anga .kmp files";
/* Primary text for the Settings menu option that displays the iOS system menu options for the app's keyboard */
"menu-settings-system-keyboard-menu" = "System Keyboard Settings";
/* Label for the "Show Banner" toggle on the main settings screen */
"menu-settings-show-banner" = "Marant Banner";
/* Label for the "Get Started" automatic display toggle seen in the Settings menu */
"menu-settings-startup-get-started" = "Marant 'A fuɗa' t startup";
/* Title for the main Settings menu */
"menu-settings-title" = "Keyman Settings";
/* Secondary text showing current setting for spacebar caption - blank */
"menu-settings-spacebar-hint-blank" = "Eh marantaka t caption taghan spacebar";
/* Secondary text showing current setting for spacebar caption - keyboard */
"menu-settings-spacebar-hint-keyboard" = "Marant keyboard zirin taghan spacebar";
/* Secondary text showing current setting for spacebar caption - language */
"menu-settings-spacebar-hint-language" = "Marant gwaɗa luwa taghan spacebar";
/* Secondary text showing current setting for spacebar caption - language + keyboard */
"menu-settings-spacebar-hint-languageKeyboard" = "Marant gwaɗa luwa nda keyboard zirini taghan spacebar";
/* Label for the "Spacebar Caption" item on the main settings screen */
"menu-settings-spacebar-text" = "Spacebar Caption";
/* Title for the "Spacebar Caption" settings screen */
"menu-settings-spacebar-title" = "Spacebar Caption";
/* Text showing name of spacebar caption - blank */
"menu-settings-spacebar-item-blank" = "Ha konuwo";
/* Text showing name of spacebar caption - keyboard */
"menu-settings-spacebar-item-keyboard" = "Keyboard";
/* Text showing name of spacebar caption - language */
"menu-settings-spacebar-item-language" = "Gwaɗa luwa";
/* Text showing name of spacebar caption - language + keyboard */
"menu-settings-spacebar-item-languageKeyboard" = "Gwaɗa luwa nda keyboard";
/* Short text for notification: download failure for keyboard */
"notification-download-failure-keyboard" = "Keyboard sangatana kalavukala";
/* Short text for notification: download failure for lexical model */
"notification-download-failure-lexical-model" = "Kalavukala k sangat dictionary";
/* Short text for notification: download success for keyboard */
"notification-download-success-keyboard" = "Keyboard na sangasal ɗughwana";
/* Short text for notification: download success for lexical model */
"notification-download-success-lexical-model" = "Lexical model sangasal ɗughwana";
/* Short text for notification: downloading a keyboard */
"notification-downloading-keyboard" = "Sangat keyboard\U2026";
/* Short text for notification: downloading a lexical model */
"notification-downloading-lexical-model" = "Sangat dictionary\U2026";
/* Short text for notification: an update is available */
"notification-update-available" = "Update hahaɗe";
/* Short text for notification: currently updating */
"notification-update-processing" = "Updating\U2026";
/* Text indicating success at installing new keyboards or dictionaries */
"success-install" = "Fanfal ɗughwana.";
/* A title to use in alerts indicating 'success' at whatever task the user requested */
"success-title" = "Magat saʻa";

View file

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>menu-langsettings-lexical-model-count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>zero</key>
<string>%uDictionary fan falo</string>
<key>one</key>
<string>%u dictionary fan falo</string>
<key>other</key>
<string>%u dictionary fan lo</string>
</dict>
</dict>
<key>notification-update-failed</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>zero</key>
<string>%u update kalavukala</string>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>%u update kalavukala</string>
<key>other</key>
<string>%u update kalavukala</string>
</dict>
</dict>
<key>notification-update-success</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>zero</key>
<string>%u update kalavukala</string>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>%u update kalavukala</string>
<key>other</key>
<string>%u update kalavukala</string>
</dict>
</dict>
<key>settings-keyboards-installed-count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>zero</key>
<string>%u keyboard fanfalo</string>
<key>one</key>
<string>%u keyboard fanfalo</string>
<key>other</key>
<string>%u keyboard fan falo</string>
</dict>
</dict>
<key>settings-languages-installed-count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>zero</key>
<string>%u gwaɗa luwa falo</string>
<key>one</key>
<string>%u gwaɗa luwa fanfalo</string>
<key>other</key>
<string>%u gwaɗa luwa fanfalo</string>
</dict>
</dict>
<key>package-default-found-keyboards</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>zero</key>
<string>Javat %u keyboard an package:</string>
<key>one</key>
<string>Javat %u keyboard an package:</string>
<key>other</key>
<string>Javat %u keyboard an package:</string>
</dict>
</dict>
<key>package-default-found-lexical-models</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>zero</key>
<string>Javat %u dictionary in package:</string>
<key>one</key>
<string>Javat %u dictionary an package:</string>
<key>other</key>
<string>Javat %u dictionary an package:</string>
</dict>
</dict>
</dict>
</plist>

View file

@ -0,0 +1,254 @@
/* A descriptive message used for errors when the app is already busy downloading */
"alert-download-error-busy" = "Mji vur iu downloading.";
/* A descriptive message used when a download fails */
"alert-download-error-detail" = "Error a irkir latur download akiya mai installation.";
/* Title for a "download failed" alert */
"alert-download-error-title" = "Download error";
/* Title for a general alert about errors */
"alert-error-title" = "Error";
/* A descriptive message used when no internet connection is detected */
"alert-no-connection-detail" = "Acittu thlana Keyman server mai. Manki ngilaba sikari.";
/* Title for a "no connection" alert */
"alert-no-connection-title" = "Connection Error";
/* Short text for a 'back' navigational command. Used to return to the previous screen */
"command-back" = "Yikuɗu";
/* Short text for a 'cancel' command. Used to back out of a menu or install process without making changes */
"command-cancel" = "Kukulna";
/* Short text for a 'done' command. Used to back out of settings menus after changes have been made */
"command-done" = "Akuɗiri";
/* Short text for an 'install' command. Used to confirm installation of a package. */
"command-install" = "Install";
/* Short text for a 'next' navigational command. Used to advance to the next screen */
"command-next" = "Nagum";
/* Short text for an 'OK' command. Used for some error alerts */
"command-ok" = "OK";
/* Short text for confirmining 'uninstall' commands. */
"command-uninstall" = "Uninstall";
/* Text for the command to uninstall a keyboard */
"command-uninstall-keyboard" = "Uninstall keyboard";
/* Confirmation text to display before uninstalling a keyboard */
"command-uninstall-keyboard-confirm" = "Nagu ayu ga uninstall nur keyboard ya?";
/* Text for the command to uninstall a lexical model */
"command-uninstall-lexical-model" = "Uninstall dictionary";
/* Confirmation text to display before uninstalling a lexical model */
"command-uninstall-lexical-model-confirm" = "Nagu ayu ga uninstall nur dictionary ya?";
/* Text for error when a keyboard cannot load properly */
"error-loading-keyboard" = "Acitu iu lodi nur keyboard dun mji vur ngu mai";
/* Text for error when a lexical model cannot load properly */
"error-loading-lexical-model" = "Acitu iu lodi nur dictionary mji vur ngu";
/* Text for error when an installed file is unexpectedly missing */
"error-missing-file" = "Mji acittu thlia file nagum mai.";
/* Text for error when an installed file is unexpectedly missing */
"error-missing-file-critical" = "Critical file mji a lari mai. Manki bura fia app.";
/* Text for errors in data received from search queries */
"error-query-decoding" = "Server ari naja vur thlia bone nur iu thlir duri";
/* A descriptive message used when a download fails */
"error-query-general" = "Error nur ndir aga server";
/* Text for error when a search query is unexpectedly empty */
"error-query-no-data" = "Server ari naja vur ndir mai";
/* Text for general errors where not much information is known */
"error-unknown" = "Error nagum a irkir";
/* Text for error when updating a resource: cannot download because no source is available */
"error-update-no-link" = "Lagu a'i mai nur su bilin anu package ku";
/* Text for error when updating a resource: Keyman does not know how to update the resource */
"error-update-not-managed" = "Acittu fia su bilin kuku Keyman vur iu thlir arkra";
/* Text for the command to open the help page of a keyboard, as shown on resource information views */
"info-command-help-keyboard" = "Ɓa nur Keyboard";
/* Text for the command to open the help page of a lexical model, as shown on resource information views */
"info-command-help-lexical-model" = "Ɓa nur Dictionary";
/* Text label for displaying a keyboard's version, as shown on resource information views */
"info-label-version-keyboard" = "Version nur Keyboard";
/* Text label for displaying a lexical model's version, as shown on resource information views */
"info-label-version-lexical-model" = "Version nur Dictionary";
/* Label used for the "package info" / readme tab with the package installation prompt on phones. */
"installer-label-package-info" = "Labar nur Package";
/* Label used for the language-selection tab with the package installation prompt on phones. */
"installer-label-select-languages" = "Caɗu Ŋya ari (yer)";
/* Label used with a package's version, as seen within the package installation prompt. Example: "Version: 14.0.0" */
"installer-label-version" = "Version: %@";
/* Section header for languages supported by a package, as seen within the package installation prompt */
"installer-section-available-languages" = "Ŋya kuku aʻi";
/* Text for the help popup for changing keyboards with the globe key */
"keyboard-help-change" = "Ncina uvun ga pubila keyboard";
/* Text for the command to exit the Keyman keyboard in favor of other keyboards installed on the system */
"keyboard-menu-exit" = "Ghaɗu %@";
/* Error installing a Keyman package - could not allocate a location to install it */
"kmp-error-file-system" = "Error nur fia package - error nur file-system";
/* Error installing a Keyman package - could not copy package files */
"kmp-error-file-copying" = "Errror nur fu package - acittu huri jili file mai";
/* Error opening a Keyman package - package is not valid */
"kmp-error-invalid" = "Package file a mdzu.";
/* Error opening a Keyman package - it does not exist / the specified location is wrong */
"kmp-error-missing" = "Jili package ku a'i mai.";
/* Error installing a Keyman package - expected resource (keyboard or dictionary) is missing */
"kmp-error-missing-resource" = "Package ku naja aga jili keyboard akiya mai dictionary du mji a jauba.";
/* Error opening a Keyman package - cannot parse contents */
"kmp-error-no-metadata" = "Mji a pa package ku munagu mai - suku akwa mji kra sini mai.";
/* Error opening a Keyman package - package's contents are for desktop platforms only */
"kmp-error-unsupported" = "Package ku naja nda mchaku ɓar udzu anu kwahir nasara ginyi mai.";
/* Error opening a Keyman package - package contains unexpected resource (keyboard or dictionary) type */
"kmp-error-wrong-type" = "This package does not contain the expected resource type.";
/* Title for the Installed Languages menu */
"menu-installed-languages-title" = "Fia Ŋya yer";
/* Section header for lexical models within a language-specific settings menu */
"menu-langsettings-label-lexical-models" = "Dictionaries";
/* Section header for keyboards within a language-specific settings menu */
"menu-langsettings-section-keyboards" = "Keyboards";
/* Section header for the settings toggles within a language-specific settings menu */
"menu-langsettings-section-settings" = "Language Settings";
/* Title for the language-specific settings menus */
"menu-langsettings-title" = "%@ Settings";
/* Label for the toggle that enables corrections that is displayed within a language-specific settings menu */
"menu-langsettings-toggle-correct" = "Enable corrections";
/* Label for the toggle that enables predictions that is displayed within a language-specific settings menu */
"menu-langsettings-toggle-predict" = "Enable predictions";
/* Help message for a prompt that appears for confirming a lexical model download: language (1): lexical model (dictionary) name (2) */
"menu-lexical-model-install-message" = "Nagu ayu ga fia dictionary ya?";
/* Title for a prompt that appears for confirming a lexical model download: language (1): lexical model (dictionary) name (2) */
"menu-lexical-model-install-title" = "%1$@: %2$@";
/* Text for an info alert indicating that no lexical models are available */
"menu-lexical-model-none-message" = "Dictionaries aʻi mai";
/* Title for the lexical model menu, a submenu of the language-specific settings menus */
"menu-lexical-model-title" = "%@ Dictionaries";
/* Title for the keyboard picker */
"menu-picker-title" = "Keyboards";
/* Primary text for the Settings menu option to report keyboard crashes */
"menu-settings-error-report" = "Ngeri Wula su kra kalkal";
/* Secondary text for the Settings menu option to report keyboard crashes */
"menu-settings-error-report-description" = "May require \"full access\"";
/* Primary text for the Settings menu local-file package installation option */
"menu-settings-install-from-file" = "Install File yer";
/* Secondary text for the Settings menu local-file package installation option */
"menu-settings-install-from-file-description" = "Browse for .kmp files";
/* Primary text for the Settings menu option that displays the iOS system menu options for the app's keyboard */
"menu-settings-system-keyboard-menu" = "System Keyboard Settings";
/* Label for the "Show Banner" toggle on the main settings screen */
"menu-settings-show-banner" = "Ncha Banner";
/* Label for the "Get Started" automatic display toggle seen in the Settings menu */
"menu-settings-startup-get-started" = "Ncha ʻBaditsiniʻ u startup";
/* Title for the main Settings menu */
"menu-settings-title" = "Keyman Settings";
/* Secondary text showing current setting for spacebar caption - blank */
"menu-settings-spacebar-hint-blank" = "Asuka ga ncha ruɓutsini ar spaceba mai";
/* Secondary text showing current setting for spacebar caption - keyboard */
"menu-settings-spacebar-hint-keyboard" = "Ncha thlimur keyboard arkra spaceba";
/* Secondary text showing current setting for spacebar caption - language */
"menu-settings-spacebar-hint-language" = "Ncha thlimur ŋya ar spaceba";
/* Secondary text showing current setting for spacebar caption - language + keyboard */
"menu-settings-spacebar-hint-languageKeyboard" = "Ŋcha thlimu ŋya baɗa keyboard ar spaceba";
/* Label for the "Spacebar Caption" item on the main settings screen */
"menu-settings-spacebar-text" = "Ruɓutsini ar spaceba";
/* Title for the "Spacebar Caption" settings screen */
"menu-settings-spacebar-title" = "Ruɓutsini ar spaceba";
/* Text showing name of spacebar caption - blank */
"menu-settings-spacebar-item-blank" = "Kra ga ruɓutsini";
/* Text showing name of spacebar caption - keyboard */
"menu-settings-spacebar-item-keyboard" = "Keyboard";
/* Text showing name of spacebar caption - language */
"menu-settings-spacebar-item-language" = "Ŋya";
/* Text showing name of spacebar caption - language + keyboard */
"menu-settings-spacebar-item-languageKeyboard" = "Ŋya baɗa keyboard";
/* Short text for notification: download failure for keyboard */
"notification-download-failure-keyboard" = "Keyboard download aŋgiliri";
/* Short text for notification: download failure for lexical model */
"notification-download-failure-lexical-model" = "Dictionary download a ngiliri";
/* Short text for notification: download success for keyboard */
"notification-download-success-keyboard" = "Keyboard successfully downloaded";
/* Short text for notification: download success for lexical model */
"notification-download-success-lexical-model" = "Lexical model successfully downloaded";
/* Short text for notification: downloading a keyboard */
"notification-downloading-keyboard" = "Downloading keyboard\U2026";
/* Short text for notification: downloading a lexical model */
"notification-downloading-lexical-model" = "Downloading dictionary\U2026";
/* Short text for notification: an update is available */
"notification-update-available" = "Update aʻi";
/* Short text for notification: currently updating */
"notification-update-processing" = "Updating\U2026";
/* Text indicating success at installing new keyboards or dictionaries */
"success-install" = "Installed successfully.";
/* A title to use in alerts indicating 'success' at whatever task the user requested */
"success-title" = "Success";

View file

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>menu-langsettings-lexical-model-count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>%u dictionary installed</string>
<key>other</key>
<string>%u dictionaries installed</string>
</dict>
</dict>
<key>notification-update-failed</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>%u update a ngiliri</string>
<key>other</key>
<string>%u updates a ngiliri</string>
</dict>
</dict>
<key>notification-update-success</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>%u update a iu munagu</string>
<key>other</key>
<string>%u update successful</string>
</dict>
</dict>
<key>settings-keyboards-installed-count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>%u keyboard installed</string>
<key>other</key>
<string>%u keyboard installed</string>
</dict>
</dict>
<key>settings-languages-installed-count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>%u Installed nur ŋya</string>
<key>other</key>
<string>%u language nur ŋya</string>
</dict>
</dict>
<key>package-default-found-keyboards</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>Thlia mji %u keyboard akwa package:</string>
<key>other</key>
<string>Athlia mji %u keyboard akwa package:</string>
</dict>
</dict>
<key>package-default-found-lexical-models</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>u</string>
<key>one</key>
<string>Athlia mji %u dictionary akwa package:</string>
<key>other</key>
<string>Athlia mji %u dictionary akwa package:</string>
</dict>
</dict>
</dict>
</plist>

View file

@ -709,9 +709,9 @@
981AFADC19EF44DE006706BF /* Embed App Extensions */,
37BC8FF91DE83B40006AEBFF /* Headers */,
C01AB5981F8343F7009B37D3 /* Embed Frameworks */,
CE7E13D8240E285800252C00 /* ShellScript */,
989E4DB91B1EB5C200A345FB /* Run Script */,
CE002CB32408B372002026CE /* ShellScript */,
CE7E13D8240E285800252C00 /* Run Script - set versions */,
989E4DB91B1EB5C200A345FB /* Run Script - update plists and lint */,
CE002CB32408B372002026CE /* Run Script - upload dsyms to sentry */,
);
buildRules = (
);
@ -931,22 +931,22 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
989E4DB91B1EB5C200A345FB /* Run Script */ = {
989E4DB91B1EB5C200A345FB /* Run Script - update plists and lint */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
name = "Run Script - update plists and lint";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellPath = "/usr/bin/env bash";
shellScript = "verstr1=$(/usr/libexec/PlistBuddy -c \"Print CFBundleShortVersionString\" \"$SRCROOT/Keyman-Info.plist\")\nverstr2=$(/usr/libexec/PlistBuddy -c \"Print CFBundleVersion\" \"$SRCROOT/Keyman-Info.plist\")\n/usr/libexec/PlistBuddy \"$SRCROOT/Settings.bundle/Root.plist\" -c \"set PreferenceSpecifiers:0:DefaultValue $verstr1 (build $verstr2)\"\n\nif which swiftlint >/dev/null; then\n swiftlint --config ../../.swiftlint.yml\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n";
showEnvVarsInLog = 0;
};
CE002CB32408B372002026CE /* ShellScript */ = {
CE002CB32408B372002026CE /* Run Script - upload dsyms to sentry */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@ -956,12 +956,13 @@
inputPaths = (
"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}",
);
name = "Run Script - upload dsyms to sentry";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/bash;
shellPath = "/usr/bin/env bash";
shellScript = ". \"$KEYMAN_ROOT/resources/build/xcode-utils.sh\"\n\nif [ ${UPLOAD_SENTRY:-false} = true ]; then\n # Calls resource script to perform the dSYM upload\n phaseSentryDsymUpload \"keyman-ios\"\nfi\n";
};
CE06AA671F161422006D91C3 /* Run Script */ = {
@ -978,7 +979,7 @@
shellPath = /bin/sh;
shellScript = "if which swiftlint >/dev/null; then\n swiftlint --config ../../.swiftlint.yml\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n";
};
CE7E13D8240E285800252C00 /* ShellScript */ = {
CE7E13D8240E285800252C00 /* Run Script - set versions */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@ -987,12 +988,13 @@
);
inputPaths = (
);
name = "Run Script - set versions";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellPath = "/usr/bin/env bash";
shellScript = ". \"$KEYMAN_ROOT/resources/build/xcode-utils.sh\"\n\n# Calls resource script to update build products' versioning.\n# true: applies VERSION_WITH_TAG to custom KeymanVersionWithTag plist member used for in-app display\nphaseSetBundleVersions true\n\n# Also updates the version string for Settings\nsetSettingsBundleVersion\n";
showEnvVarsInLog = 0;
};

View file

@ -0,0 +1,81 @@
/* Title for the bookmarks menu within the embedded browser */
"browser-bookmarks-add-title" = "Dzakti Bookmark";
/* Title for the bookmarks menu within the embedded browser */
"browser-bookmarks-none" = "Bookmarkyere adiwɛ";
/* Title for the bookmarks menu within the embedded browser */
"browser-bookmarks-title" = "Bookmarkyere";
/* Used to confirm a user's desire to install a package */
"confirm-install" = "Vu akwa";
/* The label for the toggle to stop automatically showing the "Get Started" tutorial popup. */
"disable-get-started" = "Ta gǝta tsanti kadwam";
/* Indicates an error opening a web page requested by a user */
"error-opening-page" = "Gadiyata Mǝzi Mburnta Peji Wɛ";
/* Long-form used when installing a font in order to display a language properly. */
"font-install-description" = "Tsukwar Vu Akwa akuya ka %@ su tsantidzi kal kal akwa shanga appyere nǝngɛ";
/* The name of the iOS Settings menu option for keyboards */
"ios-settings-keyboards" = "Kibodyere";
/* The name of the iOS Settings menu option for giving the keyboard full access. (The menu entry
underneath the app's name within the app-specific keyboard menu.) */
"ios-settings-allow-full-access" = "Ada Gyar Ka Ndɛ Lukwa";
/* Short-form used when installing a font in order to display a language properly. */
"language-for-font" = "%@ Font";
/* Used for 'add' options within menus */
"menu-add" = "Dzakti";
/* Used to indicate a sequence of menu options that a user needs to copy. May be chained. Example: "Keyboards (1) > Enable Keyman (2)" */
"menu-breadcrumbing" = "%1$@ > %2$@";
/* Used to exit a menu without choosing an option */
"menu-cancel" = "Kansǝl";
/* Menu option that erases all previously-typed text. */
"menu-clear-text" = "Kǝkǝrnta Text";
/* Menu option that displays a list designed to help users start using the app */
"menu-get-started" = "Badicini";
/* Menu option that displays help for the app */
"menu-help" = "Sǝr Zǝndi";
/* Menu option that displays the main screen's drop-down menu */
"menu-more" = "Dzaktǝdzǝr su";
/* Menu option used to edit keyboard and dictionary settings */
"menu-settings" = "Settings";
/* Menu option that displays the iOS Share menu */
"menu-share" = "Ndǝɦǝnta";
/* Menu option that displays an embedded web browser. */
"menu-show-browser" = "Brauza";
/* Menu option used to control in-app font size. */
"menu-text-size" = "Ngakurǝr Text";
/* Used to describe the current font size */
"text-size-label" = "Ngakurǝr Text: %i";
/* Text to indicate that a user should set a toggle within iOS Settings to 'active'. */
"toggle-to-enable" = "ʻYati ka ʻya %@";
/* First option on the Get Started tutorial - Add a keyboard for your language */
"tutorial-add-keyboard" = "Dzakǝkǝr kibod ata kǝra nyar ngɛ";
/* Third option on the Get Started tutorial - Displays app help. */
"tutorial-show-help" = "Dzaktǝr sǝr zǝndi";
/* Second option on the Get Started tutorial - Set up Keyman as system-wide keyboard */
"tutorial-system-keyboard" = "Set up Keyman as system-wide keyboard";
/* Used to display app version (as in \"Version: 1.0.2\" */
"version-label" = "Jili: %@";

View file

@ -0,0 +1,81 @@
/* Title for the bookmarks menu within the embedded browser */
"browser-bookmarks-add-title" = "Mbakat Bookmark";
/* Title for the bookmarks menu within the embedded browser */
"browser-bookmarks-none" = "Haɗ bookmarks wo";
/* Title for the bookmarks menu within the embedded browser */
"browser-bookmarks-title" = "Bookmarks";
/* Used to confirm a user's desire to install a package */
"confirm-install" = "Fanta";
/* The label for the toggle to stop automatically showing the "Get Started" tutorial popup. */
"disable-get-started" = "Eh virataka maranta";
/* Indicates an error opening a web page requested by a user */
"error-opening-page" = "Ha da gunat Page wo";
/* Long-form used when installing a font in order to display a language properly. */
"font-install-description" = "Tapa fant k magat %@ plunta daideya minahagha";
/* The name of the iOS Settings menu option for keyboards */
"ios-settings-keyboards" = "Keyboards";
/* The name of the iOS Settings menu option for giving the keyboard full access. (The menu entry
underneath the app's name within the app-specific keyboard menu.) */
"ios-settings-allow-full-access" = "Javat wativ sosaya";
/* Short-form used when installing a font in order to display a language properly. */
"language-for-font" = "%@ Font";
/* Used for 'add' options within menus */
"menu-add" = "Mbakata";
/* Used to indicate a sequence of menu options that a user needs to copy. May be chained. Example: "Keyboards (1) > Enable Keyman (2)" */
"menu-breadcrumbing" = "%1$@ > %2$@";
/* Used to exit a menu without choosing an option */
"menu-cancel" = "Jata";
/* Menu option that erases all previously-typed text. */
"menu-clear-text" = "Clear Text";
/* Menu option that displays a list designed to help users start using the app */
"menu-get-started" = "Yagha a fuɗa";
/* Menu option that displays help for the app */
"menu-help" = "Info";
/* Menu option that displays the main screen's drop-down menu */
"menu-more" = "Mbakata";
/* Menu option used to edit keyboard and dictionary settings */
"menu-settings" = "Siryata";
/* Menu option that displays the iOS Share menu */
"menu-share" = "Tiganta";
/* Menu option that displays an embedded web browser. */
"menu-show-browser" = "Browser";
/* Menu option used to control in-app font size. */
"menu-text-size" = "Text Size";
/* Used to describe the current font size */
"text-size-label" = "Text size: %i";
/* Text to indicate that a user should set a toggle within iOS Settings to 'active'. */
"toggle-to-enable" = "Javat wative %@";
/* First option on the Get Started tutorial - Add a keyboard for your language */
"tutorial-add-keyboard" = "Ambaka keyboard anga gwaɗa luwagha";
/* Third option on the Get Started tutorial - Displays app help. */
"tutorial-show-help" = "Mbakat info";
/* Second option on the Get Started tutorial - Set up Keyman as system-wide keyboard */
"tutorial-system-keyboard" = "Set up Keyman as system-wide keyboard";
/* Used to display app version (as in \"Version: 1.0.2\" */
"version-label" = "Sangabta: %@";

View file

@ -0,0 +1,81 @@
/* Title for the bookmarks menu within the embedded browser */
"browser-bookmarks-add-title" = "Mchaku Bookmark";
/* Title for the bookmarks menu within the embedded browser */
"browser-bookmarks-none" = "Bookmark aʻi mai";
/* Title for the bookmarks menu within the embedded browser */
"browser-bookmarks-title" = "Bookmarks";
/* Used to confirm a user's desire to install a package */
"confirm-install" = "Install";
/* The label for the toggle to stop automatically showing the "Get Started" tutorial popup. */
"disable-get-started" = "Asuka ga bura ncha mai";
/* Indicates an error opening a web page requested by a user */
"error-opening-page" = "Acittu pahu pagi mai";
/* Long-form used when installing a font in order to display a language properly. */
"font-install-description" = "Tsukwa Install kuga %@ nchaba kalkal akwa ca apps";
/* The name of the iOS Settings menu option for keyboards */
"ios-settings-keyboards" = "Keyboards";
/* The name of the iOS Settings menu option for giving the keyboard full access. (The menu entry
underneath the app's name within the app-specific keyboard menu.) */
"ios-settings-allow-full-access" = "Allow Full Access";
/* Short-form used when installing a font in order to display a language properly. */
"language-for-font" = "%@ Font";
/* Used for 'add' options within menus */
"menu-add" = "Mchaku";
/* Used to indicate a sequence of menu options that a user needs to copy. May be chained. Example: "Keyboards (1) > Enable Keyman (2)" */
"menu-breadcrumbing" = "%1$@ > %2$@";
/* Used to exit a menu without choosing an option */
"menu-cancel" = "Kukulna";
/* Menu option that erases all previously-typed text. */
"menu-clear-text" = "Kukulna ndir";
/* Menu option that displays a list designed to help users start using the app */
"menu-get-started" = "Baditsini";
/* Menu option that displays help for the app */
"menu-help" = "Labar";
/* Menu option that displays the main screen's drop-down menu */
"menu-more" = "Odi";
/* Menu option used to edit keyboard and dictionary settings */
"menu-settings" = "Settings";
/* Menu option that displays the iOS Share menu */
"menu-share" = "Ntiku";
/* Menu option that displays an embedded web browser. */
"menu-show-browser" = "Browser";
/* Menu option used to control in-app font size. */
"menu-text-size" = "Nga nur ruɓutsini";
/* Used to describe the current font size */
"text-size-label" = "Nga nur ruɓutsini: %i";
/* Text to indicate that a user should set a toggle within iOS Settings to 'active'. */
"toggle-to-enable" = "Enable %@";
/* First option on the Get Started tutorial - Add a keyboard for your language */
"tutorial-add-keyboard" = "Mchaku keyboard anu ŋya ginyi";
/* Third option on the Get Started tutorial - Displays app help. */
"tutorial-show-help" = "Labar odi";
/* Second option on the Get Started tutorial - Set up Keyman as system-wide keyboard */
"tutorial-system-keyboard" = "Set up Keyman as system-wide keyboard";
/* Used to display app version (as in \"Version: 1.0.2\" */
"version-label" = "Version: %@";

View file

@ -20,5 +20,5 @@
"ts-node",
"typescript"
],
"version": "15.0.177"
"version": "15.0.184"
}

View file

@ -97,7 +97,7 @@ Nightly and release builds upload the most recent new master build to <https://d
## Building packages
See [Linux packaging doc](https://github.com/keymanapp/keyman/blob/master/docs/linux-packaging.md)
See [Linux packaging doc](../docs/linux-packaging.md)
for details on building Linux packages for Keyman.
## Testing

Some files were not shown because too many files have changed in this diff Show more