mirror of
https://github.com/keymanapp/keyman.git
synced 2026-09-24 00:27:40 +00:00
chore(web): Merge branch 'chore/web/fixup-unit-test-fixups' into chore/web/merge-web-version-environment
This commit is contained in:
commit
3855a25d26
188 changed files with 10730 additions and 398 deletions
145
HISTORY.md
145
HISTORY.md
|
|
@ -1,5 +1,147 @@
|
|||
# Keyman Version History
|
||||
|
||||
## 16.0.10 alpha 2022-05-15
|
||||
|
||||
* chore: beta to master A16S1 (#6614)
|
||||
|
||||
## 16.0.9 alpha 2022-04-29
|
||||
|
||||
* chore(common): merge beta to master B15S7 (Part 2) (#6579)
|
||||
|
||||
## 16.0.8 alpha 2022-04-17
|
||||
|
||||
* chore: merge beta to master B15S7 (#6537)
|
||||
|
||||
## 16.0.7 alpha 2022-04-07
|
||||
|
||||
* chore: beta to master B15S6 (#6490)
|
||||
* fix(ios): use CFBundleShortVersionString for version (#6496)
|
||||
|
||||
## 16.0.6 alpha 2022-04-05
|
||||
|
||||
* chore(deps): bump ansi-regex from 3.0.0 to 3.0.1 in /web/testing/regression-tests (#6470)
|
||||
* chore(deps-dev): bump minimist from 1.2.5 to 1.2.6 in /web/testing/regression-tests (#6471)
|
||||
* chore(deps): bump minimist from 1.2.5 to 1.2.6 in /developer/server (#6472)
|
||||
|
||||
## 16.0.5 alpha 2022-04-04
|
||||
|
||||
* chore(common): beta to master B15S6 (#6467)
|
||||
|
||||
## 16.0.4 alpha 2022-03-22
|
||||
|
||||
* chore: B15S4 beta->alpha (#6402)
|
||||
|
||||
## 16.0.3 alpha 2022-03-16
|
||||
|
||||
* chore: merge beta changes to alpha B15S4 (#6376)
|
||||
* chore(common/core/desktop): Improve meson build file ️ (#6183)
|
||||
|
||||
## 16.0.2 alpha 2022-03-03
|
||||
|
||||
* chore(deps-dev): bump karma from 6.3.14 to 6.3.16 in /web/testing/regression-tests (#6322)
|
||||
|
||||
## 16.0.1 alpha 2022-03-02
|
||||
|
||||
* chore: move to 16.0 (#6318)
|
||||
|
||||
## 15.0.252 beta 2022-05-25
|
||||
|
||||
* fix(ios): fixes OSK mispositioning bug in iOS 15 (#6631)
|
||||
|
||||
## 15.0.251 beta 2022-05-23
|
||||
|
||||
* fix(ios): stops leaking memory on system keyboard rotation (#6552)
|
||||
* fix(android/engine): Fix sticky long-press keys (#6637)
|
||||
|
||||
## 15.0.250 beta 2022-05-20
|
||||
|
||||
* feat(android/app): Provide haptic feedback when typing (#6626)
|
||||
* fix(ios): disables transparent nav bar for ios 15 (#6633)
|
||||
|
||||
## 15.0.249 beta 2022-05-19
|
||||
|
||||
* chore(common): improve PR reporting of changes (#6624)
|
||||
|
||||
## 15.0.248 beta 2022-05-17
|
||||
|
||||
* fix(windows): use GlobalGetAtomName to access global list (#6580)
|
||||
|
||||
## 15.0.247 beta 2022-05-16
|
||||
|
||||
* chore(common/resources): Update langtags.json (#6594)
|
||||
* fix(android/engine): Refresh OSK when changing spacebar text (#6620)
|
||||
|
||||
## 15.0.246 beta 2022-05-11
|
||||
|
||||
* chore(ios): Set transparent background on "more" icons (#6598)
|
||||
* chore(common): Add crowdin strings for Polish (#6593)
|
||||
|
||||
## 15.0.245 beta 2022-05-10
|
||||
|
||||
* chore(common): Add crowdin strings for Italian (#6592)
|
||||
|
||||
## 15.0.244 beta 2022-05-09
|
||||
|
||||
* fix(windows): Don't reset defaults on Keyman upgrade (#6491)
|
||||
|
||||
## 15.0.243 beta 2022-05-03
|
||||
|
||||
* chore(web): report on file size (#6584)
|
||||
* chore(android/engine): Ignore DownloadManager if ID not found (#6581)
|
||||
* fix(common/models): prevents preemptive tokenization of potential contractions (#6574)
|
||||
* fix(web): fixes fat-finger distrib when subkey selected (#6526)
|
||||
|
||||
## 15.0.242 beta 2022-04-29
|
||||
|
||||
* docs(windows): Update OS and whatsnew in help (#6560)
|
||||
* fix(android/engine): Check suggestion banner after setting keyboard (#6559)
|
||||
* chore(common): Update Crowdin strings for Fula (#6562)
|
||||
|
||||
## 15.0.241 beta 2022-04-27
|
||||
|
||||
* change(web): touch alias optimization followup (#6566)
|
||||
* fix(common/core/web): Fix forEach loop in SentryManager (#6569)
|
||||
* fix(linux): Fix shared keyboard (un-)installation in Bionic (#6565)
|
||||
|
||||
## 15.0.240 beta 2022-04-26
|
||||
|
||||
* feat(web): adds .getKeyboard().IsRTL, .HasLoaded (#6567)
|
||||
* fix(android): Don't show welcome.htm on keyboard package update (#6555)
|
||||
* fix(android/engine): Localize some Toast notifications (#6561)
|
||||
|
||||
## 15.0.239 beta 2022-04-22
|
||||
|
||||
* fix(web): optimizes, enhances caret placement within text on mobile devices (#6551)
|
||||
|
||||
## 15.0.238 beta 2022-04-21
|
||||
|
||||
* chore(linux): Fix failure in Debian reproducibility testing (#6548)
|
||||
* chore(linux): Update Linux dependencies (#6549)
|
||||
|
||||
## 15.0.237 beta 2022-04-20
|
||||
|
||||
* feat(linux): WIP - implement capslock handling with Wayland ️ (#6213)
|
||||
|
||||
## 15.0.236 beta 2022-04-19
|
||||
|
||||
* fix(android): key tip sticky with multitap (#6494)
|
||||
* fix(web): blocks modifier key fat-fingering (#6473)
|
||||
|
||||
## 15.0.235 beta 2022-04-18
|
||||
|
||||
* chore(android,windows): Update crowdin strings for bwr-NG (#6532)
|
||||
|
||||
## 15.0.234 beta 2022-04-14
|
||||
|
||||
* chore(common): Add Crowdin strings for Portuguese (pt-PT) (#6509)
|
||||
* chore(linux): Fix l10n language mappings (#6529)
|
||||
* chore(linux): Update Debian changelog (#6530)
|
||||
|
||||
## 15.0.233 beta 2022-04-13
|
||||
|
||||
* chore(android/app): Add description for referrer response error (#6524)
|
||||
* fix(linux): test fileVersion during package install (#6522)
|
||||
|
||||
## 15.0.232 beta 2022-04-11
|
||||
|
||||
* fix(linux): Remove tab completion warning (#6482)
|
||||
|
|
@ -145,6 +287,9 @@
|
|||
* change(web): tightens call signature for banner selection (#4966)
|
||||
* fix(windows): cleanup edge cases in k32_load (#5197)
|
||||
* feat(ios): refinement of spacebar-captioning PR (#5368)
|
||||
|
||||
## 15.0.205 alpha 2022-03-02
|
||||
|
||||
* fix(developer): move ngrok to Server/bin/ (#6304)
|
||||
* fix(linux): Gracefully handle keyboard download failure (#6285)
|
||||
* fix(linux): Gracefully handle makedirs failures (#6287)
|
||||
|
|
|
|||
2
TIER.md
2
TIER.md
|
|
@ -1 +1 @@
|
|||
beta
|
||||
alpha
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
15.0.233
|
||||
16.0.11
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import com.android.installreferrer.api.InstallReferrerStateListener;
|
|||
import com.android.installreferrer.api.ReferrerDetails;
|
||||
import com.tavultesoft.kmapro.MainActivity;
|
||||
import com.tavultesoft.kmapro.R;
|
||||
import com.tavultesoft.kmea.KmpInstallMode;
|
||||
import com.tavultesoft.kmea.util.KMLog;
|
||||
import com.tavultesoft.kmea.util.KMString;
|
||||
|
||||
|
|
@ -79,6 +80,9 @@ public class CheckInstallReferrer {
|
|||
// Connection couldn't be established; log to Sentry
|
||||
KMLog.LogError(TAG, "onInstallReferrerSetupFinished:SERVICE_UNAVAILABLE");
|
||||
break;
|
||||
case InstallReferrerClient.InstallReferrerResponse.PERMISSION_ERROR:
|
||||
KMLog.LogError(TAG, "onInstallReferrerSetupFinished.PERMISSION_ERROR");
|
||||
break;
|
||||
default:
|
||||
// There are some other error codes; log to Sentry
|
||||
KMLog.LogError(TAG, "onInstallReferrerSetupFinished: Unexpected code: " +
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import android.content.Intent;
|
|||
import android.os.Bundle;
|
||||
import android.os.ResultReceiver;
|
||||
|
||||
import com.tavultesoft.kmea.KmpInstallMode;
|
||||
import com.tavultesoft.kmea.util.FileUtils;
|
||||
import com.tavultesoft.kmea.util.KMLog;
|
||||
|
||||
|
|
@ -22,8 +23,7 @@ public class DownloadIntentService extends IntentService {
|
|||
String filename = intent.getStringExtra("filename");
|
||||
String destination = intent.getStringExtra("destination");
|
||||
String languageID = intent.getStringExtra("language");
|
||||
KmpInstallMode installMode = (KmpInstallMode) intent.getSerializableExtra("installMode");
|
||||
if(installMode == null) installMode = KmpInstallMode.Full;
|
||||
KmpInstallMode installMode = KmpInstallMode.fromString(intent.getStringExtra("installMode"));
|
||||
final ResultReceiver receiver = intent.getParcelableExtra("receiver");
|
||||
Bundle bundle = new Bundle();
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ public class DownloadIntentService extends IntentService {
|
|||
bundle.putString("filename", filename);
|
||||
bundle.putString("destination", destination);
|
||||
bundle.putString("language", languageID);
|
||||
bundle.putSerializable("installMode", installMode);
|
||||
bundle.putString("installMode", installMode.toString());
|
||||
receiver.send(FileUtils.DOWNLOAD_SUCCESS, bundle);
|
||||
} else {
|
||||
receiver.send(FileUtils.DOWNLOAD_CANCELLED, bundle);
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
package com.keyman.android;
|
||||
|
||||
public enum KmpInstallMode {
|
||||
Silent, // Show no UI while installing a package. Errors may be shown as toasts
|
||||
WelcomeOnly, // Show only the welcome screen after installing a package; language will
|
||||
// be automatically selected if not provided as an input parameter
|
||||
Full // Show readme, language picker (if applicable), and welcome after install.
|
||||
}
|
||||
|
|
@ -69,6 +69,9 @@ public class SystemKeyboard extends InputMethodService implements OnKeyboardEven
|
|||
KMManager.SpacebarText spacebarText = KMManager.SpacebarText.fromString(prefs.getString(KeymanSettingsActivity.spacebarTextKey, KMManager.SpacebarText.LANGUAGE_KEYBOARD.toString()));
|
||||
KMManager.setSpacebarText(spacebarText);
|
||||
|
||||
boolean mayHaveHapticFeedback = prefs.getBoolean(KeymanSettingsActivity.hapticFeedbackKey, false);
|
||||
KMManager.setHapticFeedback(mayHaveHapticFeedback);
|
||||
|
||||
KMManager.executeResourceUpdate(this);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ import android.os.Handler;
|
|||
import android.os.ResultReceiver;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.keyman.android.KmpInstallMode;
|
||||
import com.tavultesoft.kmea.BaseActivity;
|
||||
import com.tavultesoft.kmea.KmpInstallMode;
|
||||
import com.tavultesoft.kmea.util.FileUtils;
|
||||
|
||||
import java.io.File;
|
||||
|
|
@ -36,13 +36,12 @@ public class DownloadResultReceiver extends ResultReceiver {
|
|||
String downloadedFilename = resultData.getString("filename");
|
||||
String languageID = resultData.getString("language");
|
||||
String kmpFilename = resultData.getString("destination") + File.separator + downloadedFilename;
|
||||
KmpInstallMode installMode = (KmpInstallMode) resultData.getSerializable("installMode");
|
||||
if(installMode == null) installMode = KmpInstallMode.Full;
|
||||
KmpInstallMode installMode = KmpInstallMode.fromString(resultData.getString("installMode"));
|
||||
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("kmpFile", kmpFilename);
|
||||
bundle.putString("language", languageID);
|
||||
bundle.putSerializable("installMode", installMode);
|
||||
bundle.putString("installMode", installMode.toString());
|
||||
Intent packageIntent = new Intent(context, PackageActivity.class);
|
||||
packageIntent.putExtras(bundle);
|
||||
context.startActivity(packageIntent);
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ public class KeymanSettingsActivity extends BaseActivity {
|
|||
protected static final String showBannerKey = "ShowBanner";
|
||||
protected static final String sendCrashReport = "SendCrashReport";
|
||||
public static final String spacebarTextKey = "SpacebarText";
|
||||
public static final String hapticFeedbackKey = "HapticFeedback";
|
||||
|
||||
protected KeymanSettingsFragment innerFragment;
|
||||
|
||||
|
|
|
|||
|
|
@ -149,6 +149,21 @@ public class KeymanSettingsFragment extends PreferenceFragmentCompat {
|
|||
}
|
||||
});
|
||||
|
||||
SwitchPreference hapticFeedbackPreference = new SwitchPreference(context);
|
||||
hapticFeedbackPreference.setKey(KeymanSettingsActivity.hapticFeedbackKey);
|
||||
hapticFeedbackPreference.setTitle(getString(R.string.haptic_feedback));
|
||||
hapticFeedbackPreference.setDefaultValue(false);
|
||||
hapticFeedbackPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
if (newValue == null) {
|
||||
return false;
|
||||
}
|
||||
KMManager.setHapticFeedback((boolean)newValue);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
Automatically does the following:
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
|
|
@ -184,6 +199,7 @@ public class KeymanSettingsFragment extends PreferenceFragmentCompat {
|
|||
screen.addPreference(adjustKeyboardHeight);
|
||||
screen.addPreference(spacebarTextPreference);
|
||||
|
||||
screen.addPreference(hapticFeedbackPreference);
|
||||
screen.addPreference(bannerPreference);
|
||||
screen.addPreference(getStartedPreference);
|
||||
screen.addPreference(sendCrashReportPreference);
|
||||
|
|
|
|||
|
|
@ -18,12 +18,12 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
import com.keyman.android.CheckInstallReferrer;
|
||||
import com.keyman.android.KmpInstallMode;
|
||||
import com.tavultesoft.kmea.BaseActivity;
|
||||
import com.tavultesoft.kmea.KMHelpFileActivity;
|
||||
import com.tavultesoft.kmea.KMKeyboardDownloaderActivity;
|
||||
import com.tavultesoft.kmea.KMManager;
|
||||
import com.tavultesoft.kmea.KMManager.KeyboardType;
|
||||
import com.tavultesoft.kmea.KmpInstallMode;
|
||||
import com.tavultesoft.kmea.KMTextView;
|
||||
import com.tavultesoft.kmea.KeyboardEventHandler.OnKeyboardDownloadEventListener;
|
||||
import com.tavultesoft.kmea.KeyboardEventHandler.OnKeyboardEventListener;
|
||||
|
|
@ -184,6 +184,8 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene
|
|||
KMManager.SpacebarText spacebarText = KMManager.SpacebarText.fromString(prefs.getString(KeymanSettingsActivity.spacebarTextKey, KMManager.SpacebarText.LANGUAGE_KEYBOARD.toString()));
|
||||
KMManager.setSpacebarText(spacebarText);
|
||||
|
||||
checkHapticFeedback();
|
||||
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
toolbar = (Toolbar) findViewById(R.id.titlebar);
|
||||
|
|
@ -495,6 +497,7 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene
|
|||
* Parse the URI data to determine the filename and URL for the .kmp keyboard package.
|
||||
* If URL is valid, download the kmp.
|
||||
* @param packageUri URI to download the package.
|
||||
* @param installMode KMP installation mode (silent, welcome only, or full)
|
||||
* TODO: only ever pass packageId and bcp47 from callers, as KMPLink should be responsible for
|
||||
* URL parsing, not this function.
|
||||
*/
|
||||
|
|
@ -540,7 +543,7 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene
|
|||
downloadIntent.putExtra("language", languageID);
|
||||
downloadIntent.putExtra("destination", MainActivity.this.getCacheDir().toString());
|
||||
downloadIntent.putExtra("receiver", resultReceiver);
|
||||
downloadIntent.putExtra("installMode", installMode);
|
||||
downloadIntent.putExtra("installMode", installMode.toString());
|
||||
|
||||
progressDialog = new ProgressDialog(MainActivity.this);
|
||||
progressDialog.setMessage(String.format(getString(R.string.downloading_keyboard_package), filename));
|
||||
|
|
@ -742,6 +745,12 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene
|
|||
KMManager.setMaySendCrashReport(maySendCrashReport);
|
||||
}
|
||||
|
||||
private void checkHapticFeedback() {
|
||||
SharedPreferences prefs = getSharedPreferences(getString(R.string.kma_prefs_name), Context.MODE_PRIVATE);
|
||||
boolean mayHaveHapticFeedback = prefs.getBoolean(KeymanSettingsActivity.hapticFeedbackKey, false);
|
||||
KMManager.setHapticFeedback(mayHaveHapticFeedback);
|
||||
}
|
||||
|
||||
private void checkChromeVersion(WebView webView) {
|
||||
if (KMManager.getEngineWebViewVersionStatus() != EngineWebViewVersionStatus.FULL) {
|
||||
LinearLayout updateChromeLayout = (LinearLayout) findViewById(R.id.updateChromeLayout);
|
||||
|
|
@ -926,6 +935,7 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene
|
|||
|
||||
String packageID = null;
|
||||
String customHelpLink = null;
|
||||
KmpInstallMode installMode = KmpInstallMode.Full;
|
||||
for (int i = 0; i < keyboardsInstalled.size(); i++) {
|
||||
HashMap<String, String> hashMap = new HashMap<>(keyboardsInstalled.get(i));
|
||||
String languageID = hashMap.get(KMManager.KMKey_LanguageID);
|
||||
|
|
@ -942,6 +952,9 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene
|
|||
hashMap.get(KMManager.KMKey_Font),
|
||||
hashMap.get(KMManager.KMKey_OskFont));
|
||||
|
||||
if (hashMap.containsKey(KMManager.KMKey_KMPInstall_Mode)) {
|
||||
installMode = KmpInstallMode.fromString(hashMap.get(KMManager.KMKey_KMPInstall_Mode));
|
||||
}
|
||||
if (i == 0) {
|
||||
packageID = keyboardInfo.getPackageID();
|
||||
customHelpLink = keyboardInfo.getHelpLink();
|
||||
|
|
@ -983,7 +996,7 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene
|
|||
}
|
||||
|
||||
// Display welcome.htm help file -- if we are not doing a silent install
|
||||
if (PackageActivity.lastInstallMode != KmpInstallMode.Silent &&
|
||||
if (installMode != KmpInstallMode.Silent &&
|
||||
customHelpLink != null && !customHelpLink.isEmpty() &&
|
||||
packageID != null && !packageID.isEmpty() && FileUtils.isWelcomeFile(customHelpLink)) {
|
||||
// Display local welcome.htm help file, including associated assets
|
||||
|
|
@ -993,10 +1006,6 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene
|
|||
i.putExtra(KMManager.KMKey_CustomHelpLink, customHelpLink);
|
||||
startActivity(i);
|
||||
}
|
||||
|
||||
// We'll reset the global installMode flag now so that future package
|
||||
// installs that don't go through PackageActivity are not affected.
|
||||
PackageActivity.lastInstallMode = KmpInstallMode.Full;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -16,11 +16,11 @@ import android.view.View;
|
|||
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.keyman.android.KmpInstallMode;
|
||||
import com.stepstone.stepper.StepperLayout;
|
||||
import com.stepstone.stepper.VerificationError;
|
||||
import com.tavultesoft.kmea.KMManager;
|
||||
import com.tavultesoft.kmea.KeyboardEventHandler;
|
||||
import com.tavultesoft.kmea.KmpInstallMode;
|
||||
import com.tavultesoft.kmea.data.Keyboard;
|
||||
import com.tavultesoft.kmea.packages.PackageProcessor;
|
||||
import com.tavultesoft.kmea.packages.LexicalModelPackageProcessor;
|
||||
|
|
@ -47,10 +47,6 @@ public class PackageActivity extends AppCompatActivity implements
|
|||
private StepperLayout mStepperLayout;
|
||||
private StepperAdapter mStepperAdapter;
|
||||
|
||||
// Due to the disconnection between the package install and the welcome
|
||||
// display, this flag currently has to be globally accessible.
|
||||
public static KmpInstallMode lastInstallMode = KmpInstallMode.Full;
|
||||
|
||||
@SuppressLint({"SetJavaScriptEnabled", "InflateParams"})
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
|
|
@ -70,9 +66,7 @@ public class PackageActivity extends AppCompatActivity implements
|
|||
showErrorToast(context, getString(R.string.failed_to_extract));
|
||||
return;
|
||||
}
|
||||
installMode = (KmpInstallMode) bundle.getSerializable("installMode");
|
||||
if(installMode == null) installMode = KmpInstallMode.Full;
|
||||
lastInstallMode = installMode;
|
||||
installMode = KmpInstallMode.fromString(bundle.getString("installMode"));
|
||||
languageID = bundle.getString("language", null);
|
||||
if (languageID != null && !languageID.isEmpty()) {
|
||||
languageList.add(languageID);
|
||||
|
|
|
|||
|
|
@ -151,4 +151,6 @@
|
|||
<string name="no_associated_languages" comment="Notification when a keyboard package doesn't contain languages">Keyboard package aɗika hulfur mnyayeri natǝ kǝ kǝɓa kari natǝ mda ata hara instal wa</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="invalid_metadata" comment="kmp.json metadata file is invalid or missing in package">Metadata aɗi kalkal wa/ku sha akwa package</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="minimum_keyboard_version_not_supported" comment="Notification when keyboard has functionality not supported by current Keyman"> Keyboard requires a newer version of Keyman</string>
|
||||
</resources>
|
||||
|
|
@ -18,6 +18,10 @@
|
|||
<string name="action_install_updates" comment="Menu notification that keyboard or dictionary updates available">Aaf Kesɗitine</string>
|
||||
<!-- Context: Title -->
|
||||
<string name="title_version" comment="Title of Keyman for Android version">Yamre %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 ena naamndii Chrome yamre 57 or walla ko ɓuri ɗum hesɗude.</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="button_update_chrome" comment="Prompt to upgrade Chrome in the Play Store">Hesɗitin Chrome</string>
|
||||
<!-- Context: Textfield prompt (… is the ellipsis character "...") -->
|
||||
<string name="textview_hint" comment="Prompt to start typing">Fuɗɗo tappude ɗoo…</string>
|
||||
<!-- Context: Splash screen (version/copyright info currently disabled -->
|
||||
|
|
@ -56,7 +60,27 @@
|
|||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="install_keyboard_or_dictionary" comment="Menu item to install keyboard or dictionary">Aaf Tappirde walla Saggitorde</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="change_display_language" comment="Menu action to change interface language">Waylu ɗemngal jaytino</string>
|
||||
<string name="change_display_language" comment="Menu action to change interface language">Hollu ɗemngal</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="adjust_keyboard_height" comment="Menu action to adjust keyboard height">Fonndit tooweendi tappirde</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="spacebar_caption" comment="Menu action to set the spacebar caption">Cifol palal boowe</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption -->
|
||||
<string name="spacebar_caption_keyboard" comment="Spacebar caption option - keyboard">Tappirde</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption -->
|
||||
<string name="spacebar_caption_language" comment="Spacebar caption option - language">Ɗemngal</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption -->
|
||||
<string name="spacebar_caption_language_keyboard" comment="Spacebar caption option - language + keyboard">Ɗemngal + Tappirde</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption -->
|
||||
<string name="spacebar_caption_blank" comment="Spacebar caption option - blank">Mehum</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_keyboard" comment="Spacebar caption hint - keyboard">Hollu innde tappirde e palal boowe</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_language" comment="Spacebar caption hint - language">Hollu innde ɗemngal e palal boowe</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_language_keyboard" comment="Spacebar caption hint - language + keyboard">Ɗemngal e tappirɗe e palal boowe</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_blank" comment="Spacebar caption hint - blank">Hoto hollu cifol e palal boowe</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_banner" comment="text suggestions banner">Hollu beywal sahaa kala</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
|
|
@ -87,6 +111,12 @@
|
|||
<string name="added_language_to_keyboard" comment="Notification that a language name is added to a keyboard">Ɓeydii ɗemngal %1$s e %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">Ɗemɗe fof aafaama kisa</string>
|
||||
<!-- Context: Adjust Keyboard Height menu -->
|
||||
<string name="drag_the_keyboard" comment="First line of adjusting keyboard height">Daas tappirde ndee ngam waylude tooweendi</string>
|
||||
<!-- Context: Adjust Keyboard Height menu -->
|
||||
<string name="rotate_the_device" comment="Second line of adjusting keyboard height">Yiiltu kaɓirgol ngol ngam fotndude naddaro e leddaro</string>
|
||||
<!-- Context: Adjust Keyboard Height menu -->
|
||||
<string name="reset_to_defaults" comment="Button to reset to default heights">Artir e Goowaaɗe</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="hint_text" comment="Prompt to type in the browser search bar">Yiylo walla tappu URL</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
|
|
@ -121,4 +151,6 @@
|
|||
<string name="no_associated_languages" comment="Notification when a keyboard package doesn't contain languages">Kaɓɓol tappirɗe alaa ɗemngal jahdowal aafeteengal</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="invalid_metadata" comment="kmp.json metadata file is invalid or missing in package">Metaakeɓe ena ŋakki/njaalɗaani e kaɓɓol</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="minimum_keyboard_version_not_supported" comment="Notification when keyboard has functionality not supported by current Keyman">Tappirde ena naamndii yamre Keyman ɓurnde hesɗude</string>
|
||||
</resources>
|
||||
|
|
|
|||
156
android/KMAPro/kMAPro/src/main/res/values-it-rIT/strings.xml
Normal file
156
android/KMAPro/kMAPro/src/main/res/values-it-rIT/strings.xml
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
<?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">Condividi</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_web" comment="Menu action to open Keyman browser">Browser Web</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_text_size" comment="Menu action to adjust text size">Dimensione Testo</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_overflow" comment="Show additional menu items">Altro</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_clear_text" comment="Menu action to erase text">Cancella Testo</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_info" comment="Menu action to display Keyman help page">Informazioni</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_settings" comment="Menu action to open Settings menu">Impostazioni</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_install_updates" comment="Menu notification that keyboard or dictionary updates available">Installa Aggiornamenti</string>
|
||||
<!-- Context: Title -->
|
||||
<string name="title_version" comment="Title of Keyman for Android version">Versione: %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 richiede la versione 57 di Chrome o superiore.</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="button_update_chrome" comment="Prompt to upgrade Chrome in the Play Store">Aggiorna Chrome</string>
|
||||
<!-- Context: Textfield prompt (… is the ellipsis character "...") -->
|
||||
<string name="textview_hint" comment="Prompt to start typing">Inizia a digitare qui…</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)">Dimensione testo: %1$d</string>
|
||||
<!-- Context: Text Size dialog -->
|
||||
<string name="ic_text_size_up" comment="Make text bigger">Dimensione testo in alto</string>
|
||||
<!-- Context: Text Size dialog -->
|
||||
<string name="ic_text_size_down" comment="Make text smaller">Dimensione del testo giù</string>
|
||||
<!-- Context: Clear Text dialog -->
|
||||
<string name="all_text_will_be_cleared" comment="Erase all the text">\nTutto il testo sarà cancellato\n</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="get_started" comment="Menu for getting started">Per Iniziare</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="add_a_keyboard" comment="Menu item to add a keyboard">Aggiungi una tastiera per la tua lingua</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="enable_system_keyboard" comment="Menu item to enable Keyman as system keyboard">Abilita Keyman come tastiera di sistema</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="set_keyman_as_default" comment="Menu item to set Keyman as default system keyboard">Imposta Keyman come tastiera predefinita</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="more_info" comment="Open the Keyman for Android help page">Maggiori informazioni</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="show_get_started" comment="Show the "Get Started" menu on startup">Mostra \"%1$s\" all\'avvio</string>
|
||||
<!-- Context: Android Storage Permission -->
|
||||
<string name="request_storage_permission" comment="Request storage permission to access keyboard packages"> Per installare pacchetti di tastiera, consentire a Keyman di leggere la memoria esterna.</string>
|
||||
<!-- Context: Android Storage Permission -->
|
||||
<string name="storage_permission_denied" comment="Keyboard package installation may fail since Android storage permission not granted"> La richiesta di autorizzazione all\'archiviazione è stata negata. Potrebbe non essere stato possibile installare il pacchetto tastiera</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="keyman_settings" comment="Settings menu title">Impostazioni</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<plurals name="installed_languages">
|
||||
<item quantity="one">Lingue installate (%1$d)</item>
|
||||
<item quantity="other">Lingue installate (%1$d)</item>
|
||||
</plurals>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="install_keyboard_or_dictionary" comment="Menu item to install keyboard or dictionary">Installa tastiera o dizionario</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="change_display_language" comment="Menu action to change interface language">Visualizza lingua</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="adjust_keyboard_height" comment="Menu action to adjust keyboard height">Regola altezza tastiera</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="spacebar_caption" comment="Menu action to set the spacebar caption">Didascalia barra spaziatrice</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">Lingua</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption -->
|
||||
<string name="spacebar_caption_language_keyboard" comment="Spacebar caption option - language + keyboard">Lingua + Tastiera</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption -->
|
||||
<string name="spacebar_caption_blank" comment="Spacebar caption option - blank">Vuoto</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_keyboard" comment="Spacebar caption hint - keyboard">Mostra il nome della tastiera nella barra spaziatrice</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_language" comment="Spacebar caption hint - language">Mostra il nome della lingua nella barra spaziatrice</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_language_keyboard" comment="Spacebar caption hint - language + keyboard">Lingua e tastiera nella barra spaziatrice</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_blank" comment="Spacebar caption hint - blank">Non mostrare la didascalia sulla barra spaziatrice</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_banner" comment="text suggestions banner">Mostra sempre il banner</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_banner_on" comment="Description when toggle is on">Da attuare</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_banner_off" comment="Description when toggle is off">Quando è spento, mostrato solo quando il testo predittivo è abilitato</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_send_crash_report" comment="permission for sending crash reports">Consenti l\'invio di segnalazioni di crash attraverso la rete</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_send_crash_report_on" comment="Description when toggle is on">Quando acceso, verranno inviate segnalazioni di crash</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_send_crash_report_off" comment="Description when toggle is off">Quando è spento, i report dei crash non verranno inviati</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="install_from_keyman_dot_com" comment="Install package from Keyman server">Installa da keyman.com</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="install_from_local_file" comment="Install package file from local device">Installa da file locale</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="install_from_other_device" comment="Scan QR Code">Installa da un altro dispositivo</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="add_languages_to_installed_keyboard" comment="Install additional languages from a keyboard package">Aggiungi lingue alla tastiera installata</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="add_language_subtext" comment="Additional information for adding another language">(dal pacchetto della tastiera)</string>
|
||||
<!-- Context: Select Package and Select Languages menu -->
|
||||
<string name="title_select_keyboard_package_list" comment="Select a keyboard package to add languages">Seleziona Pacchetto Tastiera</string>
|
||||
<!-- Context: Select Package and Select Languages menu -->
|
||||
<string name="title_select_languages_for_package" comment="Select language names from the keyboard package">Seleziona le lingue per %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">Aggiunta lingua %1$s a %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">Tutte le lingue già installate</string>
|
||||
<!-- Context: Adjust Keyboard Height menu -->
|
||||
<string name="drag_the_keyboard" comment="First line of adjusting keyboard height">Trascina la tastiera per ridimensionare l\'altezza</string>
|
||||
<!-- Context: Adjust Keyboard Height menu -->
|
||||
<string name="rotate_the_device" comment="Second line of adjusting keyboard height">Ruota il dispositivo per regolare verticale e orizzontale</string>
|
||||
<!-- Context: Adjust Keyboard Height menu -->
|
||||
<string name="reset_to_defaults" comment="Button to reset to default heights">Ripristina impostazioni predefinite</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="hint_text" comment="Prompt to type in the browser search bar">Cerca o digita URL</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="title_bookmarks" comment="Title for bookmarks">Segnalibri</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="no_bookmarks" comment="Text when bookmark list is empty">Nessun Segnalibro</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="add_bookmark" comment="Confirmation to add bookmark">Aggiungi Segnalibro</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="hint_title" comment="Page title for saved bookmark">Titolo</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">Impossibile installare il pacchetto %1$s</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="downloading_keyboard_package" comment="Confirmation to download keyboard package filename">Scaricamento pacchetto tastiera\n%1$s…</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="failed_to_extract" comment="Notification that keyboard package failed to unzip">Impossibile estrarre</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="install_keyboard_package" comment="Title to install keyboard package">Installa Tastiera</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="install_predictive_text_package" comment="Title to install dictionary package">Installa Dizionario</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="not_valid_package_file" comment="Notification when invalid package file cannot be installed">%1$s non è un file di pacchetto Keyman valido.\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">Il pacchetto tastiera non ha tastiere ottimizzate al tocco da installare</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="no_new_predictive_text_to_install" comment="Notification when no dictionaries can be installed">Nessun nuovo testo predittivo da installare</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="no_targets_to_install" comment="Notification when a package doesn't contain keyboards or dictionaries">Nessuna tastiera o testo predittivo da installare</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="no_associated_languages" comment="Notification when a keyboard package doesn't contain languages">Il pacchetto tastiera non ha lingue associate da installare</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="invalid_metadata" comment="kmp.json metadata file is invalid or missing in package">Metadati non validi/mancanti nel pacchetto</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="minimum_keyboard_version_not_supported" comment="Notification when keyboard has functionality not supported by current Keyman"> Keyboard requires a newer version of Keyman</string>
|
||||
</resources>
|
||||
158
android/KMAPro/kMAPro/src/main/res/values-pl-rPL/strings.xml
Normal file
158
android/KMAPro/kMAPro/src/main/res/values-pl-rPL/strings.xml
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
<?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">Udostępnij</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_web" comment="Menu action to open Keyman browser">Przeglądarka internetowa</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_text_size" comment="Menu action to adjust text size">Rozmiar tekstu</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_overflow" comment="Show additional menu items">Więcej</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_clear_text" comment="Menu action to erase text">Wyczyść tekst</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_info" comment="Menu action to display Keyman help page">Informacja</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_settings" comment="Menu action to open Settings menu">Ustawienia</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_install_updates" comment="Menu notification that keyboard or dictionary updates available">Zainstaluj aktualizację</string>
|
||||
<!-- Context: Title -->
|
||||
<string name="title_version" comment="Title of Keyman for Android version">Wersja: %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 wymaga wersji Chrome 57 lub nowszej.</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="button_update_chrome" comment="Prompt to upgrade Chrome in the Play Store">Aktualizuj Chrome</string>
|
||||
<!-- Context: Textfield prompt (… is the ellipsis character "...") -->
|
||||
<string name="textview_hint" comment="Prompt to start typing">Zacznij wpisywać tutaj…</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)">Rozmiar tekstu: %1$d</string>
|
||||
<!-- Context: Text Size dialog -->
|
||||
<string name="ic_text_size_up" comment="Make text bigger">Zwiększ rozmiar tekstu</string>
|
||||
<!-- Context: Text Size dialog -->
|
||||
<string name="ic_text_size_down" comment="Make text smaller">Zmniejsz rozmiar tekstu</string>
|
||||
<!-- Context: Clear Text dialog -->
|
||||
<string name="all_text_will_be_cleared" comment="Erase all the text">\nCały tekst zostanie wyczyszczony\n</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="get_started" comment="Menu for getting started">Zacznij</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="add_a_keyboard" comment="Menu item to add a keyboard">Dodaj klawiaturę dla Twojego języka</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="enable_system_keyboard" comment="Menu item to enable Keyman as system keyboard">Włącz klawiaturę jako klawiaturę systemową</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="set_keyman_as_default" comment="Menu item to set Keyman as default system keyboard">Ustaw Keyman jako domyślną klawiaturę</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="more_info" comment="Open the Keyman for Android help page">Więcej informacji</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="show_get_started" comment="Show the "Get Started" menu on startup">Pokaż \"%1$s\" przy starcie</string>
|
||||
<!-- Context: Android Storage Permission -->
|
||||
<string name="request_storage_permission" comment="Request storage permission to access keyboard packages"> Aby zainstalować pakiety klawiatury, zezwól Keyman na odczyt pamięci zewnętrznej.</string>
|
||||
<!-- Context: Android Storage Permission -->
|
||||
<string name="storage_permission_denied" comment="Keyboard package installation may fail since Android storage permission not granted"> Żądanie dostępu do pamięci masowej zostało odrzucone. Może nie zainstalować pakietu klawiatury</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="keyman_settings" comment="Settings menu title">Ustawienia</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<plurals name="installed_languages">
|
||||
<item quantity="one">Zainstalowany język (%1$d)</item>
|
||||
<item quantity="few">Zainstalowane języki (%1$d)</item>
|
||||
<item quantity="many">Zainstalowane języki (%1$d)</item>
|
||||
<item quantity="other">Zainstalowane języki (%1$d)</item>
|
||||
</plurals>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="install_keyboard_or_dictionary" comment="Menu item to install keyboard or dictionary">Zainstaluj klawiaturę lub słownik</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="change_display_language" comment="Menu action to change interface language">Wyświetl język</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="adjust_keyboard_height" comment="Menu action to adjust keyboard height">Dostosuj wysokość klawiatury</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="spacebar_caption" comment="Menu action to set the spacebar caption">Podpis paska spacji</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">Język</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption -->
|
||||
<string name="spacebar_caption_language_keyboard" comment="Spacebar caption option - language + keyboard">Język + Klawiatura</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption -->
|
||||
<string name="spacebar_caption_blank" comment="Spacebar caption option - blank">Puste</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_keyboard" comment="Spacebar caption hint - keyboard">Pokaż nazwę klawiatury na spacji</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_language" comment="Spacebar caption hint - language">Pokaż nazwę języka na spacji</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_language_keyboard" comment="Spacebar caption hint - language + keyboard">Język i klawiatura na pasku kosmicznym</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_blank" comment="Spacebar caption hint - blank">Nie pokazuj podpisu na spacji</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_banner" comment="text suggestions banner">Zawsze pokazuj baner</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_banner_on" comment="Description when toggle is on">Do wdrożenia</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_banner_off" comment="Description when toggle is off">Gdy wyłączone, wyświetlane tylko gdy tekst predykcyjny jest włączony</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_send_crash_report" comment="permission for sending crash reports">Zezwalaj na wysyłanie raportów o awariach przez sieć</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_send_crash_report_on" comment="Description when toggle is on">Kiedy włączone, raporty awarii zostaną wysłane</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_send_crash_report_off" comment="Description when toggle is off">Gdy wyłączone, raporty awarii nie zostaną wysłane</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="install_from_keyman_dot_com" comment="Install package from Keyman server">Zainstaluj z keyman.com</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="install_from_local_file" comment="Install package file from local device">Zainstaluj z pliku lokalnego</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="install_from_other_device" comment="Scan QR Code">Zainstaluj z innego urządzenia</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="add_languages_to_installed_keyboard" comment="Install additional languages from a keyboard package">Dodaj języki do zainstalowanej klawiatury</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="add_language_subtext" comment="Additional information for adding another language">(z pakietu klawiatury)</string>
|
||||
<!-- Context: Select Package and Select Languages menu -->
|
||||
<string name="title_select_keyboard_package_list" comment="Select a keyboard package to add languages">Wybierz pakiet klawiatury</string>
|
||||
<!-- Context: Select Package and Select Languages menu -->
|
||||
<string name="title_select_languages_for_package" comment="Select language names from the keyboard package">Wybierz języki dla %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">Dodano język %1$s do %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">Wszystkie języki są już zainstalowane</string>
|
||||
<!-- Context: Adjust Keyboard Height menu -->
|
||||
<string name="drag_the_keyboard" comment="First line of adjusting keyboard height">Przeciągnij klawiaturę, aby zmienić wysokość</string>
|
||||
<!-- Context: Adjust Keyboard Height menu -->
|
||||
<string name="rotate_the_device" comment="Second line of adjusting keyboard height">Obróć urządzenie, aby dostosować pionowo i poziomo</string>
|
||||
<!-- Context: Adjust Keyboard Height menu -->
|
||||
<string name="reset_to_defaults" comment="Button to reset to default heights">Przywróć domyślne</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="hint_text" comment="Prompt to type in the browser search bar">Wyszukaj lub wpisz adres URL</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="title_bookmarks" comment="Title for bookmarks">Zakładki</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="no_bookmarks" comment="Text when bookmark list is empty">Brak zakładek</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="add_bookmark" comment="Confirmation to add bookmark">Dodaj zakładkę</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="hint_title" comment="Page title for saved bookmark">Tytuł</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="hint_url" comment="Page URL for saved bookmark">Adres Url</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="title_package_failed_to_install" comment="Error dialog title when package failed to install">Pakiet %1$s nie został zainstalowany</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="downloading_keyboard_package" comment="Confirmation to download keyboard package filename">Pobieranie pakietu klawiatury\n%1$s…</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="failed_to_extract" comment="Notification that keyboard package failed to unzip">Nie udało się wyodrębnić</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="install_keyboard_package" comment="Title to install keyboard package">Zainstaluj klawiaturę</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="install_predictive_text_package" comment="Title to install dictionary package">Zainstaluj Słownik</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="not_valid_package_file" comment="Notification when invalid package file cannot be installed">%1$s nie jest prawidłowym plikiem pakietu Keyman.\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">Pakiet klawiatury nie ma zoptymalizowanego dotyku klawiatury do zainstalowania</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="no_new_predictive_text_to_install" comment="Notification when no dictionaries can be installed">Brak nowego predykcyjnego tekstu do zainstalowania</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="no_targets_to_install" comment="Notification when a package doesn't contain keyboards or dictionaries">Brak klawiatury lub tekstu predykcyjnego do zainstalowania</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="no_associated_languages" comment="Notification when a keyboard package doesn't contain languages">Pakiet klawiatury nie ma powiązanych języków do zainstalowania</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="invalid_metadata" comment="kmp.json metadata file is invalid or missing in package">Niepoprawne/brakujące metadane w pakiecie</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="minimum_keyboard_version_not_supported" comment="Notification when keyboard has functionality not supported by current Keyman"> Keyboard requires a newer version of Keyman</string>
|
||||
</resources>
|
||||
156
android/KMAPro/kMAPro/src/main/res/values-pt-rPT/strings.xml
Normal file
156
android/KMAPro/kMAPro/src/main/res/values-pt-rPT/strings.xml
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
<?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">Compartilhar</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_web" comment="Menu action to open Keyman browser">Navegador da Web</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_text_size" comment="Menu action to adjust text size">Tamanho do Texto</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_overflow" comment="Show additional menu items">MAIS</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_clear_text" comment="Menu action to erase text">Limpar Texto</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">Configurações</string>
|
||||
<!-- Context: Menu Action -->
|
||||
<string name="action_install_updates" comment="Menu notification that keyboard or dictionary updates available">Instalar Atualizações</string>
|
||||
<!-- Context: Title -->
|
||||
<string name="title_version" comment="Title of Keyman for Android version">Versão: %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"> O Keyman requer a versão 57 ou mais recente.</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="button_update_chrome" comment="Prompt to upgrade Chrome in the Play Store">Atualizar Chrome</string>
|
||||
<!-- Context: Textfield prompt (… is the ellipsis character "...") -->
|
||||
<string name="textview_hint" comment="Prompt to start typing">Comece a digitar aqui…</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)">Tamanho do texto: %1$d</string>
|
||||
<!-- Context: Text Size dialog -->
|
||||
<string name="ic_text_size_up" comment="Make text bigger">Tamanho do texto para cima</string>
|
||||
<!-- Context: Text Size dialog -->
|
||||
<string name="ic_text_size_down" comment="Make text smaller">Tamanho do texto para baixo</string>
|
||||
<!-- Context: Clear Text dialog -->
|
||||
<string name="all_text_will_be_cleared" comment="Erase all the text">\nTodo o texto será limpo\n</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="get_started" comment="Menu for getting started">Comece Agora</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="add_a_keyboard" comment="Menu item to add a keyboard">Adicione um teclado para o seu idioma</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="enable_system_keyboard" comment="Menu item to enable Keyman as system keyboard">Habilitar Keyman como teclado de todo o sistema</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="set_keyman_as_default" comment="Menu item to set Keyman as default system keyboard">Definir Keyman como teclado padrão</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="more_info" comment="Open the Keyman for Android help page">Mais informações</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="show_get_started" comment="Show the "Get Started" menu on startup">Mostrar \"%1$s\" na inicialização</string>
|
||||
<!-- Context: Android Storage Permission -->
|
||||
<string name="request_storage_permission" comment="Request storage permission to access keyboard packages"> Para instalar pacotes de teclado, permita que o Keyman leia o armazenamento externo.</string>
|
||||
<!-- Context: Android Storage Permission -->
|
||||
<string name="storage_permission_denied" comment="Keyboard package installation may fail since Android storage permission not granted"> A solicitação de permissão de armazenamento foi negada. Pode falhar na instalação do pacote de teclado</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="keyman_settings" comment="Settings menu title">Configurações</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<plurals name="installed_languages">
|
||||
<item quantity="one">Idiomas instalados (%1$d)</item>
|
||||
<item quantity="other">Idiomas instalados (%1$d)</item>
|
||||
</plurals>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="install_keyboard_or_dictionary" comment="Menu item to install keyboard or dictionary">Instalar teclado ou dicionário</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="change_display_language" comment="Menu action to change interface language">Exibir idioma</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="adjust_keyboard_height" comment="Menu action to adjust keyboard height">Ajustar altura do teclado</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="spacebar_caption" comment="Menu action to set the spacebar caption">Barra de espaço</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption -->
|
||||
<string name="spacebar_caption_keyboard" comment="Spacebar caption option - keyboard">Teclado</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption -->
|
||||
<string name="spacebar_caption_language" comment="Spacebar caption option - language">Idioma</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption -->
|
||||
<string name="spacebar_caption_language_keyboard" comment="Spacebar caption option - language + keyboard">Idioma + Teclado</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption -->
|
||||
<string name="spacebar_caption_blank" comment="Spacebar caption option - blank">Vazio</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_keyboard" comment="Spacebar caption hint - keyboard">Mostrar o nome do teclado na barra de espaço</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_language" comment="Spacebar caption hint - language">Mostrar nome do idioma na barra de espaço</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_language_keyboard" comment="Spacebar caption hint - language + keyboard">Idioma e teclado na barra de espaço</string>
|
||||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_blank" comment="Spacebar caption hint - blank">Não mostrar legenda na barra de espaço</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_banner" comment="text suggestions banner">Sempre mostrar banner</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_banner_on" comment="Description when toggle is on">A ser implementado</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_banner_off" comment="Description when toggle is off">Quando desativado, apenas mostrado quando o texto preditivo é ativado</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_send_crash_report" comment="permission for sending crash reports">Permitir o envio de relatórios de erro pela rede</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_send_crash_report_on" comment="Description when toggle is on">Quando ativado, relatórios de falhas serão enviados</string>
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_send_crash_report_off" comment="Description when toggle is off">Quando desativado, relatórios de erros não serão enviados</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="install_from_keyman_dot_com" comment="Install package from Keyman server">Instalar de keyman.com</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="install_from_local_file" comment="Install package file from local device">Instalar a partir do arquivo local</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="install_from_other_device" comment="Scan QR Code">Instalar de outro dispositivo</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="add_languages_to_installed_keyboard" comment="Install additional languages from a keyboard package">Adicionar idiomas ao teclado instalado</string>
|
||||
<!-- Context: Keyman Settings "Install Keyboard or Dictionary" menu -->
|
||||
<string name="add_language_subtext" comment="Additional information for adding another language">(de pacote de teclado)</string>
|
||||
<!-- Context: Select Package and Select Languages menu -->
|
||||
<string name="title_select_keyboard_package_list" comment="Select a keyboard package to add languages">Selecionar Pacote de Teclado</string>
|
||||
<!-- Context: Select Package and Select Languages menu -->
|
||||
<string name="title_select_languages_for_package" comment="Select language names from the keyboard package">Selecione os idiomas para %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">Adicionado idioma %1$s a %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">Todos os idiomas já instalados</string>
|
||||
<!-- Context: Adjust Keyboard Height menu -->
|
||||
<string name="drag_the_keyboard" comment="First line of adjusting keyboard height">Arraste o teclado para redimensionar a altura</string>
|
||||
<!-- Context: Adjust Keyboard Height menu -->
|
||||
<string name="rotate_the_device" comment="Second line of adjusting keyboard height">Gire o dispositivo para ajustar o retrato e a paisagem</string>
|
||||
<!-- Context: Adjust Keyboard Height menu -->
|
||||
<string name="reset_to_defaults" comment="Button to reset to default heights">Restaurar padrões</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="hint_text" comment="Prompt to type in the browser search bar">Pesquise ou digite um endereço</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="title_bookmarks" comment="Title for bookmarks">Favoritos</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="no_bookmarks" comment="Text when bookmark list is empty">Sem Favoritos</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="add_bookmark" comment="Confirmation to add bookmark">Adicionar aos favoritos</string>
|
||||
<!-- Context: Keyman Web Browser -->
|
||||
<string name="hint_title" comment="Page title for saved bookmark">Título</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">O pacote %1$s falhou ao instalar</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="downloading_keyboard_package" comment="Confirmation to download keyboard package filename">Baixando pacote de teclado\n%1$s…</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="failed_to_extract" comment="Notification that keyboard package failed to unzip">Falha ao extrair</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="install_keyboard_package" comment="Title to install keyboard package">Instalar teclado</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="install_predictive_text_package" comment="Title to install dictionary package">Instalar Dicionário</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="not_valid_package_file" comment="Notification when invalid package file cannot be installed">%1$s não é um arquivo de pacote de Keyman.\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">Pacote de teclado não tem teclados otimizados para instalar</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="no_new_predictive_text_to_install" comment="Notification when no dictionaries can be installed">Nenhum texto novo preditivo para instalar</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="no_targets_to_install" comment="Notification when a package doesn't contain keyboards or dictionaries">Nenhum teclado ou texto preditivo para instalar</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="no_associated_languages" comment="Notification when a keyboard package doesn't contain languages">O pacote de teclado não tem idiomas associados para instalar</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="invalid_metadata" comment="kmp.json metadata file is invalid or missing in package">Metadados inválidos/ausentes no pacote</string>
|
||||
<!-- Context: KMP Package strings -->
|
||||
<string name="minimum_keyboard_version_not_supported" comment="Notification when keyboard has functionality not supported by current Keyman"> Keyboard requires a newer version of Keyman</string>
|
||||
</resources>
|
||||
|
|
@ -135,6 +135,9 @@
|
|||
<!-- Context: Keyman Settings menu / Spacebar caption hint -->
|
||||
<string name="spacebar_caption_hint_blank" comment="Spacebar caption hint - blank">Do not show caption on spacebar</string>
|
||||
|
||||
<!-- Context: Keyman Settings menu / Haptic feedback -->
|
||||
<string name="haptic_feedback" comment="haptic feedback on key press">Vibrate when typing</string>
|
||||
|
||||
<!-- Context: Keyman Settings menu -->
|
||||
<string name="show_banner" comment="text suggestions banner">Always show banner</string>
|
||||
|
||||
|
|
|
|||
|
|
@ -141,6 +141,9 @@ function setKeymanLanguage(k) {
|
|||
function setSpacebarText(mode) {
|
||||
keyman.options['spacebarText'] = mode;
|
||||
keyman.osk.show(true);
|
||||
|
||||
// Refresh KMW OSK
|
||||
keyman.correctOSKTextSize();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -238,7 +241,18 @@ function updateKMSelectionRange(start, end) {
|
|||
}
|
||||
}
|
||||
|
||||
var lastKeyTip = null;
|
||||
function oskCreateKeyPreview(x,y,w,h,t) {
|
||||
if(lastKeyTip &&
|
||||
lastKeyTip.t == t &&
|
||||
lastKeyTip.x == x &&
|
||||
lastKeyTip.y == y &&
|
||||
lastKeyTip.w == w &&
|
||||
lastKeyTip.h == h) {
|
||||
return;
|
||||
}
|
||||
lastKeyTip = {x:x,y:y,w:w,h:h,t:t};
|
||||
|
||||
fragmentToggle = (fragmentToggle + 1) % 100;
|
||||
var div = document.createElement('div');
|
||||
div.innerHTML = t;
|
||||
|
|
@ -247,6 +261,7 @@ function oskCreateKeyPreview(x,y,w,h,t) {
|
|||
}
|
||||
|
||||
function oskClearKeyPreview() {
|
||||
lastKeyTip = null;
|
||||
fragmentToggle = (fragmentToggle + 1) % 100;
|
||||
window.location.hash = 'dismissKeyPreview-'+fragmentToggle;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ public class ConfirmDialogFragment extends DialogFragment {
|
|||
KMKeyboardDownloaderActivity.downloadKeyboard(
|
||||
getActivity(), _langId, _kbId,_preparedCloudApiParams);
|
||||
} else {
|
||||
Toast.makeText(getActivity(), "No internet connection", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getActivity(), getActivity().getString(R.string.no_internet_connection), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
break;
|
||||
case DIALOG_TYPE_DELETE_KEYBOARD :
|
||||
|
|
@ -121,7 +121,7 @@ public class ConfirmDialogFragment extends DialogFragment {
|
|||
KMKeyboardDownloaderActivity.downloadLexicalModel(getActivity(),
|
||||
_modelId, _preparedCloudApiParams);
|
||||
} else {
|
||||
Toast.makeText(getActivity(), "No internet connection", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getActivity(), getActivity().getString(R.string.no_internet_connection), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
break;
|
||||
case DIALOG_TYPE_DELETE_MODEL :
|
||||
|
|
|
|||
|
|
@ -41,13 +41,14 @@ public class DisplayLanguages {
|
|||
new DisplayLanguageType(unspecifiedLocale, context.getString(R.string.default_locale)),
|
||||
new DisplayLanguageType("am-ET", "አማርኛ (Amharic)"),
|
||||
new DisplayLanguageType("az-AZ", "Azərbaycanca (Azəricə)"),
|
||||
new DisplayLanguageType("bwr-NT", "Bura-Pabir"),
|
||||
new DisplayLanguageType("bwr-NG", "Bura-Pabir"),
|
||||
new DisplayLanguageType("ff-NG", "Ɗemngal Fulfulde"),
|
||||
new DisplayLanguageType("en", "English"),
|
||||
new DisplayLanguageType("es-419", "Español (Spanish - Latin America)"),
|
||||
new DisplayLanguageType("fr-FR", "French"),
|
||||
new DisplayLanguageType("ha-HG", "Hausa"),
|
||||
new DisplayLanguageType("in-ID", "Indonesian"),
|
||||
new DisplayLanguageType("it-IT", "Italiana"),
|
||||
new DisplayLanguageType("de-DE", "German"),
|
||||
new DisplayLanguageType("kr-NG", "Kanuri"),
|
||||
new DisplayLanguageType("km-KH", "Khmer"),
|
||||
|
|
@ -55,6 +56,8 @@ public class DisplayLanguages {
|
|||
new DisplayLanguageType("mfi-NG", "Mandara (Wandala)"),
|
||||
new DisplayLanguageType("mrt-NG", "Marghi"),
|
||||
new DisplayLanguageType("ann", "Obolo"),
|
||||
new DisplayLanguageType("pl-PL", "Polski (Polish)"),
|
||||
new DisplayLanguageType("pt-PT", "Português do Portugal"),
|
||||
new DisplayLanguageType("ff-ZA", "Pulaar-Fulfulde"), // or Fulah
|
||||
new DisplayLanguageType("shu-latn", "Shuwa (Latin)"),
|
||||
new DisplayLanguageType("hia-NG", "Waha"),
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ final class KMKeyboard extends WebView {
|
|||
@Override
|
||||
public void onLongPress(MotionEvent event) {
|
||||
// This is also called for banner longpresses! Need a way to differentiate the sources.
|
||||
if (subKeysList != null) {
|
||||
if (subKeysList != null && subKeysWindow != null && !subKeysWindow.isShowing()) {
|
||||
showSubKeys(context);
|
||||
return;
|
||||
} else if (KMManager.getGlobeKeyState() == KMManager.GlobeKeyState.GLOBE_KEY_STATE_DOWN) {
|
||||
|
|
@ -276,6 +276,7 @@ final class KMKeyboard extends WebView {
|
|||
@SuppressLint("ClickableViewAccessibility")
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
int action = event.getAction();
|
||||
// JH: I'm not sure if we even USE the suggestionMenuWindow construct anywhere, but either way,
|
||||
// this if block is designed explicitly for handling the subKeysWindow.
|
||||
//
|
||||
|
|
@ -289,16 +290,18 @@ final class KMKeyboard extends WebView {
|
|||
} else {
|
||||
//handleTouchEvent(event);
|
||||
gestureDetector.onTouchEvent(event);
|
||||
if (event.getAction() == MotionEvent.ACTION_UP) {
|
||||
subKeysList = null;
|
||||
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
|
||||
if (subKeysList != null && subKeysWindow == null) {
|
||||
// Display subkeys during move
|
||||
showSubKeys(context);
|
||||
}
|
||||
if (action == MotionEvent.ACTION_MOVE && subKeysList != null && subKeysWindow == null) {
|
||||
// Display subkeys during move
|
||||
showSubKeys(context);
|
||||
}
|
||||
}
|
||||
|
||||
if (action == MotionEvent.ACTION_UP) {
|
||||
// Cleanup popups. #6636
|
||||
dismissKeyPreview(0);
|
||||
dismissSubKeysWindow();
|
||||
}
|
||||
|
||||
return super.onTouchEvent(event);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ import android.os.IBinder;
|
|||
import android.os.Looper;
|
||||
import android.text.InputType;
|
||||
import android.util.Log;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
|
@ -206,6 +207,9 @@ public final class KMManager {
|
|||
protected static String currentBanner = KM_BANNER_STATE_BLANK;
|
||||
|
||||
|
||||
// Special override for when the keyboard may have haptic feedback when typing
|
||||
private static boolean mayHaveHapticFeedback = false;
|
||||
|
||||
// Special override for when keyboard is entering a password text field.
|
||||
// When mayPredictOverride is true, the option {'mayPredict' = false} is set in the lm-layer
|
||||
// regardless what the Settings preference is.
|
||||
|
|
@ -235,6 +239,7 @@ public final class KMManager {
|
|||
public static final String KMKey_FontSource = "source";
|
||||
public static final String KMKey_FontFiles = "files";
|
||||
public static final String KMKey_FontFamily = "family";
|
||||
public static final String KMKey_KMPInstall_Mode = "kmpInstallMode";
|
||||
public static final String KMKey_KeyboardModified = "lastModified";
|
||||
public static final String KMKey_KeyboardRTL = "rtl";
|
||||
public static final String KMKey_KeyboardHeightPortrait = "keyboardHeightPortrait";
|
||||
|
|
@ -1206,6 +1211,20 @@ public final class KMManager {
|
|||
((inputType & InputType.TYPE_MASK_CLASS) == InputType.TYPE_CLASS_PHONE));
|
||||
}
|
||||
|
||||
/**
|
||||
* If the override is true, vibrate when user types on the Keyman keyboard
|
||||
* @param override - boolean
|
||||
*/
|
||||
public static void setHapticFeedback(boolean override) {
|
||||
mayHaveHapticFeedback = override;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of mayHaveHapticFeedback. Default is false
|
||||
* @return boolean
|
||||
*/
|
||||
public static boolean getHapticFeedback() { return mayHaveHapticFeedback; };
|
||||
|
||||
/**
|
||||
* If override is true, embedded KMW crash reports are allowed to be sent to sentry.keyman.com
|
||||
* @param override - boolean
|
||||
|
|
@ -1492,7 +1511,9 @@ public final class KMManager {
|
|||
result2 = SystemKeyboard.setKeyboard(keyboardInfo);
|
||||
|
||||
if (keyboardInfo != null) {
|
||||
registerAssociatedLexicalModel(keyboardInfo.getLanguageID());
|
||||
String languageID = keyboardInfo.getLanguageID();
|
||||
toggleSuggestionBanner(languageID, result1, result2);
|
||||
registerAssociatedLexicalModel(languageID);
|
||||
}
|
||||
|
||||
return (result1 || result2);
|
||||
|
|
@ -1521,19 +1542,7 @@ public final class KMManager {
|
|||
result2 = SystemKeyboard.prepareKeyboardSwitch(packageID, keyboardID, languageID,keyboardName);
|
||||
}
|
||||
|
||||
if(result1 || result2)
|
||||
{
|
||||
//reset banner state if new language has no lexical model
|
||||
if(currentBanner.equals(KMManager.KM_BANNER_STATE_SUGGESTION)
|
||||
&& getAssociatedLexicalModel(languageID)==null)
|
||||
currentBanner = KMManager.KM_BANNER_STATE_BLANK;
|
||||
|
||||
if(result1)
|
||||
InAppKeyboard.setLayoutParams(getKeyboardLayoutParams());
|
||||
if(result2)
|
||||
SystemKeyboard.setLayoutParams(getKeyboardLayoutParams());
|
||||
}
|
||||
|
||||
toggleSuggestionBanner(languageID, result1, result2);
|
||||
registerAssociatedLexicalModel(languageID);
|
||||
|
||||
return (result1 || result2);
|
||||
|
|
@ -2126,6 +2135,21 @@ public final class KMManager {
|
|||
globeKeyState = state;
|
||||
}
|
||||
|
||||
private static void toggleSuggestionBanner(String languageID, boolean inappKeyboardChanged, boolean systemKeyboardChanged) {
|
||||
//reset banner state if new language has no lexical model
|
||||
if (currentBanner.equals(KMManager.KM_BANNER_STATE_SUGGESTION)
|
||||
&& getAssociatedLexicalModel(languageID)==null) {
|
||||
currentBanner = KMManager.KM_BANNER_STATE_BLANK;
|
||||
}
|
||||
|
||||
if(inappKeyboardChanged) {
|
||||
InAppKeyboard.setLayoutParams(getKeyboardLayoutParams());
|
||||
}
|
||||
if(systemKeyboardChanged) {
|
||||
SystemKeyboard.setLayoutParams(getKeyboardLayoutParams());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return if the lock screen is locked (prevents keyboard picker menu from being displayed)
|
||||
* @return boolean
|
||||
|
|
@ -2791,6 +2815,9 @@ public final class KMManager {
|
|||
// Collapse the selection
|
||||
textView.setSelection(start + s.length());
|
||||
textView.endBatchEdit();
|
||||
if (mayHaveHapticFeedback) {
|
||||
textView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -2932,6 +2959,10 @@ public final class KMManager {
|
|||
}
|
||||
|
||||
ic.endBatchEdit();
|
||||
ViewGroup parent = (ViewGroup) SystemKeyboard.getParent();
|
||||
if (parent != null && mayHaveHapticFeedback) {
|
||||
parent.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -428,7 +428,7 @@ public final class KeyboardPickerActivity extends BaseActivity {
|
|||
boolean result = removeKeyboard(context, position);
|
||||
|
||||
if (result) {
|
||||
Toast.makeText(context, "Keyboard deleted", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(context, context.getString(R.string.keyboard_deleted_toast), Toast.LENGTH_SHORT).show();
|
||||
BaseAdapter adapter = (BaseAdapter) listAdapter;
|
||||
if(adapter != null) {
|
||||
adapter.notifyDataSetChanged();
|
||||
|
|
@ -500,7 +500,7 @@ public final class KeyboardPickerActivity extends BaseActivity {
|
|||
|
||||
if (result) {
|
||||
if(!silenceNotification) {
|
||||
Toast.makeText(context, "" + "Model deleted", Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(context, context.getString(R.string.model_deleted), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
KMManager.deregisterLexicalModel(modelID);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
package com.tavultesoft.kmea;
|
||||
|
||||
public enum KmpInstallMode {
|
||||
Silent, // Show no UI while installing a package. Errors may be shown as toasts
|
||||
WelcomeOnly, // Show only the welcome screen after installing a package; language will
|
||||
// be automatically selected if not provided as an input parameter
|
||||
Full; // Show readme, language picker (if applicable), and welcome after install.
|
||||
|
||||
public static KmpInstallMode fromString(String mode) {
|
||||
if(mode == null) return Full;
|
||||
switch(mode.toLowerCase()) {
|
||||
case "silent": return Silent;
|
||||
case "welcomeonly": return WelcomeOnly;
|
||||
case "full": return Full;
|
||||
}
|
||||
return Full;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -140,7 +140,7 @@ public class CloudDownloadMgr{
|
|||
|
||||
CloudApiTypes.CloudDownloadSet _parentSet = getDownloadSetForInternalDownloadId(anInternalDownloadId);
|
||||
if(_parentSet==null) {
|
||||
KMLog.LogError(TAG, "Download with ID " + anInternalDownloadId + " is not available");
|
||||
// Download ID didn't match, so nothing to cleanup
|
||||
return;
|
||||
}
|
||||
_parentSet.setDone(anInternalDownloadId);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,9 @@ import android.widget.Toast;
|
|||
|
||||
import com.tavultesoft.kmea.BaseActivity;
|
||||
import com.tavultesoft.kmea.KMKeyboardDownloaderActivity;
|
||||
import com.tavultesoft.kmea.KMManager;
|
||||
import com.tavultesoft.kmea.KeyboardEventHandler;
|
||||
import com.tavultesoft.kmea.KmpInstallMode;
|
||||
import com.tavultesoft.kmea.R;
|
||||
import com.tavultesoft.kmea.cloud.CloudApiTypes;
|
||||
import com.tavultesoft.kmea.cloud.ICloudDownloadCallback;
|
||||
|
|
@ -88,6 +90,11 @@ public class CloudKeyboardPackageDownloadCallback implements ICloudDownloadCallb
|
|||
languageList.add(languageID);
|
||||
}
|
||||
installedKeyboards.addAll(kbdKMPProcessor.processKMP(kmpFile, unzipPath, PackageProcessor.PP_KEYBOARDS_KEY, languageList));
|
||||
|
||||
// Set "silent install" so cloud updates don't display welcome.htm
|
||||
for(Map<String, String> kbdMap : installedKeyboards) {
|
||||
kbdMap.put(KMManager.KMKey_KMPInstall_Mode, KmpInstallMode.Silent.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,11 @@
|
|||
<item quantity="other">Keyboardyeri</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">Jaktǝ keyboard na bǝlin</string>
|
||||
<!-- Context: Title for list -->
|
||||
<string name="title_languages_settings" comment="List of installed languages">Hulfur mnyayeri natǝ mdǝkǝ hara installari</string>
|
||||
|
|
@ -21,7 +26,7 @@
|
|||
<string name="label_cancel" comment="Button to cancel an action">Awo</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_close" comment="Close a dialog">Harta</string>
|
||||
<!-- Context: Button label -->
|
||||
<!-- Context: Button label. Removed in Keyman 15 -->
|
||||
<string name="label_close_keyman" comment="Close the Keyman application">Hartǝ Keyman</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_forward" comment="Button to go forward">Lǝkǝma</string>
|
||||
|
|
@ -77,6 +82,7 @@
|
|||
<string name="fatal_keyboard_error_short" comment="Error in keyboard (keyboard ID::packageID for language)."> Dametǝdzi akwa keyboard %1$s:%2$s na ar %3$s hulfur mnya.</string>
|
||||
<!-- Context: Query for associated dictionary -->
|
||||
<string name="query_associated_model" comment="Check if there's an available dictionary to download">Akwa pakǝ dictionary na kǝɓa kari kamnyar katsa hara dawunlodi ni</string>
|
||||
<string name="cannot_query_associated_model" comment="Cannot reach server to check if there's an available dictionary to download"> Cannot connect to Keyman server to check for associated dictionary to download</string>
|
||||
<!-- Context: Model Updates -->
|
||||
<string name="confirm_download_model" comment="Confirmation to download a dictionary update">Ga ata bara kara hara dawunlodi ar jili dictionary na ngǝni na bǝlin ni ya?</string>
|
||||
<!-- Context: No associated dictionary found -->
|
||||
|
|
@ -127,8 +133,13 @@
|
|||
<string name="enable_predictions" comment="Enable predictions from the suggestion banner">Vu katsa hamta sauri su natǝ asi</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_label">Dictionari</string>
|
||||
<plurals name="model_count">
|
||||
<item quantity="one">Dictionary</item>
|
||||
<item quantity="other">Dictionaries</item>
|
||||
</plurals>
|
||||
<!-- Context: Language Settings menu substring - Check for available dictionary -->
|
||||
<string name="check_available_model" comment="Check for available dictionary">Pakǝ dictionari na aɗi</string>
|
||||
<string name="check_model_online" comment="Check for dictionaries online">Check for dictionaries online</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_info_header" comment="Dictionary name">Dictionary: %1$s</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
|
|
@ -8,6 +8,11 @@
|
|||
<item quantity="other">Tappirɗe</item>
|
||||
</plurals>
|
||||
<!-- Context: Title for list -->
|
||||
<plurals name="title_other_input_methods">
|
||||
<item quantity="one">Feere Naatnal Woɗnde</item>
|
||||
<item quantity="other">Peeje Naatnal Goɗɗe</item>
|
||||
</plurals>
|
||||
<!-- Context: Title for list -->
|
||||
<string name="title_add_keyboard" comment="Add a new keyboard">Ɓeydu Tappirde Hesere</string>
|
||||
<!-- Context: Title for list -->
|
||||
<string name="title_languages_settings" comment="List of installed languages">Ɗemɗe aafaaɗe</string>
|
||||
|
|
@ -21,9 +26,13 @@
|
|||
<string name="label_cancel" comment="Button to cancel an action">Haaytu</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_close" comment="Close a dialog">Uddu</string>
|
||||
<!-- Context: Button label -->
|
||||
<!-- Context: Button label. Removed in Keyman 15 -->
|
||||
<string name="label_close_keyman" comment="Close the Keyman application">Uddu Keyman</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_forward" comment="Button to go forward">Yeeso</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_next_input_method" comment="Switch to next input method (replaces label_close_keyman)">Feere Naatnal Garowal</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_download" comment="Button to confirm downloading an item">Aawto</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_install" comment="Confirmation to install a package">Aaf</string>
|
||||
|
|
@ -69,8 +78,11 @@
|
|||
<string name="fileprovider_undefined" comment="FileProvider library needed to view help file">Deftordu FileProvider ena soklaa ngam yiyde fiilde ballal: %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">Juumre tappirde halkoore e %1$s: %2$s mo ɗemngal %3$s. Nana loowa tappirde woowaande.</string>
|
||||
<!-- Context: Fatal keyboard error. -->
|
||||
<string name="fatal_keyboard_error_short" comment="Error in keyboard (keyboard ID::packageID for language)."> Juumre e tappirde %1$s:%2$s ɗemngal %3$s language.</string>
|
||||
<!-- Context: Query for associated dictionary -->
|
||||
<string name="query_associated_model" comment="Check if there's an available dictionary to download">Nana ƴeewtoo saggitorde yahdiinde ngam aawtaade</string>
|
||||
<string name="cannot_query_associated_model" comment="Cannot reach server to check if there's an available dictionary to download">Waawaa seŋaade e sarworde Keyman ngam ƴeewtaade so saggitorde aawtoonde ena woodi</string>
|
||||
<!-- Context: Model Updates -->
|
||||
<string name="confirm_download_model" comment="Confirmation to download a dictionary update">Aɗa hatojini e aawtaade yamre sakkitiinde ndee saggitorde?</string>
|
||||
<!-- Context: No associated dictionary found -->
|
||||
|
|
@ -121,8 +133,13 @@
|
|||
<string name="enable_predictions" comment="Enable predictions from the suggestion banner">Hurmin basiyol</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_label">Saggitorde</string>
|
||||
<plurals name="model_count">
|
||||
<item quantity="one">Saggitorde</item>
|
||||
<item quantity="other">Caggitorɗe</item>
|
||||
</plurals>
|
||||
<!-- Context: Language Settings menu substring - Check for available dictionary -->
|
||||
<string name="check_available_model" comment="Check for available dictionary">Yiylo saggitorde woodnde</string>
|
||||
<string name="check_model_online" comment="Check for dictionaries online">Yiylo caggitorɗe e enternet</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_info_header" comment="Dictionary name">Saggitotde: %1$s</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
|
|
|
|||
170
android/KMEA/app/src/main/res/values-it-rIT/strings.xml
Normal file
170
android/KMEA/app/src/main/res/values-it-rIT/strings.xml
Normal file
|
|
@ -0,0 +1,170 @@
|
|||
<?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">Tastiera</item>
|
||||
<item quantity="other">Tastiere</item>
|
||||
</plurals>
|
||||
<!-- Context: Title for list -->
|
||||
<plurals name="title_other_input_methods">
|
||||
<item quantity="one">Altro Metodo Di Ingresso</item>
|
||||
<item quantity="other">Altri Metodi Di Ingresso</item>
|
||||
</plurals>
|
||||
<!-- Context: Title for list -->
|
||||
<string name="title_add_keyboard" comment="Add a new keyboard">Aggiungi Nuova Tastiera</string>
|
||||
<!-- Context: Title for list -->
|
||||
<string name="title_languages_settings" comment="List of installed languages">Lingue Installate</string>
|
||||
<!-- Context: Title for list -->
|
||||
<string name="title_language_settings" comment="Keyman Settings for a language">Impostazioni %1$s</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_add" comment="Button to add an item">Aggiungi</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_back" comment="Button to go back">Indietro</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_cancel" comment="Button to cancel an action">Annulla</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_close" comment="Close a dialog">Chiudi</string>
|
||||
<!-- Context: Button label. Removed in Keyman 15 -->
|
||||
<string name="label_close_keyman" comment="Close the Keyman application">Chiudi Keyman</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_forward" comment="Button to go forward">Avanti</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_next_input_method" comment="Switch to next input method (replaces label_close_keyman)">Metodo Di Ingresso Successivo</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_download" comment="Button to confirm downloading an item">Scarica</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_install" comment="Confirmation to install a package">Installa</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_later" comment="Do an action at a later time">Dopo</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_next" comment="Go to the next screen">Successivo</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">Aggiorna</string>
|
||||
<!-- Context: No internet for updates -->
|
||||
<string name="no_internet_connection" comment="Internet connection missing">No internet connection</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="cannot_connect" comment="Error message when network connection fails">Impossibile connettersi al server Keyman!</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="confirm_delete_keyboard" comment="Confirmation to delete a keyboard">Vuoi eliminare questa tastiera?</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="confirm_download_keyboard" comment="Confirmation to download a keyboard update">Vuoi scaricare l\'ultima versione di questa tastiera?</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="confirm_update" comment="Confirmation to update several resources">Vuoi aggiornare ora tastiere e dizionari?</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="keyboard_updates_channel">Aggiornamenti Risorsa</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="keyboard_updates_available" comment="Notification when resource updates are available">Aggiornamenti Risorse Disponibili</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="update_available" comment="Currently installed version of a resource with an available update">%1$s (Aggiornamento Disponibile)</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="keyboard_update_message" comment="language name: keyboard name"> Aggiornamenti disponibili per la tastiera %1$s: %2$s </string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="dictionary_update_message">Aggiornamenti disponibili per il dizionario %1$s: %2$s </string>
|
||||
<!-- Context: Keyboard Info and Keyboard Settings -->
|
||||
<string name="keyboard_version" comment="Label for keyboard version">Versione tastiera</string>
|
||||
<!-- Context: Keyboard Info and Keyboard Settings -->
|
||||
<string name="help_link" comment="Label for help link">Link di aiuto</string>
|
||||
<!-- Context: Keyboard Info and Keyboard Settings -->
|
||||
<string name="uninstall_keyboard" comment="Label for uninstalling keyboard">Disinstalla tastiera</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"> Scansiona questo codice per caricare questa tastiera\nsu un altro dispositivo</string>
|
||||
<!-- Context: Keyboard Help welcome.htm title -->
|
||||
<string name="welcome_package" comment="Title to welcome.htm page (name and version)">Benvenuto in %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"> Libreria FileProvider necessaria per visualizzare il file d\'aiuto: %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"> Errore fatale della tastiera con %1$s:%2$s per %3$s lingua. Caricamento tastiera predefinita.</string>
|
||||
<!-- Context: Fatal keyboard error. -->
|
||||
<string name="fatal_keyboard_error_short" comment="Error in keyboard (keyboard ID::packageID for language)."> Errore nella tastiera %1$s:%2$s per %3$s lingua.</string>
|
||||
<!-- Context: Query for associated dictionary -->
|
||||
<string name="query_associated_model" comment="Check if there's an available dictionary to download">Controllo del dizionario associato da scaricare</string>
|
||||
<string name="cannot_query_associated_model" comment="Cannot reach server to check if there's an available dictionary to download"> Cannot connect to Keyman server to check for associated dictionary to download</string>
|
||||
<!-- Context: Model Updates -->
|
||||
<string name="confirm_download_model" comment="Confirmation to download a dictionary update">Vuoi scaricare l\'ultima versione di questo dizionario?</string>
|
||||
<!-- Context: No associated dictionary found -->
|
||||
<string name="no_associated_model" comment="Confirmation there's no available dictionary to download">Nessun dizionario da scaricare</string>
|
||||
<!-- Context: Model Updates -->
|
||||
<string name="catalog_unavailable" comment="Notification that the cloud resource catalog can't be updated">Il catalogo delle risorse non è disponibile</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="catalog_download_start_in_background" comment="Notification that the resource catalog update will begin">Aggiornamento catalogo avviato 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"> Il catalogo è ancora in download; riprova tra un attimo!</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 ">Controllo della risorsa</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="keyboard_download_start_in_background" comment="Notification that a keyboard download has started">Scaricamento tastiera avviato in background</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="keyboard_download_is_running_in_background" comment="Notification that a keyboard download is still running">La tastiera selezionata è già in download; riprova tra un momento!</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="keyboard_download_finished" comment="Notification that a keyboard download has finished">Il download della tastiera è terminato!</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="dictionary_download_start_in_background" comment="Notification that a dictionary download has started">Scaricamento del dizionario avviato in background</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="dictionary_download_is_running_in_background" comment="Notification that a dictionary download is still running">Il dizionario selezionato è già in download; riprova tra un momento!</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="dictionary_download_finished" comment="Notification that a dictionary download has finished">Il download del dizionario è terminato.</string>
|
||||
<!-- Context: Background download messages -->
|
||||
<string name="download_failed" comment="Notification that a download failed">Download non riuscito</string>
|
||||
<!-- Context: Background download messages -->
|
||||
<string name="failed_to_retrieve_file" comment="Failed to retrieve downloaded file">Recupero del file scaricato non riuscito</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_check_unavailable" comment="Error message when a Keyman server can't be reached">Accesso al server non riuscito!</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_check_current" comment="Notification that all resources are up to date">"Tutte le risorse sono aggiornate!"</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_failed" comment="Notification that a resource update failed">Una o più risorse non sono state aggiornate!</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_success" comment="Notification that a resource update successfully updated">Risorse aggiornate con successo!</string>
|
||||
<!-- Context: Model Info -->
|
||||
<string name="model_version" comment="Title for a dictionary version">Versione dizionario</string>
|
||||
<!-- Context: Model Info -->
|
||||
<string name="uninstall_model" comment="Label to uninstall a dictionary">Disinstalla dizionario</string>
|
||||
<!-- Context: Model Info -->
|
||||
<string name="confirm_delete_model" comment="Confirmation to delete a dictionary">Vuoi eliminare questo dizionario?</string>
|
||||
<!-- Context: Model Deleted -->
|
||||
<string name="model_deleted" comment="Notification when a dictionary is deleted">Dictionary deleted</string>
|
||||
<!-- Context: Language Settings Keyboard install strings -->
|
||||
<string name="keyboard_install_toast" comment="Notification when a keyboard is installed">%1$s tastiera installata</string>
|
||||
<!-- Context: Language Settings Keyboard uninstall strings -->
|
||||
<string name="keyboard_deleted_toast" comment="Notification when a keyboard is deleted">Keyboard deleted</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="enable_corrections" comment="Enable corrections from the suggestion banner">Abilita correzioni</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="enable_predictions" comment="Enable predictions from the suggestion banner">Abilita previsioni</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_label">Dizionario</string>
|
||||
<plurals name="model_count">
|
||||
<item quantity="one">Dictionary</item>
|
||||
<item quantity="other">Dictionaries</item>
|
||||
</plurals>
|
||||
<!-- Context: Language Settings menu substring - Check for available dictionary -->
|
||||
<string name="check_available_model" comment="Check for available dictionary">Controlla il dizionario disponibile</string>
|
||||
<string name="check_model_online" comment="Check for dictionaries online">Check for dictionaries online</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_info_header" comment="Dictionary name">Dizionario: %1$s</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_picker_header" comment="Dictionaries for a specified language">%1$s dizionari</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_install_toast" comment="Notification when a dictionary is installed">Dizionario installato</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<plurals name="keyboard_count">
|
||||
<item quantity="one">(%1$d tastiera)</item>
|
||||
<item quantity="other">(%1$d tastiere)</item>
|
||||
</plurals>
|
||||
<!-- Context: "Change Display Language" menu -->
|
||||
<string name="default_locale" comment="Use the device's current locale">Locale Predefinito</string>
|
||||
<!-- Context: Content descriptions -->
|
||||
<!-- Context: Content descriptions -->
|
||||
<!-- Context: Popup menu labels -->
|
||||
<string name="label_delete" comment="Confirmation to delete an item">Elimina</string>
|
||||
<!-- Context: Shared preferences name -->
|
||||
<!-- Context: Other strings -->
|
||||
<string name="help_bubble_text">Tocca qui per cambiare la tastiera</string>
|
||||
</resources>
|
||||
|
|
@ -125,6 +125,8 @@
|
|||
<string name="confirm_delete_model" comment="Confirmation to delete a dictionary">តើអ្នកចង់លុបបញ្ជីពាក្យនេះឬ?</string>
|
||||
<!-- Context: Language Settings Keyboard install strings -->
|
||||
<string name="keyboard_install_toast" comment="Notification when a keyboard is installed">បានដំឡើងក្ដារចុច %1$s</string>
|
||||
<!-- Context: Language Settings Keyboard uninstall strings -->
|
||||
<string name="keyboard_deleted_toast" comment="Notification when a keyboard is deleted">ក្ដារចុចត្រូវបានលុបចេញ</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="enable_corrections" comment="Enable corrections from the suggestion banner">បើកការកែពាក្យ</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
|
|
|
|||
178
android/KMEA/app/src/main/res/values-pl-rPL/strings.xml
Normal file
178
android/KMEA/app/src/main/res/values-pl-rPL/strings.xml
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
<?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">Klawiatura</item>
|
||||
<item quantity="few">Klawiatury</item>
|
||||
<item quantity="many">Klawiatur</item>
|
||||
<item quantity="other">Klawiatury</item>
|
||||
</plurals>
|
||||
<!-- Context: Title for list -->
|
||||
<plurals name="title_other_input_methods">
|
||||
<item quantity="one">Inna metoda wprowadzania</item>
|
||||
<item quantity="few">Inne metody wprowadzania</item>
|
||||
<item quantity="many">Inne metody wprowadzania</item>
|
||||
<item quantity="other">Inne metody wprowadzania</item>
|
||||
</plurals>
|
||||
<!-- Context: Title for list -->
|
||||
<string name="title_add_keyboard" comment="Add a new keyboard">Dodaj nową klawiaturę</string>
|
||||
<!-- Context: Title for list -->
|
||||
<string name="title_languages_settings" comment="List of installed languages">Zainstalowane języki</string>
|
||||
<!-- Context: Title for list -->
|
||||
<string name="title_language_settings" comment="Keyman Settings for a language">%1$s Ustawienia</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_add" comment="Button to add an item">Dodaj</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_back" comment="Button to go back">Wróć</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_cancel" comment="Button to cancel an action">Anuluj</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_close" comment="Close a dialog">Zamknij</string>
|
||||
<!-- Context: Button label. Removed in Keyman 15 -->
|
||||
<string name="label_close_keyman" comment="Close the Keyman application">Zamknij Keyman</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_forward" comment="Button to go forward">Przekaż</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_next_input_method" comment="Switch to next input method (replaces label_close_keyman)">Następna metoda wprowadzania</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_download" comment="Button to confirm downloading an item">Pobierz</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_install" comment="Confirmation to install a package">Zainstaluj</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_later" comment="Do an action at a later time">Później</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_next" comment="Go to the next screen">Następny</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">Zaktualizuj</string>
|
||||
<!-- Context: No internet for updates -->
|
||||
<string name="no_internet_connection" comment="Internet connection missing">No internet connection</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="cannot_connect" comment="Error message when network connection fails">Nie można połączyć się z serwerem Keyman!</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="confirm_delete_keyboard" comment="Confirmation to delete a keyboard">Czy chcesz usunąć tę klawiaturę?</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="confirm_download_keyboard" comment="Confirmation to download a keyboard update">Czy chcesz pobrać najnowszą wersję tej klawiatury?</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="confirm_update" comment="Confirmation to update several resources">Czy chcesz teraz zaktualizować klawiatury i słowniki?</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="keyboard_updates_channel">Aktualizacje zasobów</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="keyboard_updates_available" comment="Notification when resource updates are available">Dostępne aktualizacje zasobów</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="update_available" comment="Currently installed version of a resource with an available update">%1$s (Aktualizacja Dostępna)</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="keyboard_update_message" comment="language name: keyboard name"> Aktualizacje dostępne dla klawiatury %1$s: %2$s </string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="dictionary_update_message">Aktualizacje dostępne dla słownika %1$s: %2$s </string>
|
||||
<!-- Context: Keyboard Info and Keyboard Settings -->
|
||||
<string name="keyboard_version" comment="Label for keyboard version">Wersja klawiatury</string>
|
||||
<!-- Context: Keyboard Info and Keyboard Settings -->
|
||||
<string name="help_link" comment="Label for help link">Pomocne linki</string>
|
||||
<!-- Context: Keyboard Info and Keyboard Settings -->
|
||||
<string name="uninstall_keyboard" comment="Label for uninstalling keyboard">Odinstaluj klawiaturę</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"> Zeskanuj ten kod, aby załadować tę klawiaturę\nna innym urządzeniu</string>
|
||||
<!-- Context: Keyboard Help welcome.htm title -->
|
||||
<string name="welcome_package" comment="Title to welcome.htm page (name and version)">Witamy w %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"> Biblioteka FileProvider potrzebna, aby wyświetlić plik pomocy: %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"> Błąd krytycznej klawiatury z %1$s:%2$s dla %3$s języka. Ładowanie domyślnej klawiatury.</string>
|
||||
<!-- Context: Fatal keyboard error. -->
|
||||
<string name="fatal_keyboard_error_short" comment="Error in keyboard (keyboard ID::packageID for language)."> Błąd w klawiaturze %1$s:%2$s dla %3$s języka.</string>
|
||||
<!-- Context: Query for associated dictionary -->
|
||||
<string name="query_associated_model" comment="Check if there's an available dictionary to download">Sprawdzanie dla skojarzonego słownika do pobrania</string>
|
||||
<string name="cannot_query_associated_model" comment="Cannot reach server to check if there's an available dictionary to download"> Cannot connect to Keyman server to check for associated dictionary to download</string>
|
||||
<!-- Context: Model Updates -->
|
||||
<string name="confirm_download_model" comment="Confirmation to download a dictionary update">Czy chcesz pobrać najnowszą wersję tego słownika?</string>
|
||||
<!-- Context: No associated dictionary found -->
|
||||
<string name="no_associated_model" comment="Confirmation there's no available dictionary to download">Brak słownika do pobrania</string>
|
||||
<!-- Context: Model Updates -->
|
||||
<string name="catalog_unavailable" comment="Notification that the cloud resource catalog can't be updated">Katalog zasobów jest niedostępny</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="catalog_download_start_in_background" comment="Notification that the resource catalog update will begin">Aktualizacja katalogu rozpoczęta w tle</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="catalog_download_is_running_in_background" comment="Notification that the resource catalog update is still downloading"> Katalog jest nadal pobierany. Spróbuj ponownie za chwilę!</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 ">Sprawdzanie zasobu</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="keyboard_download_start_in_background" comment="Notification that a keyboard download has started">Pobieranie klawiatury rozpoczęte w tle</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="keyboard_download_is_running_in_background" comment="Notification that a keyboard download is still running">Wybrana klawiatura jest już pobierana. Spróbuj ponownie za chwilę!</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="keyboard_download_finished" comment="Notification that a keyboard download has finished">Pobieranie klawiatury zostało zakończone!</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="dictionary_download_start_in_background" comment="Notification that a dictionary download has started">Pobieranie słownika rozpoczęte w tle</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="dictionary_download_is_running_in_background" comment="Notification that a dictionary download is still running">Wybrany słownik jest już pobierany. Spróbuj ponownie za chwilę!</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="dictionary_download_finished" comment="Notification that a dictionary download has finished">Pobieranie słownika zostało zakończone.</string>
|
||||
<!-- Context: Background download messages -->
|
||||
<string name="download_failed" comment="Notification that a download failed">Pobieranie nie powiodło się</string>
|
||||
<!-- Context: Background download messages -->
|
||||
<string name="failed_to_retrieve_file" comment="Failed to retrieve downloaded file">Nie udało się odzyskać pobranego pliku</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_check_unavailable" comment="Error message when a Keyman server can't be reached">Nie udało się uzyskać dostępu do serwera!</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_check_current" comment="Notification that all resources are up to date">"Wszystkie zasoby są aktualne!"</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_failed" comment="Notification that a resource update failed">Nie udało się zaktualizować jednego lub więcej zasobów!</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_success" comment="Notification that a resource update successfully updated">Zasoby pomyślnie zaktualizowane!</string>
|
||||
<!-- Context: Model Info -->
|
||||
<string name="model_version" comment="Title for a dictionary version">Wersja słownika</string>
|
||||
<!-- Context: Model Info -->
|
||||
<string name="uninstall_model" comment="Label to uninstall a dictionary">Odinstaluj słownik</string>
|
||||
<!-- Context: Model Info -->
|
||||
<string name="confirm_delete_model" comment="Confirmation to delete a dictionary">Czy chcesz usunąć ten słownik?</string>
|
||||
<!-- Context: Model Deleted -->
|
||||
<string name="model_deleted" comment="Notification when a dictionary is deleted">Dictionary deleted</string>
|
||||
<!-- Context: Language Settings Keyboard install strings -->
|
||||
<string name="keyboard_install_toast" comment="Notification when a keyboard is installed">%1$s Zainstalowano klawiaturę</string>
|
||||
<!-- Context: Language Settings Keyboard uninstall strings -->
|
||||
<string name="keyboard_deleted_toast" comment="Notification when a keyboard is deleted">Keyboard deleted</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="enable_corrections" comment="Enable corrections from the suggestion banner">Włącz korekcję</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="enable_predictions" comment="Enable predictions from the suggestion banner">Włącz przewidywania</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_label">Słownik</string>
|
||||
<plurals name="model_count">
|
||||
<item quantity="one">Dictionary</item>
|
||||
<item quantity="few">Dictionaries</item>
|
||||
<item quantity="many">Dictionaries</item>
|
||||
<item quantity="other">Dictionaries</item>
|
||||
</plurals>
|
||||
<!-- Context: Language Settings menu substring - Check for available dictionary -->
|
||||
<string name="check_available_model" comment="Check for available dictionary">Sprawdź dostępne słowniki</string>
|
||||
<string name="check_model_online" comment="Check for dictionaries online">Check for dictionaries online</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_info_header" comment="Dictionary name">Słownik: %1$s</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_picker_header" comment="Dictionaries for a specified language">%1$s słowniki</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_install_toast" comment="Notification when a dictionary is installed">Słownik zainstalowany</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<plurals name="keyboard_count">
|
||||
<item quantity="one">(%1$d klawiatura)</item>
|
||||
<item quantity="few">(%1$d klawiatur)</item>
|
||||
<item quantity="many">(%1$d klawiatur)</item>
|
||||
<item quantity="other">(%1$d klawiatur)</item>
|
||||
</plurals>
|
||||
<!-- Context: "Change Display Language" menu -->
|
||||
<string name="default_locale" comment="Use the device's current locale">Domyślne ustawienia regionalne</string>
|
||||
<!-- Context: Content descriptions -->
|
||||
<!-- Context: Content descriptions -->
|
||||
<!-- Context: Popup menu labels -->
|
||||
<string name="label_delete" comment="Confirmation to delete an item">Usuń</string>
|
||||
<!-- Context: Shared preferences name -->
|
||||
<!-- Context: Other strings -->
|
||||
<string name="help_bubble_text">Dotknij tutaj, aby zmienić klawiaturę</string>
|
||||
</resources>
|
||||
164
android/KMEA/app/src/main/res/values-pt-rPT/strings.xml
Normal file
164
android/KMEA/app/src/main/res/values-pt-rPT/strings.xml
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
<?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">Teclado</item>
|
||||
<item quantity="other">Teclados</item>
|
||||
</plurals>
|
||||
<!-- Context: Title for list -->
|
||||
<plurals name="title_other_input_methods">
|
||||
<item quantity="one">Outro Método de Entrada</item>
|
||||
<item quantity="other">Outros Métodos de Entrada</item>
|
||||
</plurals>
|
||||
<!-- Context: Title for list -->
|
||||
<string name="title_add_keyboard" comment="Add a new keyboard">Adicionar novo teclado</string>
|
||||
<!-- Context: Title for list -->
|
||||
<string name="title_languages_settings" comment="List of installed languages">Idiomas instalados</string>
|
||||
<!-- Context: Title for list -->
|
||||
<string name="title_language_settings" comment="Keyman Settings for a language">Configurações de %1$s</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_add" comment="Button to add an item">Adicionar</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_back" comment="Button to go back">Voltar</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_cancel" comment="Button to cancel an action">Instalar Mais Tarde</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_close" comment="Close a dialog">Fechar</string>
|
||||
<!-- Context: Button label. Removed in Keyman 15 -->
|
||||
<string name="label_close_keyman" comment="Close the Keyman application">Fechar keyman</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_forward" comment="Button to go forward">Avançar</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_next_input_method" comment="Switch to next input method (replaces label_close_keyman)">Próximo método de entrada</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_download" comment="Button to confirm downloading an item">BAIXAR</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_install" comment="Confirmation to install a package">Instalar</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_later" comment="Do an action at a later time">Mais tarde</string>
|
||||
<!-- Context: Button label -->
|
||||
<string name="label_next" comment="Go to the next screen">Próximo</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">Atualizar</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="cannot_connect" comment="Error message when network connection fails">Não foi possível conectar ao servidor Keyman!</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="confirm_delete_keyboard" comment="Confirmation to delete a keyboard">Gostaria de excluir este teclado?</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="confirm_download_keyboard" comment="Confirmation to download a keyboard update">Gostaria de baixar a versão mais recente deste teclado?</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="confirm_update" comment="Confirmation to update several resources">Gostaria de atualizar teclados e dicionários agora?</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="keyboard_updates_channel">Atualizações de Recursos</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="keyboard_updates_available" comment="Notification when resource updates are available">Atualizações de Recursos Disponíveis</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="update_available" comment="Currently installed version of a resource with an available update">%1$s (Atualização Disponível)</string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="keyboard_update_message" comment="language name: keyboard name"> Atualizações disponíveis para o teclado %1$s: %2$s </string>
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="dictionary_update_message">Atualizações disponíveis para o dicionário %1$s: %2$s </string>
|
||||
<!-- Context: Keyboard Info and Keyboard Settings -->
|
||||
<string name="keyboard_version" comment="Label for keyboard version">Versão do teclado</string>
|
||||
<!-- Context: Keyboard Info and Keyboard Settings -->
|
||||
<string name="help_link" comment="Label for help link">Link de ajuda</string>
|
||||
<!-- Context: Keyboard Info and Keyboard Settings -->
|
||||
<string name="uninstall_keyboard" comment="Label for uninstalling keyboard">Desinstalar teclado</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"> Escaneie este código para carregar este teclado\nem outro dispositivo</string>
|
||||
<!-- Context: Keyboard Help welcome.htm title -->
|
||||
<string name="welcome_package" comment="Title to welcome.htm page (name and version)">Bem-vindo(a) ao %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"> Biblioteca de FileProvider necessária para ver o arquivo de ajuda: %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"> Erro fatal de teclado com %1$s:%2$s para %3$s idioma. Carregando o teclado padrão.</string>
|
||||
<!-- Context: Fatal keyboard error. -->
|
||||
<string name="fatal_keyboard_error_short" comment="Error in keyboard (keyboard ID::packageID for language)."> Erro no teclado %1$s:%2$s para %3$s idioma.</string>
|
||||
<!-- Context: Query for associated dictionary -->
|
||||
<string name="query_associated_model" comment="Check if there's an available dictionary to download">Verificando o download do dicionário associado</string>
|
||||
<string name="cannot_query_associated_model" comment="Cannot reach server to check if there's an available dictionary to download"> Cannot connect to Keyman server to check for associated dictionary to download</string>
|
||||
<!-- Context: Model Updates -->
|
||||
<string name="confirm_download_model" comment="Confirmation to download a dictionary update">Gostaria de baixar a versão mais recente deste dicionário?</string>
|
||||
<!-- Context: No associated dictionary found -->
|
||||
<string name="no_associated_model" comment="Confirmation there's no available dictionary to download">Nenhum dicionário para baixar</string>
|
||||
<!-- Context: Model Updates -->
|
||||
<string name="catalog_unavailable" comment="Notification that the cloud resource catalog can't be updated">O catálogo de recursos está indisponível</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="catalog_download_start_in_background" comment="Notification that the resource catalog update will begin">Atualização de catálogo iniciada em segundo plano</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="catalog_download_is_running_in_background" comment="Notification that the resource catalog update is still downloading"> O catálogo ainda está baixando; por favor, tente novamente em alguns instantes!</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 ">Verificando o recurso</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="keyboard_download_start_in_background" comment="Notification that a keyboard download has started">Download do teclado iniciado em segundo plano</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="keyboard_download_is_running_in_background" comment="Notification that a keyboard download is still running">O teclado selecionado já está baixando; por favor, tente novamente daqui a pouco!</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="keyboard_download_finished" comment="Notification that a keyboard download has finished">O download do teclado terminou!</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="dictionary_download_start_in_background" comment="Notification that a dictionary download has started">Download do dicionário iniciado em segundo plano</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="dictionary_download_is_running_in_background" comment="Notification that a dictionary download is still running">O dicionário selecionado já está baixando; por favor, tente novamente mais tarde!</string>
|
||||
<!-- Context: Background download messages-->
|
||||
<string name="dictionary_download_finished" comment="Notification that a dictionary download has finished">O download do dicionário terminou.</string>
|
||||
<!-- Context: Background download messages -->
|
||||
<string name="download_failed" comment="Notification that a download failed">Download falhou</string>
|
||||
<!-- Context: Background download messages -->
|
||||
<string name="failed_to_retrieve_file" comment="Failed to retrieve downloaded file">Falha ao recuperar o arquivo baixado</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_check_unavailable" comment="Error message when a Keyman server can't be reached">Falha ao acessar o servidor!</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_check_current" comment="Notification that all resources are up to date">"Todos os recursos estão atualizados!"</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_failed" comment="Notification that a resource update failed">Um ou mais recursos falharam ao atualizar!</string>
|
||||
<!-- Context: General Updates -->
|
||||
<string name="update_success" comment="Notification that a resource update successfully updated">Recursos atualizados com sucesso!</string>
|
||||
<!-- Context: Model Info -->
|
||||
<string name="model_version" comment="Title for a dictionary version">Versão do dicionário</string>
|
||||
<!-- Context: Model Info -->
|
||||
<string name="uninstall_model" comment="Label to uninstall a dictionary">Desinstalar dicionário</string>
|
||||
<!-- Context: Model Info -->
|
||||
<string name="confirm_delete_model" comment="Confirmation to delete a dictionary">Você gostaria de excluir este dicionário?</string>
|
||||
<!-- Context: Language Settings Keyboard install strings -->
|
||||
<string name="keyboard_install_toast" comment="Notification when a keyboard is installed">Teclado %1$s instalado</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="enable_corrections" comment="Enable corrections from the suggestion banner">Habilitar correções</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="enable_predictions" comment="Enable predictions from the suggestion banner">Habilitar previsões</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_label">Dicionário</string>
|
||||
<plurals name="model_count">
|
||||
<item quantity="one">Dictionary</item>
|
||||
<item quantity="other">Dictionaries</item>
|
||||
</plurals>
|
||||
<!-- Context: Language Settings menu substring - Check for available dictionary -->
|
||||
<string name="check_available_model" comment="Check for available dictionary">Verificar dicionário disponível</string>
|
||||
<string name="check_model_online" comment="Check for dictionaries online">Check for dictionaries online</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_info_header" comment="Dictionary name">Dicionário: %1$s</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_picker_header" comment="Dictionaries for a specified language">%1$s dicionários</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="model_install_toast" comment="Notification when a dictionary is installed">Dicionário instalado</string>
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<plurals name="keyboard_count">
|
||||
<item quantity="one">(%1$d teclado)</item>
|
||||
<item quantity="other">(%1$d teclados)</item>
|
||||
</plurals>
|
||||
<!-- Context: "Change Display Language" menu -->
|
||||
<string name="default_locale" comment="Use the device's current locale">Idioma padrão</string>
|
||||
<!-- Context: Content descriptions -->
|
||||
<!-- Context: Content descriptions -->
|
||||
<!-- Context: Popup menu labels -->
|
||||
<string name="label_delete" comment="Confirmation to delete an item">Excluir</string>
|
||||
<!-- Context: Shared preferences name -->
|
||||
<!-- Context: Other strings -->
|
||||
<string name="help_bubble_text">Toque aqui para alterar o teclado</string>
|
||||
</resources>
|
||||
|
|
@ -68,6 +68,8 @@
|
|||
<!-- Context: Button label -->
|
||||
<string name="label_update" comment="Dialog button to update a resource">Update</string>
|
||||
|
||||
<!-- Context: No internet for updates -->
|
||||
<string name="no_internet_connection" comment="Internet connection missing">No internet connection</string>
|
||||
|
||||
<!-- Context: Keyboard Updates -->
|
||||
<string name="cannot_connect" comment="Error message when network connection fails">Cannot connect to Keyman server!</string>
|
||||
|
|
@ -200,10 +202,15 @@
|
|||
<!-- Context: Model Info -->
|
||||
<string name="confirm_delete_model" comment="Confirmation to delete a dictionary">Would you like to delete this dictionary?</string>
|
||||
|
||||
<!-- Context: Model Deleted -->
|
||||
<string name="model_deleted" comment="Notification when a dictionary is deleted">Dictionary deleted</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 Keyboard uninstall strings -->
|
||||
<string name="keyboard_deleted_toast" comment="Notification when a keyboard is deleted">Keyboard deleted</string>
|
||||
|
||||
<!-- Context: Language Settings menu strings -->
|
||||
<string name="enable_corrections" comment="Enable corrections from the suggestion banner">Enable corrections</string>
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
|
@ -47,6 +47,9 @@ Click on this to [adjust the keyboard height](adjust-keyboard-height).
|
|||
## Spacebar Caption
|
||||
Click on this to [change the displayed keyboard name](spacebar-caption) on the spacebar.
|
||||
|
||||
## Vibrate When Typing
|
||||
When enabled, the Keyman keyboard will provide haptic feedback (vibrate) when the user presses a key and generates output. The default preference is off.
|
||||
|
||||
## Always show banner
|
||||
This toggle is reserved for future features. When off, the text suggestion banner is only displayed when
|
||||
the dictionary is enabled. The language associated with the keyboard must match the language associated with
|
||||
|
|
|
|||
|
|
@ -103,8 +103,9 @@ rem ----------------------------------
|
|||
|
||||
rem Standalone build, so we'll make the environment available to the caller
|
||||
rem Also setup
|
||||
rem Note: Visual Studio 2022 doesn't provide vcvarsall.bat, so we'll have to find a different solution
|
||||
endlocal
|
||||
for /f "usebackq tokens=*" %%i in (`..\..\..\resources\build\vswhere -latest -requires Microsoft.Component.MSBuild -find **\vcvarsall.bat`) do (
|
||||
for /f "usebackq tokens=*" %%i in (`..\..\..\resources\build\vswhere -version [15^,17^) -latest -requires Microsoft.Component.MSBuild -find **\vcvarsall.bat`) do (
|
||||
set VCVARSALL="%%i"
|
||||
)
|
||||
%VCVARSALL% %1
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright: © 2018-2020 SIL International.
|
||||
# Copyright: © 2018-2022 SIL International.
|
||||
# Description: Cross platform build script to compile libkmnkbp, documentation
|
||||
# and tests.
|
||||
# Create Date: 2 Oct 2018
|
||||
|
|
@ -10,20 +10,28 @@ project('keyboardprocessor', 'cpp', 'c',
|
|||
license: 'MIT',
|
||||
default_options : ['buildtype=release',
|
||||
'cpp_std=c++14',
|
||||
'b_vscrt=static_from_buildtype'])
|
||||
'b_vscrt=static_from_buildtype',
|
||||
'warning_level=2'],
|
||||
meson_version: '>=0.45.0')
|
||||
|
||||
message('meson.project_version(): ' + meson.project_version() + '\n')
|
||||
compiler = meson.get_compiler('cpp')
|
||||
|
||||
lib_version = '0.0.0'
|
||||
|
||||
if meson.version().version_compare('>=0.46')
|
||||
py = import('python')
|
||||
python = py.find_installation()
|
||||
else
|
||||
py = import('python3')
|
||||
python = py.find_python()
|
||||
endif
|
||||
|
||||
# Once we can assume meson 0.60 we can delete this
|
||||
# (https://mesonbuild.com/Release-notes-for-0-60-0.html#msvc-compiler-now-assumes-utf8-source-code-by-default)
|
||||
if compiler.get_id() == 'msvc'
|
||||
add_global_arguments('/source-charset:utf-8', language: ['c', 'cpp'])
|
||||
endif
|
||||
|
||||
py = import('python3')
|
||||
python = py.find_python()
|
||||
|
||||
message('host_machine.system(): ' + host_machine.system())
|
||||
message('compiler.get_id(): ' + compiler.get_id())
|
||||
|
||||
|
|
|
|||
|
|
@ -47,13 +47,13 @@ void debug_items::assert_push_entry() {
|
|||
inline
|
||||
void debug_items::push_begin(km_kbp_state_debug_key_info *key_info, uint32_t flags) {
|
||||
assert_push_entry();
|
||||
emplace_back(km_kbp_state_debug_item{ KM_KBP_DEBUG_BEGIN, flags, {*key_info, } });
|
||||
emplace_back(km_kbp_state_debug_item{ KM_KBP_DEBUG_BEGIN, flags, {*key_info, }, { }});
|
||||
}
|
||||
|
||||
inline
|
||||
void debug_items::push_end(uint16_t first_action, uint32_t flags) {
|
||||
assert_push_entry();
|
||||
emplace_back(km_kbp_state_debug_item{ KM_KBP_DEBUG_END, flags, { }, { u"", nullptr, nullptr, { }, first_action } });
|
||||
emplace_back(km_kbp_state_debug_item{ KM_KBP_DEBUG_END, flags, { }, { u"", nullptr, nullptr, { }, first_action, {} } });
|
||||
}
|
||||
|
||||
inline
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@ void KMX_Context::Add(KMX_WCHAR ch)
|
|||
if(pos == MAXCONTEXT - 1)
|
||||
{
|
||||
auto p = incxstr(CurContext);
|
||||
auto n = p - CurContext;
|
||||
memmove(CurContext, p, (MAXCONTEXT - n) * 2);
|
||||
auto n = (int)(p - CurContext);
|
||||
memmove(CurContext, p, (MAXCONTEXT - n) * sizeof(KMX_WCHAR));
|
||||
pos -= n;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -83,14 +83,14 @@ const unsigned long CRCTable[256] = {
|
|||
0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
|
||||
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
|
||||
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
|
||||
};
|
||||
};
|
||||
/*
|
||||
* This routine calculates the CRC for a block of data using the
|
||||
* table lookup method. It accepts an original value for the crc,
|
||||
* and returns the updated value.
|
||||
*/
|
||||
|
||||
static unsigned long CalculateBufferCRC(unsigned long count, KMX_BYTE *p)
|
||||
static unsigned long CalculateBufferCRC(size_t count, KMX_BYTE *p)
|
||||
{
|
||||
unsigned long temp1;
|
||||
unsigned long temp2;
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ private:
|
|||
|
||||
kmx::KMX_DebugItems *m_debug_items;
|
||||
|
||||
INTKEYBOARDINFO m_keyboard = { 0 };
|
||||
INTKEYBOARDINFO m_keyboard = { 0, {}, {}, {} };
|
||||
KMX_DWORD m_modifiers = 0;
|
||||
|
||||
/* File loading */
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ namespace kmx {
|
|||
|
||||
#define Uni_SurrogateToUTF32(ch, cl) (((ch) - 0xD800) * 0x400 + ((cl) - 0xDC00) + 0x10000)
|
||||
|
||||
#define Uni_UTF32ToSurrogate1(ch) (((ch) - 0x10000) / 0x400 + 0xD800)
|
||||
#define Uni_UTF32ToSurrogate2(ch) (((ch) - 0x10000) % 0x400 + 0xDC00)
|
||||
#define Uni_UTF32ToSurrogate1(ch) (char16_t)(((ch) - 0x10000) / 0x400 + 0xD800)
|
||||
#define Uni_UTF32ToSurrogate2(ch) (char16_t)(((ch) - 0x10000) % 0x400 + 0xDC00)
|
||||
|
||||
PKMX_WCHAR incxstr(PKMX_WCHAR p);
|
||||
PKMX_WCHAR decxstr(PKMX_WCHAR p, PKMX_WCHAR pStart);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright: © 2018 SIL International.
|
||||
# Copyright: © 2018-2022 SIL International.
|
||||
# Description: Cross platform build script to compile libkmnkbp.
|
||||
# Create Date: 2 Oct 2018
|
||||
# Authors: Tim Eves (TSE)
|
||||
|
|
@ -9,11 +9,9 @@ version_res = []
|
|||
|
||||
if compiler.get_id() == 'gcc' or compiler.get_id() == 'clang'
|
||||
warns = [
|
||||
'-Wall',
|
||||
'-Wctor-dtor-privacy',
|
||||
'-Wdouble-promotion',
|
||||
'-Wendif-labels',
|
||||
'-Wextra',
|
||||
'-Wno-unknown-pragmas',
|
||||
'-Wno-missing-field-initializers',
|
||||
'-Wnon-virtual-dtor',
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ void actions::push_alert() {
|
|||
inline
|
||||
void actions::push_backspace(km_kbp_backspace_type expected_type, uintptr_t expected_value) {
|
||||
assert(empty() || (!empty() && back().type != KM_KBP_IT_END));
|
||||
km_kbp_action_item item = {KM_KBP_IT_BACK};
|
||||
km_kbp_action_item item = {KM_KBP_IT_BACK, {}, {}};
|
||||
item.backspace.expected_type = expected_type;
|
||||
item.backspace.expected_value = expected_value;
|
||||
emplace_back(item);
|
||||
|
|
|
|||
|
|
@ -217,7 +217,8 @@ public:
|
|||
|
||||
_utf_iterator & operator ++ () { cp += abs(sl); return *this; }
|
||||
|
||||
bool operator == (const _utf_iterator & rhs) const throw() { sz = std::min(ptrdiff_t(rhs.cp - cp),ptrdiff_t(127)); return 0 >= sz; }
|
||||
bool operator == (const _utf_iterator & rhs) const throw() { sz = (int8_t)std::min(ptrdiff_t(rhs.cp - cp),ptrdiff_t(127)); return 0 >= sz;
|
||||
}
|
||||
bool operator != (const _utf_iterator & rhs) const throw() { return !operator==(rhs); }
|
||||
|
||||
reference operator * () const throw() { return *this; }
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ bool action_items(
|
|||
auto act = km_kbp_state_action_items(state, &n);
|
||||
|
||||
for (auto &rhs: expected) {
|
||||
if(--n < 0) {
|
||||
if ((int)--n < 0) {
|
||||
std::cout << "expected longer than actual" << std::endl;
|
||||
print_action_item("next expected item:", rhs);
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ void setup(const char *keyboard) {
|
|||
|
||||
// Ensure the pre-run debug item state is not empty
|
||||
assert(debug_items(test_state, {
|
||||
km_kbp_state_debug_item{KM_KBP_DEBUG_END}
|
||||
km_kbp_state_debug_item{KM_KBP_DEBUG_END, {}, {}, {}}
|
||||
}));
|
||||
|
||||
try_status(km_kbp_context_set(km_kbp_state_context(test_state), citems));
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ bool debug_items(
|
|||
auto act = km_kbp_state_debug_items(state, &n);
|
||||
|
||||
for (auto &rhs: expected) {
|
||||
if(--n < 0) {
|
||||
if ((int)--n < 0) {
|
||||
std::cout << "expected longer than actual" << std::endl;
|
||||
print_debug_item("next expected item:", rhs);
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -4,6 +4,15 @@
|
|||
# Authors: Tim Eves (TSE)
|
||||
#
|
||||
|
||||
if compiler.get_id() == 'gcc' or compiler.get_id() == 'clang'
|
||||
warns = [
|
||||
'-Wno-missing-field-initializers',
|
||||
'-Wno-unused-parameter'
|
||||
]
|
||||
else
|
||||
warns = []
|
||||
endif
|
||||
|
||||
defns=['-DKMN_KBP_STATIC']
|
||||
tests = [
|
||||
['context-api', 'context_api.cpp'],
|
||||
|
|
@ -17,7 +26,7 @@ tests = [
|
|||
|
||||
foreach t : tests
|
||||
bin = executable(t[0], t[1],
|
||||
cpp_args: defns,
|
||||
cpp_args: defns + warns,
|
||||
include_directories: [inc, libsrc],
|
||||
link_args: links,
|
||||
objects: lib.extract_all_objects())
|
||||
|
|
|
|||
|
|
@ -17,6 +17,18 @@
|
|||
|
||||
#include "../test_assert.h"
|
||||
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
#define PRAGMA(X) _Pragma(#X)
|
||||
#define DISABLE_WARNING_PUSH PRAGMA(GCC diagnostic push)
|
||||
#define DISABLE_WARNING_POP PRAGMA(GCC diagnostic pop)
|
||||
#define DISABLE_WARNING(W) PRAGMA(GCC diagnostic ignored #W)
|
||||
#define DISABLE_WARNING_TYPE_LIMITS DISABLE_WARNING(-Wtype-limits)
|
||||
#else
|
||||
#define DISABLE_WARNING_PUSH
|
||||
#define DISABLE_WARNING_POP
|
||||
#define DISABLE_WARNING_TYPE_LIMITS
|
||||
#endif
|
||||
|
||||
namespace
|
||||
{
|
||||
std::string get_json_doc(km_kbp_state const& state)
|
||||
|
|
@ -134,10 +146,14 @@ int main(int argc, char * argv[])
|
|||
|
||||
// Test the engine
|
||||
auto attrs = km_kbp_get_engine_attrs(test_state);
|
||||
|
||||
DISABLE_WARNING_PUSH
|
||||
DISABLE_WARNING_TYPE_LIMITS
|
||||
// Check the lib supplies our required interface.
|
||||
if (attrs->current - attrs->age > KM_KBP_LIB_CURRENT
|
||||
|| attrs->current < KM_KBP_LIB_CURRENT) return __LINE__;
|
||||
if (attrs->max_context < 16) return __LINE__;
|
||||
DISABLE_WARNING_POP
|
||||
|
||||
try_status(km_kbp_process_event(test_state, KM_KBP_VKEY_S,
|
||||
KM_KBP_MODIFIER_SHIFT, 1));
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ using namespace std;
|
|||
#define U_1F609_WINKING_FACE u"\U0001F609"
|
||||
|
||||
PKMX_WCHAR find_ptr_to_last_character(PKMX_WCHAR p_first) {
|
||||
int length = std::u16string(p_first).length();
|
||||
auto length = std::u16string(p_first).length();
|
||||
if (length > 0)
|
||||
return p_first + length - 1;
|
||||
else
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ apply_action(
|
|||
text_store.push_back(Uni_UTF32ToSurrogate1(act.character));
|
||||
text_store.push_back(Uni_UTF32ToSurrogate2(act.character));
|
||||
} else {
|
||||
text_store.push_back(act.character);
|
||||
text_store.push_back((char16_t)act.character);
|
||||
}
|
||||
// std::cout << "char(" << act.character << ") size=" << cp->size() << std::endl;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -208,7 +208,7 @@ KmxTestSource::get_keyboard_options(kmx_options options) {
|
|||
|
||||
key_event
|
||||
KmxTestSource::char_to_event(char ch) {
|
||||
assert(ch >= 32 && ch <= 127);
|
||||
assert(ch >= 32);
|
||||
return {
|
||||
km::kbp::kmx::s_char_to_vkey[(int)ch - 32].vk,
|
||||
(uint16_t)(km::kbp::kmx::s_char_to_vkey[(int)ch - 32].shifted ? KM_KBP_MODIFIER_SHIFT : 0)};
|
||||
|
|
|
|||
|
|
@ -5,6 +5,16 @@
|
|||
# History: 19 Oct 2018 - TSE - Added test for context API functions.
|
||||
#
|
||||
|
||||
if compiler.get_id() == 'gcc' or compiler.get_id() == 'clang'
|
||||
warns = [
|
||||
'-Wno-missing-field-initializers',
|
||||
'-Wno-unused-parameter'
|
||||
]
|
||||
else
|
||||
warns = []
|
||||
endif
|
||||
|
||||
|
||||
if compiler.get_id() == 'emscripten'
|
||||
tests_flags = ['--embed-file', join_paths(meson.current_source_dir(),'@/')]
|
||||
source_path = '/'
|
||||
|
|
@ -18,7 +28,7 @@ endif
|
|||
kmx = executable('kmx',
|
||||
'kmx.cpp',
|
||||
'kmx_test_source.cpp',
|
||||
cpp_args: defns,
|
||||
cpp_args: defns + warns,
|
||||
include_directories: [inc, libsrc],
|
||||
link_args: links + tests_flags,
|
||||
objects: lib.extract_all_objects())
|
||||
|
|
@ -205,7 +215,8 @@ endif
|
|||
# test for km_kbp_keyboard_get_key_list
|
||||
|
||||
key_e = executable('key_list', 'kmx_key_list.cpp',
|
||||
cpp_args: defns,include_directories: [inc, libsrc],
|
||||
cpp_args: defns + warns,
|
||||
include_directories: [inc, libsrc],
|
||||
link_args: links,
|
||||
objects: lib.extract_all_objects())
|
||||
test_kbd = 'kmx_key_list'
|
||||
|
|
@ -217,7 +228,7 @@ if kmcomp.found()
|
|||
input: kbd_src,
|
||||
command: kmcomp_cmd + ['-s', '-d', '@INPUT@', kbd_obj, '@OUTPUT@']
|
||||
)
|
||||
test('key_list', key_e, depends: kbd_log, args: [kbd_obj] )
|
||||
test('key_list', key_e, depends: kbd_log, args: [kbd_obj] )
|
||||
else
|
||||
kbd_obj = join_paths(meson.current_source_dir(), test_kbd) + '.kmx'
|
||||
test('key_list', key_e, args: [kbd_obj] )
|
||||
|
|
@ -226,7 +237,8 @@ endif
|
|||
# test for imx list
|
||||
|
||||
imx_e = executable('imx_list', 'kmx_imx.cpp',
|
||||
cpp_args: defns,include_directories: [inc, libsrc],
|
||||
cpp_args: defns + warns,
|
||||
include_directories: [inc, libsrc],
|
||||
link_args: links,
|
||||
objects: lib.extract_all_objects())
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ int run_tests(char const *prog_name, test<UTF> const (&tests)[N])
|
|||
|
||||
for (auto const & test: tests)
|
||||
{
|
||||
auto const test_num = &test - &tests[0] + 1;
|
||||
auto const test_num = (int)(&test - &tests[0] + 1);
|
||||
size_t res = count_unicode_characters<UTF>(test.str, error);
|
||||
if (test.error >= 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -33,6 +33,45 @@ namespace models {
|
|||
let leftSpans = wordBreaker(context.left || '') || [];
|
||||
let rightSpans = wordBreaker(context.right || '') || [];
|
||||
|
||||
let leftTail: Span;
|
||||
if(leftSpans.length > 0) {
|
||||
leftTail = leftSpans[leftSpans.length - 1];
|
||||
}
|
||||
|
||||
// Handle any desired special handling for directly-pre-caret scenarios - where for this
|
||||
// _specific_ context, we should not make a token division where one normally would exist otherwise.
|
||||
//
|
||||
// One notable example: word-final apostrophe is tokenized separate from preceding text, but
|
||||
// word-internal apostrophe is treated as part of the same word (i.e, English contractions).
|
||||
// But, if the user is editing text and the caret is directly after a caret, there's a notable
|
||||
// chance they may in the middle of typing a contraction. Refer to
|
||||
// https://github.com/keymanapp/keyman/issues/6572.
|
||||
if(leftSpans.length > 1) {
|
||||
const leftTailBase = leftSpans[leftSpans.length - 2];
|
||||
|
||||
// If the final two pre-caret spans are adjacent - without intervening whitespace...
|
||||
if(leftTailBase.end == leftTail.start) {
|
||||
// Ideal: if(leftTailBase is standard-char-class && leftTail is single-quote-class)
|
||||
// But we don't have character class access here; it's all wordbreaker-function internal.
|
||||
// Upon inspection of the wordbreaker data definitions... the single-quote-class is ONLY "'".
|
||||
// So... we'll just be lazy for now and append the `'`.
|
||||
if(leftTail.text == "'") {
|
||||
let mergedSpan: Span = {
|
||||
text: leftTailBase.text + leftTail.text,
|
||||
start: leftTailBase.start,
|
||||
end: leftTail.end,
|
||||
length: leftTailBase.length + leftTail.length
|
||||
};
|
||||
|
||||
leftSpans.pop(); // leftTail
|
||||
leftSpans.pop(); // leftTailBase
|
||||
leftSpans.push(mergedSpan);
|
||||
leftTail = mergedSpan; // don't forget to update the `leftTail` Span!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// With any 'detokenization' cases already handled, we may now begin to build the return object.
|
||||
let tokenization: Tokenization = {
|
||||
left: leftSpans.map(span => span.text),
|
||||
right: rightSpans.map(span => span.text),
|
||||
|
|
@ -43,7 +82,6 @@ namespace models {
|
|||
|
||||
// Now the hard part - determining whether or not the caret caused a token split.
|
||||
if(leftSpans.length > 0 && rightSpans.length > 0) {
|
||||
let leftTail = leftSpans[leftSpans.length - 1];
|
||||
let rightHead = rightSpans[0];
|
||||
|
||||
// If tokenization includes all characters on each side of the caret,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
Issue 6005 Test Keyboard Change History
|
||||
====================
|
||||
|
||||
1.0 (2022-04-11)
|
||||
----------------
|
||||
* Created by SIL Int'l
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
© 2022 SIL Int'l
|
||||
|
||||
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.
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
Issue 6005 test keyboard - model interactions with unmatched final group
|
||||
==============
|
||||
|
||||
Version 1.0
|
||||
|
||||
Description
|
||||
-----------
|
||||
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
|
||||
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Issue 6005 Test Keyboard</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>Issue 6005 Test Keyboard</h1>
|
||||
|
||||
<p>
|
||||
Issue 6005 Test Keyboard 1.0 generated from template.
|
||||
</p>
|
||||
<p>
|
||||
Designed as a test keyboard for specialized cases where an early rule matches but a later-applied keyboard rule on the same keypress does not.
|
||||
Only tolerates two continguous vowels at most; will not emit a third vowel in a row. Does not interfere with consonants or the semi-vowel 'y'.
|
||||
</p>
|
||||
|
||||
<p>©2022 SIL Int'l</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,52 @@
|
|||
c unmatched_final_group_model_interactions_6005 generated from template at 2022-04-11 11:51:48
|
||||
c with name "Vowel Hater"
|
||||
c
|
||||
c This test-oriented keyboard "hates" words with more than two consecutive vowels.
|
||||
c In order to test within-word applications of non-final rule matching with final rule non-matching,
|
||||
c Vowels are NOT emitted by keyboard rule; only by 'default' behavior.
|
||||
c
|
||||
c For test coverage, also really likes duplicating 'y' and 'Y'.
|
||||
|
||||
store(&VERSION) '10.0'
|
||||
store(&NAME) 'Issue 6005 - "Vowel Hater"'
|
||||
store(©RIGHT) '© SIL Int' U+0027 'l'
|
||||
store(&KEYBOARDVERSION) '1.0'
|
||||
store(&TARGETS) 'any'
|
||||
store(&VISUALKEYBOARD) 'unmatched_final_group_model_interactions_6005.kvks'
|
||||
store(&LAYOUTFILE) 'unmatched_final_group_model_interactions_6005.keyman-touch-layout'
|
||||
|
||||
store(vowels) 'aeiouAEIOU' c Doesn't hate 'y' or 'Y'.
|
||||
store(vowel_keys) [K_A] [K_E] [K_I] [K_O] [K_U] \
|
||||
[SHIFT K_A] [SHIFT K_E] [SHIFT K_I] [SHIFT K_O] [SHIFT K_U]
|
||||
store(cons) 'bcdfghjklmn' \
|
||||
'pqrstvwxz' \
|
||||
'BCDFGHJKLMN' \
|
||||
'PQRSTVWXZ'
|
||||
store(cons_keys) [K_B] [K_C] [K_D] [K_F] [K_G] [K_H] \
|
||||
[K_J] [K_K] [K_L] [K_M] [K_N] \
|
||||
[K_P] [K_Q] [K_R] [K_S] [K_T] [K_V] \
|
||||
[K_W] [K_X] [K_Z] \
|
||||
[SHIFT K_B] [SHIFT K_C] [SHIFT K_D] [SHIFT K_F] [SHIFT K_G] [SHIFT K_H] \
|
||||
[SHIFT K_J] [SHIFT K_K] [SHIFT K_L] [SHIFT K_M] [SHIFT K_N] \
|
||||
[SHIFT K_P] [SHIFT K_Q] [SHIFT K_R] [SHIFT K_S] [SHIFT K_T] [SHIFT K_V] \
|
||||
[SHIFT K_W] [SHIFT K_X] [SHIFT K_Z]
|
||||
|
||||
begin Unicode > use(main)
|
||||
|
||||
group(main) using keys
|
||||
+ any(cons_keys) > index(cons, 1)
|
||||
|
||||
c Vowel-hating pass 1
|
||||
+ any(vowel_keys) > use(vowel_tolerance)
|
||||
|
||||
c Semi-vowel love (to test context manip early-match with no-match on later group)
|
||||
+ [K_Y] > 'y' use(vowel_tolerance)
|
||||
+ [SHIFT K_Y] > 'Y' use(vowel_tolerance)
|
||||
|
||||
c Vowel-hating pass 2
|
||||
group(vowel_tolerance) using keys
|
||||
|
||||
c By matching a contiguous vowel pair, further contiguous vowels will be blocked.
|
||||
c Note that 'tolerated' vowels are only emitted due to default behavior.
|
||||
|
||||
any(vowels) any(vowels) + any(vowel_keys) > context
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Package>
|
||||
<System>
|
||||
<KeymanDeveloperVersion>15.0.231.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="">Issue 6005 - "Vowel Hater"</Name>
|
||||
<Copyright URL="">© SIL Int'l</Copyright>
|
||||
<Author URL="">SIL Int'l</Author>
|
||||
<Version URL=""></Version>
|
||||
</Info>
|
||||
<Files>
|
||||
<File>
|
||||
<Name>..\build\unmatched_final_group_model_interactions_6005.kmx</Name>
|
||||
<Description></Description>
|
||||
<CopyLocation>0</CopyLocation>
|
||||
<FileType>.kmx</FileType>
|
||||
</File>
|
||||
<File>
|
||||
<Name>..\build\unmatched_final_group_model_interactions_6005.js</Name>
|
||||
<Description></Description>
|
||||
<CopyLocation>0</CopyLocation>
|
||||
<FileType>.js</FileType>
|
||||
</File>
|
||||
<File>
|
||||
<Name>..\build\unmatched_final_group_model_interactions_6005.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>Issue 6005 - "Vowel Hater"</Name>
|
||||
<ID>unmatched_final_group_model_interactions_6005</ID>
|
||||
<Version>1.0</Version>
|
||||
<Languages>
|
||||
<Language ID="en">English</Language>
|
||||
</Languages>
|
||||
</Keyboard>
|
||||
</Keyboards>
|
||||
<Strings/>
|
||||
</Package>
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<visualkeyboard>
|
||||
<header>
|
||||
<version>10.0</version>
|
||||
<kbdname>unmatched_final_group_model_interactions_6005</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">&</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"><</key>
|
||||
<key vkey="K_PERIOD">></key>
|
||||
<key vkey="K_SLASH">?</key>
|
||||
</layer>
|
||||
</encoding>
|
||||
</visualkeyboard>
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Start Using This (Issue 6005) Test Keyboard</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 This (Issue 6005) Test Keyboard</h1>
|
||||
|
||||
<p>
|
||||
This keyboard will automatically prevent production of vowels
|
||||
immediately following two consecutive vowels by use of rule groupings
|
||||
designed to test issue 6005 for output keys.
|
||||
</p>
|
||||
<p>
|
||||
It will also automatically duplicate any typed 'y' keys, providing
|
||||
behavior useful to test another angle of the same issue.
|
||||
</p>
|
||||
|
||||
<h1>Keyboard Layout</h1>
|
||||
|
||||
<!-- Insert Keyboard Layout Images or HTML here -->
|
||||
<p>Follows the standard US QWERTY layout.</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
<?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_4f5496a37662e0a9f4c58a8fa7f278fe</ID>
|
||||
<Filename>unmatched_final_group_model_interactions_6005.kmn</Filename>
|
||||
<Filepath>source\unmatched_final_group_model_interactions_6005.kmn</Filepath>
|
||||
<FileVersion>1.0</FileVersion>
|
||||
<FileType>.kmn</FileType>
|
||||
<Details>
|
||||
<Name>Issue 6005 - "Vowel Hater"</Name>
|
||||
<Copyright>© SIL Int'l</Copyright>
|
||||
</Details>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_662849508b9a7885735a354908c0a3bb</ID>
|
||||
<Filename>unmatched_final_group_model_interactions_6005.kps</Filename>
|
||||
<Filepath>source\unmatched_final_group_model_interactions_6005.kps</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.kps</FileType>
|
||||
<Details>
|
||||
<Name>Issue 6005 - "Vowel Hater"</Name>
|
||||
<Copyright>© SIL Int'l</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_d84c8aa5318b9595b931fb2cd35a7527</ID>
|
||||
<Filename>unmatched_final_group_model_interactions_6005.kmx</Filename>
|
||||
<Filepath>source\..\build\unmatched_final_group_model_interactions_6005.kmx</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.kmx</FileType>
|
||||
<ParentFileID>id_662849508b9a7885735a354908c0a3bb</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_48f335f84e3dab5d9e453b8239624b48</ID>
|
||||
<Filename>unmatched_final_group_model_interactions_6005.js</Filename>
|
||||
<Filepath>source\..\build\unmatched_final_group_model_interactions_6005.js</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.js</FileType>
|
||||
<ParentFileID>id_662849508b9a7885735a354908c0a3bb</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_880465e1da554f209ca7c05243823415</ID>
|
||||
<Filename>unmatched_final_group_model_interactions_6005.kvk</Filename>
|
||||
<Filepath>source\..\build\unmatched_final_group_model_interactions_6005.kvk</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.kvk</FileType>
|
||||
<ParentFileID>id_662849508b9a7885735a354908c0a3bb</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_356e5d149c1e539356d72698c1e401a6</ID>
|
||||
<Filename>welcome.htm</Filename>
|
||||
<Filepath>source\welcome.htm</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.htm</FileType>
|
||||
<ParentFileID>id_662849508b9a7885735a354908c0a3bb</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_8da344c4cea6f467013357fe099006f5</ID>
|
||||
<Filename>readme.htm</Filename>
|
||||
<Filepath>source\readme.htm</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.htm</FileType>
|
||||
<ParentFileID>id_662849508b9a7885735a354908c0a3bb</ParentFileID>
|
||||
</File>
|
||||
</Files>
|
||||
</KeymanDeveloperProject>
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
<?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_4f5496a37662e0a9f4c58a8fa7f278fe</ID>
|
||||
<Filename>unmatched_final_group_model_interactions_6005.kmn</Filename>
|
||||
<Filepath>source\unmatched_final_group_model_interactions_6005.kmn</Filepath>
|
||||
<FileVersion>1.0</FileVersion>
|
||||
<FileType>.kmn</FileType>
|
||||
<Details>
|
||||
<Name>Issue 6005 - "Vowel Hater"</Name>
|
||||
<Copyright>© SIL Int'l</Copyright>
|
||||
</Details>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_662849508b9a7885735a354908c0a3bb</ID>
|
||||
<Filename>unmatched_final_group_model_interactions_6005.kps</Filename>
|
||||
<Filepath>source\unmatched_final_group_model_interactions_6005.kps</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.kps</FileType>
|
||||
<Details>
|
||||
<Name>Issue 6005 - "Vowel Hater"</Name>
|
||||
<Copyright>© SIL Int'l</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_e85e92b4c5fbf57dc8ae85f00ce5a068</ID>
|
||||
<Filename>unmatched_final_group_model_interactions_6005.kmx</Filename>
|
||||
<Filepath>source\..\build\unmatched_final_group_model_interactions_6005.kmx</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.kmx</FileType>
|
||||
<ParentFileID>id_662849508b9a7885735a354908c0a3bb</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_80197977032e3d5266b571033e0f0ff4</ID>
|
||||
<Filename>unmatched_final_group_model_interactions_6005.js</Filename>
|
||||
<Filepath>source\..\build\unmatched_final_group_model_interactions_6005.js</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.js</FileType>
|
||||
<ParentFileID>id_662849508b9a7885735a354908c0a3bb</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_4e56168448a8471df8611394620e7775</ID>
|
||||
<Filename>unmatched_final_group_model_interactions_6005.kvk</Filename>
|
||||
<Filepath>source\..\build\unmatched_final_group_model_interactions_6005.kvk</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.kvk</FileType>
|
||||
<ParentFileID>id_662849508b9a7885735a354908c0a3bb</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_356e5d149c1e539356d72698c1e401a6</ID>
|
||||
<Filename>welcome.htm</Filename>
|
||||
<Filepath>source\welcome.htm</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.htm</FileType>
|
||||
<ParentFileID>id_662849508b9a7885735a354908c0a3bb</ParentFileID>
|
||||
</File>
|
||||
<File>
|
||||
<ID>id_8da344c4cea6f467013357fe099006f5</ID>
|
||||
<Filename>readme.htm</Filename>
|
||||
<Filepath>source\readme.htm</Filepath>
|
||||
<FileVersion></FileVersion>
|
||||
<FileType>.htm</FileType>
|
||||
<ParentFileID>id_662849508b9a7885735a354908c0a3bb</ParentFileID>
|
||||
</File>
|
||||
</Files>
|
||||
</KeymanDeveloperProject>
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<KeymanDeveloperProjectUser>
|
||||
<ViewState>
|
||||
<tab>1</tab>
|
||||
<showhelp>1</showhelp>
|
||||
<path>C:\keymanapp\keyman\common\test\keyboards\unmatched_final_group_model_interactions_6005\unmatched_final_group_model_interactions_6005.kpj</path>
|
||||
<file ID="id_ce4234903ee2da9404650af1baaeff37" Expanded="1"/>
|
||||
<file ID="id_662849508b9a7885735a354908c0a3bb" Expanded="1"/>
|
||||
</ViewState>
|
||||
<FileStates>
|
||||
<FileState>
|
||||
<ID>id_4f5496a37662e0a9f4c58a8fa7f278fe</ID>
|
||||
<FullPath>C:\keymanapp\keyman\common\test\keyboards\unmatched_final_group_model_interactions_6005\source\unmatched_final_group_model_interactions_6005.kmn</FullPath>
|
||||
<IDEState>
|
||||
<LayoutDisplay102Key>0</LayoutDisplay102Key>
|
||||
<DebugDefaultFont>1</DebugDefaultFont>
|
||||
<DebugFont>Consolas|-9| |0</DebugFont>
|
||||
<CodeFont>Consolas|-9| |0</CodeFont>
|
||||
<CharFont>Consolas|-9| |0</CharFont>
|
||||
</IDEState>
|
||||
<Debug>False</Debug>
|
||||
</FileState>
|
||||
<FileState>
|
||||
<ID>id_662849508b9a7885735a354908c0a3bb</ID>
|
||||
<FullPath>C:\keymanapp\keyman\common\test\keyboards\unmatched_final_group_model_interactions_6005\source\unmatched_final_group_model_interactions_6005.kps</FullPath>
|
||||
</FileState>
|
||||
<FileState>
|
||||
<ID>id_ede98e4633e239f933cbfd1f4e1b766c</ID>
|
||||
<FullPath>C:\keymanapp\keyman\common\test\keyboards\unmatched_final_group_model_interactions_6005\HISTORY.md</FullPath>
|
||||
</FileState>
|
||||
<FileState>
|
||||
<ID>id_53e892b8b41cc4caece1cfd5ef21d6e7</ID>
|
||||
<FullPath>C:\keymanapp\keyman\common\test\keyboards\unmatched_final_group_model_interactions_6005\LICENSE.md</FullPath>
|
||||
</FileState>
|
||||
<FileState>
|
||||
<ID>id_0730bb7c2e8f9ea2438b52e419dd86c9</ID>
|
||||
<FullPath>C:\keymanapp\keyman\common\test\keyboards\unmatched_final_group_model_interactions_6005\README.md</FullPath>
|
||||
</FileState>
|
||||
<FileState>
|
||||
<ID>id_e85e92b4c5fbf57dc8ae85f00ce5a068</ID>
|
||||
<FullPath>C:\keymanapp\keyman\common\test\keyboards\unmatched_final_group_model_interactions_6005\source\..\build\unmatched_final_group_model_interactions_6005.kmx</FullPath>
|
||||
</FileState>
|
||||
<FileState>
|
||||
<ID>id_80197977032e3d5266b571033e0f0ff4</ID>
|
||||
<FullPath>C:\keymanapp\keyman\common\test\keyboards\unmatched_final_group_model_interactions_6005\source\..\build\unmatched_final_group_model_interactions_6005.js</FullPath>
|
||||
</FileState>
|
||||
<FileState>
|
||||
<ID>id_4e56168448a8471df8611394620e7775</ID>
|
||||
<FullPath>C:\keymanapp\keyman\common\test\keyboards\unmatched_final_group_model_interactions_6005\source\..\build\unmatched_final_group_model_interactions_6005.kvk</FullPath>
|
||||
</FileState>
|
||||
<FileState>
|
||||
<ID>id_356e5d149c1e539356d72698c1e401a6</ID>
|
||||
<FullPath>C:\keymanapp\keyman\common\test\keyboards\unmatched_final_group_model_interactions_6005\source\welcome.htm</FullPath>
|
||||
</FileState>
|
||||
<FileState>
|
||||
<ID>id_8da344c4cea6f467013357fe099006f5</ID>
|
||||
<FullPath>C:\keymanapp\keyman\common\test\keyboards\unmatched_final_group_model_interactions_6005\source\readme.htm</FullPath>
|
||||
</FileState>
|
||||
</FileStates>
|
||||
<MRU>
|
||||
<File>
|
||||
<ID>id_MRU0</ID>
|
||||
<Filename>unmatched_final_group_model_interactions_6005.kmn</Filename>
|
||||
<FileType>.kmn</FileType>
|
||||
<FullPath>C:\keymanapp\keyman\common\test\keyboards\unmatched_final_group_model_interactions_6005\source\unmatched_final_group_model_interactions_6005.kmn</FullPath>
|
||||
</File>
|
||||
</MRU>
|
||||
</KeymanDeveloperProjectUser>
|
||||
|
|
@ -139,9 +139,28 @@ namespace com.keyman.text {
|
|||
this.keyboardProcessor.selectLayer(keyEvent);
|
||||
}
|
||||
|
||||
// If it's a key that we 'optimize out' of our fat-finger correction algorithm,
|
||||
// we MUST NOT trigger it for this keystroke.
|
||||
let isOnlyLayerShift = text.Codes.isKnownOSKModifierKey(keyEvent.kName);
|
||||
|
||||
// Best-guess stopgap for possible custom modifier keys.
|
||||
// If a key (1) does not affect the context and (2) shifts the active layer,
|
||||
// we assume it's a modifier key. (Touch keyboards may define custom modifier keys.)
|
||||
//
|
||||
// Note: this could cause an issue in the niche scenario where:
|
||||
// 1. Keypress does not alter the actual context
|
||||
// 2. It DOES emit a deadkey with an earlier processing rule.
|
||||
// 3. The FINAL processing rule does not match.
|
||||
// 4. The key ALSO signals a layer shift.
|
||||
// If any of the four above conditions aren't met - no problem!
|
||||
// So it's a pretty niche scenario.
|
||||
if((ruleBehavior.transcription?.transform as TextTransform).isNoOp() && keyEvent.kNextLayer) {
|
||||
isOnlyLayerShift = true;
|
||||
}
|
||||
|
||||
const keepRuleBehavior = ruleBehavior != null;
|
||||
// Should we swallow any further processing of keystroke events for this keydown-keypress sequence?
|
||||
if(keepRuleBehavior) {
|
||||
if(keepRuleBehavior && !isOnlyLayerShift) {
|
||||
let alternates = this.buildAlternates(ruleBehavior, keyEvent, preInputMock);
|
||||
|
||||
// Now that we've done all the keystroke processing needed, ensure any extra effects triggered
|
||||
|
|
@ -154,7 +173,7 @@ namespace com.keyman.text {
|
|||
if(alternates && alternates.length > 0) {
|
||||
ruleBehavior.transcription.alternates = alternates;
|
||||
}
|
||||
} else {
|
||||
} else if(ruleBehavior == null) {
|
||||
// We need a dummy RuleBehavior for keys which have no output (e.g. Shift)
|
||||
ruleBehavior = new RuleBehavior();
|
||||
ruleBehavior.transcription = outputTarget.buildTranscriptionFrom(outputTarget, null, false);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
"declaration": true,
|
||||
"inlineSources": true,
|
||||
"sourceMap": true,
|
||||
"sourceRoot": "keyman/",
|
||||
"target": "es5",
|
||||
"types": ["node"],
|
||||
"lib": ["es6"],
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ fi
|
|||
# Ensures that the lexical model compiler has been built locally.
|
||||
echo_heading "Preparing Lexical Model Compiler for test use"
|
||||
pushd "$KEYMAN_ROOT/developer/js/"
|
||||
npm run build
|
||||
./build.sh
|
||||
popd
|
||||
|
||||
test-headless ( ) {
|
||||
|
|
|
|||
|
|
@ -548,22 +548,8 @@ namespace com.keyman.keyboards {
|
|||
} else {
|
||||
// Attempt to filter out known non-output keys.
|
||||
// Results in a more optimized distribution.
|
||||
switch(key.baseKeyID) {
|
||||
case 'K_SHIFT':
|
||||
case 'K_LOPT':
|
||||
case 'K_ROPT':
|
||||
case 'K_NUMLOCK': // Often used for numeric layers.
|
||||
case 'K_CAPS':
|
||||
// As these aren't output keys, they shouldn't be possible fat-finger targets.
|
||||
return;
|
||||
default:
|
||||
// Refer to text/codes.ts - these are Keyman-custom "keycodes" used for
|
||||
// layer shifting keys. To be safe, we currently let K_TABBACK and
|
||||
// K_TABFWD through, though we might be able to drop them too.
|
||||
let code = com.keyman.text.Codes[key.baseKeyID];
|
||||
if(code > 50000 && code < 50011) {
|
||||
return;
|
||||
}
|
||||
if(text.Codes.isKnownOSKModifierKey(key.baseKeyID)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
// These represent the within-key distance of the touch from the key's center.
|
||||
|
|
|
|||
|
|
@ -74,6 +74,27 @@ namespace com.keyman.text {
|
|||
codesUS: [
|
||||
['0123456789',';=,-./`', '[\\]\''],
|
||||
[')!@#$%^&*(',':+<_>?~', '{|}"']
|
||||
]
|
||||
],
|
||||
|
||||
isKnownOSKModifierKey(keyID: string): boolean {
|
||||
switch(keyID) {
|
||||
case 'K_SHIFT':
|
||||
case 'K_LOPT':
|
||||
case 'K_ROPT':
|
||||
case 'K_NUMLOCK': // Often used for numeric layers.
|
||||
case 'K_CAPS':
|
||||
return true;
|
||||
default:
|
||||
// Refer to text/codes.ts - these are Keyman-custom "keycodes" used for
|
||||
// layer shifting keys. To be safe, we currently let K_TABBACK and
|
||||
// K_TABFWD through, though we might be able to drop them too.
|
||||
let code = com.keyman.text.Codes[keyID];
|
||||
if(code > 50000 && code < 50011) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -272,10 +272,7 @@ namespace com.keyman.text {
|
|||
matchBehavior.mergeInDefaults(defaultBehavior);
|
||||
}
|
||||
matchBehavior.triggerKeyDefault = false; // We've triggered it successfully.
|
||||
} else {
|
||||
// If null, we must rely on something else (like the browser, in DOM-aware code) to fulfill the default.
|
||||
matchBehavior = null;
|
||||
}
|
||||
} // If null, we must rely on something else (like the browser, in DOM-aware code) to fulfill the default.
|
||||
|
||||
this.keyboardInterface.activeTargetOutput = null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,10 @@ namespace com.keyman.text {
|
|||
}
|
||||
|
||||
public static readonly nil = new TextTransform('', 0, 0);
|
||||
|
||||
public isNoOp(): boolean {
|
||||
return this.insert === '' && this.deleteLeft === 0 && this.deleteRight === 0;
|
||||
}
|
||||
}
|
||||
|
||||
export class Transcription {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
"declaration": true,
|
||||
"inlineSources": true,
|
||||
"sourceMap": true,
|
||||
"sourceRoot": "keyman/",
|
||||
"target": "es5",
|
||||
"types": ["node"],
|
||||
"lib": ["es6"],
|
||||
|
|
|
|||
|
|
@ -334,6 +334,16 @@ namespace correction {
|
|||
ignorePenultimateMatch = true;
|
||||
}
|
||||
|
||||
// Can happen for the first text input after backspace deletes a wordbreaking character,
|
||||
// thus the new input continues a previous word while dropping the empty word after
|
||||
// that prior wordbreaking character.
|
||||
//
|
||||
// We can't handle it reliably from this match state, but a previous entry (without the empty token)
|
||||
// should still be in the cache and will be reliable for this example case.
|
||||
if(tailIndex > 0 && editPath[tailIndex-1] == 'delete' && editPath[tailIndex] == 'substitute') {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Now to check everything in-between: should be exclusively 'match'es.
|
||||
for(let index = 1; index < editPath.length - (ignorePenultimateMatch ? 2 : 1); index++) {
|
||||
if(editPath[index] != 'match') {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ namespace correction {
|
|||
traversal: LexiconTraversal
|
||||
}
|
||||
|
||||
export const QUEUE_NODE_COMPARATOR: any /*models.Comparator<SearchNode>*/ = function(arg1, arg2) { // @ts-ignore
|
||||
export const QUEUE_NODE_COMPARATOR: models.Comparator<SearchNode> = function(arg1, arg2) {
|
||||
return arg1.currentCost - arg2.currentCost;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -383,7 +383,7 @@ class LMLayerWorker {
|
|||
*
|
||||
* @param scope A global scope to install upon.
|
||||
*/
|
||||
static install(scope: any /* DedicatedWorkerGlobalScope */): LMLayerWorker { // @ts-ignore
|
||||
static install(scope: DedicatedWorkerGlobalScope): LMLayerWorker {
|
||||
let worker = new LMLayerWorker({ postMessage: scope.postMessage, importScripts: scope.importScripts.bind(scope) });
|
||||
scope.onmessage = worker.onMessage.bind(worker);
|
||||
worker.self = scope;
|
||||
|
|
|
|||
|
|
@ -31,8 +31,8 @@
|
|||
/**
|
||||
* The signature of self.postMessage(), so that unit tests can mock it.
|
||||
*/
|
||||
type PostMessage = any; //typeof DedicatedWorkerGlobalScope.prototype.postMessage; // @ts-ignore
|
||||
type ImportScripts = any; //typeof DedicatedWorkerGlobalScope.prototype.importScripts; // @ts-ignore
|
||||
type PostMessage = typeof DedicatedWorkerGlobalScope.prototype.postMessage;
|
||||
type ImportScripts = typeof DedicatedWorkerGlobalScope.prototype.importScripts;
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -99,13 +99,15 @@ namespace com.keyman {
|
|||
// Sanitizes the event object (in-place) to remove sensitive information
|
||||
// from the breadcrumbs and url
|
||||
sanitizeEvent(event: any) {
|
||||
event.breadcrumbs.forEach((b: any) => {
|
||||
if (b.category == 'navigation') {
|
||||
let NAVIGATION_PATTERN = /(.*)?(keyboard\.html#[^-]+)-.*/;
|
||||
b.data.from = b.data.from.replace(NAVIGATION_PATTERN, '$1$2');
|
||||
b.data.to = b.data.to.replace(NAVIGATION_PATTERN, '$1$2');
|
||||
}
|
||||
});
|
||||
if (event && event.breadcrumbs) {
|
||||
event.breadcrumbs.forEach((b: any) => {
|
||||
if (b.category == 'navigation') {
|
||||
let NAVIGATION_PATTERN = /(.*)?(keyboard\.html#[^-]+)-.*/;
|
||||
b.data.from = b.data.from.replace(NAVIGATION_PATTERN, '$1$2');
|
||||
b.data.to = b.data.to.replace(NAVIGATION_PATTERN, '$1$2');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (event.request.url) {
|
||||
let URL_PATTERN = /#.*$/;
|
||||
|
|
|
|||
34
crowdin.yml
34
crowdin.yml
|
|
@ -74,18 +74,30 @@ files:
|
|||
- source: /ios/engine/KMEI/KeymanEngine/Classes/en.lproj/ResourceInfoView.strings
|
||||
dest: /ios/engine/ResourceInfoView.strings
|
||||
translation: /ios/engine/KMEI/KeymanEngine/Classes/%osx_code%/%original_file_name%
|
||||
languages_mapping:
|
||||
osx_code:
|
||||
pt-PT: pt-PT.lproj
|
||||
|
||||
- source: /ios/engine/KMEI/KeymanEngine/en.lproj/Localizable.strings
|
||||
dest: /ios/engine/Localizable.strings
|
||||
translation: /ios/engine/KMEI/KeymanEngine/%osx_code%/%original_file_name%
|
||||
languages_mapping:
|
||||
osx_code:
|
||||
pt-PT: pt-PT.lproj
|
||||
|
||||
- source: /ios/engine/KMEI/KeymanEngine/en.lproj/Localizable.stringsdict
|
||||
dest: /ios/engine/Localizable.stringsdict
|
||||
translation: /ios/engine/KMEI/KeymanEngine/%osx_code%/%original_file_name%
|
||||
languages_mapping:
|
||||
osx_code:
|
||||
pt-PT: pt-PT.lproj
|
||||
|
||||
- source: /ios/keyman/Keyman/Keyman/en.lproj/Localizable.strings
|
||||
dest: /ios/app/Localizable.strings
|
||||
translation: /ios/keyman/Keyman/Keyman/%osx_code%/%original_file_name%
|
||||
languages_mapping:
|
||||
osx_code:
|
||||
pt-PT: pt-PT.lproj
|
||||
|
||||
# Linux files
|
||||
|
||||
|
|
@ -94,32 +106,54 @@ files:
|
|||
translation: /linux/keyman-config/locale/%locale_with_underscore%.po
|
||||
type: gettext
|
||||
update_option: update_as_unapproved
|
||||
languages_mapping:
|
||||
locale_with_underscore:
|
||||
shu-latn-n: shu@latin
|
||||
ha: ha
|
||||
|
||||
# macOS files
|
||||
|
||||
- source: /mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/en.lproj/KMAboutWindowController.strings
|
||||
dest: /mac/app/KMAboutWindowController.strings
|
||||
translation: /mac/Keyman4MacIM/Keyman4MacIM/KMAboutWindow/%osx_code%/%original_file_name%
|
||||
languages_mapping:
|
||||
osx_code:
|
||||
pt-PT: pt-PT.lproj
|
||||
|
||||
- source: /mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/en.lproj/preferences.strings
|
||||
dest: /mac/app/preferences.strings
|
||||
translation: /mac/Keyman4MacIM/Keyman4MacIM/KMConfiguration/%osx_code%/%original_file_name%
|
||||
languages_mapping:
|
||||
osx_code:
|
||||
pt-PT: pt-PT.lproj
|
||||
|
||||
- source: /mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/en.lproj/KMInfoWindowController.strings
|
||||
dest: /mac/app/KMInfoWindowController.strings
|
||||
translation: /mac/Keyman4MacIM/Keyman4MacIM/KMInfoWindow/%osx_code%/%original_file_name%
|
||||
languages_mapping:
|
||||
osx_code:
|
||||
pt-PT: pt-PT.lproj
|
||||
|
||||
- source: /mac/Keyman4MacIM/Keyman4MacIM/KMKeyboardHelpWindow/en.lproj/KMKeyboardHelpWindowController.strings
|
||||
dest: /mac/app/KMKeyboardHelpWindowController.strings
|
||||
translation: /mac/Keyman4MacIM/Keyman4MacIM/KMKeyboardHelpWindow/%osx_code%/%original_file_name%
|
||||
languages_mapping:
|
||||
osx_code:
|
||||
pt-PT: pt-PT.lproj
|
||||
|
||||
- source: /mac/Keyman4MacIM/Keyman4MacIM/en.lproj/Localizable.strings
|
||||
dest: /mac/app/Localizable.strings
|
||||
translation: /mac/Keyman4MacIM/Keyman4MacIM/%osx_code%/%original_file_name%
|
||||
languages_mapping:
|
||||
osx_code:
|
||||
pt-PT: pt-PT.lproj
|
||||
|
||||
- source: /mac/Keyman4MacIM/Keyman4MacIM/en.lproj/MainMenu.strings
|
||||
dest: /mac/app/MainMenu.strings
|
||||
translation: /mac/Keyman4MacIM/Keyman4MacIM/%osx_code%/%original_file_name%
|
||||
languages_mapping:
|
||||
osx_code:
|
||||
pt-PT: pt-PT.lproj
|
||||
|
||||
# crowdin parameters descriptions:
|
||||
|
||||
|
|
|
|||
|
|
@ -108,7 +108,6 @@ mv kmtypes.tgz "$KEYMAN_WIX_TEMP_MODELCOMPILER"
|
|||
cd "$KEYMAN_WIX_TEMP_MODELCOMPILER"
|
||||
# package-lock.json wasn't bundled; this is needed to keep dependency versions
|
||||
# consistent.
|
||||
# cp "$KEYMAN_MODELCOMPILER_TEMP/package-lock.json" "$KEYMAN_WIX_TEMP_MODELCOMPILER/"
|
||||
|
||||
# as of npm v8.x, even though we are only working with `dependencies`,
|
||||
# `devDependencies` is still checked, and as these modules are present in
|
||||
|
|
|
|||
|
|
@ -68,7 +68,10 @@
|
|||
"args": [
|
||||
"CPPFLAGS=\"-DG_MESSAGES_DEBUG -I${workspaceFolder}/common/core/desktop/build/arch/debug/include/ -I${workspaceFolder}/common/core/desktop/include/\"",
|
||||
"CFLAGS=\"-g -O0\"",
|
||||
"CXXFLAGS=\"-g -O0\""
|
||||
"CXXFLAGS=\"-g -O0\"",
|
||||
"KEYMAN_PROC_LIBS=\"-L${workspaceFolder}/common/core/desktop/build/arch/debug/src -lkmnkbp0\"",
|
||||
"KEYMAN_PROC_CFLAGS=\"-I${workspaceFolder}/common/core/desktop/build/arch/debug/include -I${workspaceFolder}/common/core/desktop/include\"",
|
||||
"PKG_CONFIG_PATH=${workspaceFolder}/common/core/desktop/build/arch/debug/meson-private"
|
||||
],
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/linux/ibus-keyman"
|
||||
|
|
|
|||
|
|
@ -308,6 +308,15 @@
|
|||
2949146F2738DA6700400732 /* ff-NG */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ff-NG"; path = "ff-NG.lproj/ResourceInfoView.strings"; sourceTree = "<group>"; };
|
||||
294914702738DD7400400732 /* ff-NG */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ff-NG"; path = "ff-NG.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
294914712738DD9700400732 /* ff-NG */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "ff-NG"; path = "ff-NG.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
||||
29BFA75E28293287009FCCC3 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/ResourceInfoView.strings; sourceTree = "<group>"; };
|
||||
29BFA75F282934B4009FCCC3 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
29BFA760282934BB009FCCC3 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = it; path = it.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||
29BFA76A28294746009FCCC3 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/ResourceInfoView.strings; sourceTree = "<group>"; };
|
||||
29BFA76B28294813009FCCC3 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
29BFA76C28294833009FCCC3 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = pl; path = pl.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||
29C1E17128001F7600759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/ResourceInfoView.strings"; sourceTree = "<group>"; };
|
||||
29C1E17228001F8800759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
29C1E17328001FA200759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-PT"; path = "pt-PT.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
||||
377D10DD26846B8900467431 /* SpacebarTextViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacebarTextViewController.swift; sourceTree = "<group>"; };
|
||||
6C0A140E151EA930007FA4AD /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
|
||||
6C0A140F151EA930007FA4AD /* Keyman.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; lineEnding = 0; path = Keyman.xcconfig; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.xcconfig; };
|
||||
|
|
@ -1179,6 +1188,9 @@
|
|||
"zh-Hans",
|
||||
ha,
|
||||
"ff-NG",
|
||||
"pt-PT",
|
||||
it,
|
||||
pl
|
||||
);
|
||||
mainGroup = F243887314BBD43000A3E055;
|
||||
productRefGroup = F243887F14BBD43000A3E055 /* Products */;
|
||||
|
|
@ -1568,6 +1580,9 @@
|
|||
CEEC467E26F2F777009A5B7D /* zh-Hans */,
|
||||
293EA3DD270596B700545EED /* ha */,
|
||||
294914712738DD9700400732 /* ff-NG */,
|
||||
29C1E17328001FA200759EDE /* pt-PT */,
|
||||
29BFA760282934BB009FCCC3 /* it */,
|
||||
29BFA76C28294833009FCCC3 /* pl */
|
||||
);
|
||||
name = Localizable.stringsdict;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -1586,6 +1601,9 @@
|
|||
CEEC467D26F2F76E009A5B7D /* zh-Hans */,
|
||||
293EA3DC2705964200545EED /* ha */,
|
||||
294914702738DD7400400732 /* ff-NG */,
|
||||
29C1E17228001F8800759EDE /* pt-PT */,
|
||||
29BFA75F282934B4009FCCC3 /* it */,
|
||||
29BFA76B28294813009FCCC3 /* pl */
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -1605,6 +1623,9 @@
|
|||
CEEC467526F2F5EE009A5B7D /* zh-Hans */,
|
||||
293EA3DB2705955300545EED /* ha */,
|
||||
2949146F2738DA6700400732 /* ff-NG */,
|
||||
29C1E17128001F7600759EDE /* pt-PT */,
|
||||
29BFA75E28293287009FCCC3 /* it */,
|
||||
29BFA76A28294746009FCCC3 /* pl */
|
||||
);
|
||||
name = ResourceInfoView.xib;
|
||||
sourceTree = "<group>";
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ class KeymanWebViewController: UIViewController {
|
|||
let storage: Storage
|
||||
weak var delegate: KeymanWebDelegate?
|
||||
private var useSpecialFont = false
|
||||
private var userContentController = WKUserContentController()
|
||||
private let keymanWebViewName: String = "keyman"
|
||||
|
||||
// Views
|
||||
var webView: KeymanWebView?
|
||||
|
|
@ -120,11 +122,8 @@ class KeymanWebViewController: UIViewController {
|
|||
prefs.javaScriptEnabled = true
|
||||
config.preferences = prefs
|
||||
config.suppressesIncrementalRendering = false
|
||||
|
||||
let userContentController = WKUserContentController()
|
||||
userContentController.add(self, name: "keyman")
|
||||
config.userContentController = userContentController
|
||||
|
||||
config.userContentController = self.userContentController
|
||||
|
||||
webView = KeymanWebView(frame: CGRect(origin: .zero, size: keyboardSize), configuration: config)
|
||||
webView!.isOpaque = false
|
||||
webView!.translatesAutoresizingMaskIntoConstraints = false
|
||||
|
|
@ -150,6 +149,7 @@ class KeymanWebViewController: UIViewController {
|
|||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
self.userContentController.add(self, name: keymanWebViewName)
|
||||
}
|
||||
|
||||
// Very useful for immediately adjusting the WebView's properties upon loading.
|
||||
|
|
@ -160,6 +160,10 @@ class KeymanWebViewController: UIViewController {
|
|||
// keyboard's width will be set at this stage, but not in viewWillAppear.
|
||||
keyboardSize = view.bounds.size
|
||||
}
|
||||
|
||||
override func viewWillDisappear(_ animated: Bool) {
|
||||
self.userContentController.removeScriptMessageHandler(forName: keymanWebViewName)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - JavaScript functions
|
||||
|
|
|
|||
|
|
@ -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" = "Scansiona questo codice per caricare questa tastiera su un altro dispositivo";
|
||||
|
|
@ -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" = "Zeskanuj ten kod, aby załadować klawiaturę na innym urządzeniu";
|
||||
|
|
@ -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" = "Digitalize este código para carregar este teclado em outro dispositivo";
|
||||
|
|
@ -49,6 +49,12 @@
|
|||
/* Confirmation text to display before uninstalling a lexical model */
|
||||
"command-uninstall-lexical-model-confirm" = "Aɗa yiɗnoo aaftude ndee saggitorde?";
|
||||
|
||||
/* Text for error when a keyboard cannot load properly */
|
||||
"error-loading-keyboard" = "Horiima loowde tappirde ɗaɓɓaande ndee";
|
||||
|
||||
/* Text for error when a lexical model cannot load properly */
|
||||
"error-loading-lexical-model" = "Horiima loowde saggitorde ɗaɓɓaande ndee";
|
||||
|
||||
/* Text for error when an installed file is unexpectedly missing */
|
||||
"error-missing-file" = "Fiilde waɗɗiinde horaama yiyteede.";
|
||||
|
||||
|
|
@ -112,12 +118,21 @@
|
|||
/* Error opening a Keyman package - package is not valid */
|
||||
"kmp-error-invalid" = "Fiilde haɓɓere ndee ko ñokkolinnde.";
|
||||
|
||||
/* Error opening a Keyman package - it does not exist / the specified location is wrong */
|
||||
"kmp-error-missing" = "Haɓɓere joofaande ndee woodaani.";
|
||||
|
||||
/* Error installing a Keyman package - expected resource (keyboard or dictionary) is missing */
|
||||
"kmp-error-missing-resource" = "Haɓɓere ndee alaa tappirde walla saggitorde ɗaɓɓitaande ndee.";
|
||||
|
||||
/* Error installing a Keyman package with a version of Keyman that does not support it */
|
||||
"kmp-error-unsupported-keyman-version" = "Ndee haɓɓere ena naamndii yamre Keyman hesere.";
|
||||
|
||||
/* Error opening a Keyman package - cannot parse contents */
|
||||
"kmp-error-no-metadata" = "Haɓɓere ndee mahiraaka no haanirta - loowdi anndaaka.";
|
||||
|
||||
/* Error opening a Keyman package - package's contents are for desktop platforms only */
|
||||
"kmp-error-unsupported" = "Ndee haɓɓere jaaɓdaani e kaɓirgol maa.";
|
||||
|
||||
/* Error opening a Keyman package - package contains unexpected resource (keyboard or dictionary) type */
|
||||
"kmp-error-wrong-type" = "Ndee heɓɓere alaa fannu jogaaɗe tijjaaɗo oo.";
|
||||
|
||||
|
|
@ -181,6 +196,36 @@
|
|||
/* Title for the main Settings menu */
|
||||
"menu-settings-title" = "Teelte Keyman";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - blank */
|
||||
"menu-settings-spacebar-hint-blank" = "Hoto hollu cifol e palal boowe";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - keyboard */
|
||||
"menu-settings-spacebar-hint-keyboard" = "Hollu innde tappirde e palal boowe";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - language */
|
||||
"menu-settings-spacebar-hint-language" = "Hollu innde ɗemngal e palal boowe";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - language + keyboard */
|
||||
"menu-settings-spacebar-hint-languageKeyboard" = "Hollu innde ɗemngal e tappirɗe e palal boowe";
|
||||
|
||||
/* Label for the "Spacebar Caption" item on the main settings screen */
|
||||
"menu-settings-spacebar-text" = "Cifol Palal Boowe";
|
||||
|
||||
/* Title for the "Spacebar Caption" settings screen */
|
||||
"menu-settings-spacebar-title" = "Cifol Palal Boowe";
|
||||
|
||||
/* Text showing name of spacebar caption - blank */
|
||||
"menu-settings-spacebar-item-blank" = "Mehum";
|
||||
|
||||
/* Text showing name of spacebar caption - keyboard */
|
||||
"menu-settings-spacebar-item-keyboard" = "Tappirde";
|
||||
|
||||
/* Text showing name of spacebar caption - language */
|
||||
"menu-settings-spacebar-item-language" = "Ɗemngal";
|
||||
|
||||
/* Text showing name of spacebar caption - language + keyboard */
|
||||
"menu-settings-spacebar-item-languageKeyboard" = "Ɗemngal e tappirde";
|
||||
|
||||
/* Short text for notification: download failure for keyboard */
|
||||
"notification-download-failure-keyboard" = "Aawtagol tappirde woorii";
|
||||
|
||||
|
|
|
|||
257
ios/engine/KMEI/KeymanEngine/it.lproj/Localizable.strings
Normal file
257
ios/engine/KMEI/KeymanEngine/it.lproj/Localizable.strings
Normal file
|
|
@ -0,0 +1,257 @@
|
|||
/* A descriptive message used for errors when the app is already busy downloading */
|
||||
"alert-download-error-busy" = "Già occupato a scaricare.";
|
||||
|
||||
/* A descriptive message used when a download fails */
|
||||
"alert-download-error-detail" = "Si è verificato un errore durante il download o l'installazione.";
|
||||
|
||||
/* Title for a "download failed" alert */
|
||||
"alert-download-error-title" = "Errore di download";
|
||||
|
||||
/* Title for a general alert about errors */
|
||||
"alert-error-title" = "Errore";
|
||||
|
||||
/* A descriptive message used when no internet connection is detected */
|
||||
"alert-no-connection-detail" = "Impossibile raggiungere il server Keyman. Riprova più tardi.";
|
||||
|
||||
/* Title for a "no connection" alert */
|
||||
"alert-no-connection-title" = "Errore Di Connessione";
|
||||
|
||||
/* Short text for a 'back' navigational command. Used to return to the previous screen */
|
||||
"command-back" = "Indietro";
|
||||
|
||||
/* Short text for a 'cancel' command. Used to back out of a menu or install process without making changes */
|
||||
"command-cancel" = "Annulla";
|
||||
|
||||
/* Short text for a 'done' command. Used to back out of settings menus after changes have been made */
|
||||
"command-done" = "Fatto";
|
||||
|
||||
/* Short text for an 'install' command. Used to confirm installation of a package. */
|
||||
"command-install" = "Installa";
|
||||
|
||||
/* Short text for a 'next' navigational command. Used to advance to the next screen */
|
||||
"command-next" = "Successivo";
|
||||
|
||||
/* Short text for an 'OK' command. Used for some error alerts */
|
||||
"command-ok" = "OK";
|
||||
|
||||
/* Short text for confirmining 'uninstall' commands. */
|
||||
"command-uninstall" = "Disinstalla";
|
||||
|
||||
/* Text for the command to uninstall a keyboard */
|
||||
"command-uninstall-keyboard" = "Disinstalla tastiera";
|
||||
|
||||
/* Confirmation text to display before uninstalling a keyboard */
|
||||
"command-uninstall-keyboard-confirm" = "Vuoi disinstallare questa tastiera?";
|
||||
|
||||
/* Text for the command to uninstall a lexical model */
|
||||
"command-uninstall-lexical-model" = "Disinstalla dizionario";
|
||||
|
||||
/* Confirmation text to display before uninstalling a lexical model */
|
||||
"command-uninstall-lexical-model-confirm" = "Vuoi disinstallare questo dizionario?";
|
||||
|
||||
/* Text for error when a keyboard cannot load properly */
|
||||
"error-loading-keyboard" = "Impossibile caricare la tastiera richiesta";
|
||||
|
||||
/* Text for error when a lexical model cannot load properly */
|
||||
"error-loading-lexical-model" = "Impossibile caricare il dizionario richiesto";
|
||||
|
||||
/* Text for error when an installed file is unexpectedly missing */
|
||||
"error-missing-file" = "Impossibile trovare un file richiesto.";
|
||||
|
||||
/* Text for error when an installed file is unexpectedly missing */
|
||||
"error-missing-file-critical" = "Impossibile trovare un file critico. Prova a reinstallare l'app.";
|
||||
|
||||
/* Text for errors in data received from search queries */
|
||||
"error-query-decoding" = "Il server sta attualmente attraversando difficoltà tecniche";
|
||||
|
||||
/* A descriptive message used when a download fails */
|
||||
"error-query-general" = "Errore di comunicazione con il server";
|
||||
|
||||
/* Text for error when a search query is unexpectedly empty */
|
||||
"error-query-no-data" = "Il server non ha risposto";
|
||||
|
||||
/* Text for general errors where not much information is known */
|
||||
"error-unknown" = "Si è verificato un errore inatteso";
|
||||
|
||||
/* Text for error when updating a resource: cannot download because no source is available */
|
||||
"error-update-no-link" = "Nessuna fonte per gli aggiornamenti è disponibile per questo pacchetto";
|
||||
|
||||
/* Text for error when updating a resource: Keyman does not know how to update the resource */
|
||||
"error-update-not-managed" = "Impossibile aggiornare la risorsa non gestita dal motore Keyman";
|
||||
|
||||
/* Text for the command to open the help page of a keyboard, as shown on resource information views */
|
||||
"info-command-help-keyboard" = "Aiuto tastiera";
|
||||
|
||||
/* Text for the command to open the help page of a lexical model, as shown on resource information views */
|
||||
"info-command-help-lexical-model" = "Aiuto dizionario";
|
||||
|
||||
/* Text label for displaying a keyboard's version, as shown on resource information views */
|
||||
"info-label-version-keyboard" = "Versione tastiera";
|
||||
|
||||
/* Text label for displaying a lexical model's version, as shown on resource information views */
|
||||
"info-label-version-lexical-model" = "Versione dizionario";
|
||||
|
||||
/* Label used for the "package info" / readme tab with the package installation prompt on phones. */
|
||||
"installer-label-package-info" = "Info Pacchetto";
|
||||
|
||||
/* Label used for the language-selection tab with the package installation prompt on phones. */
|
||||
"installer-label-select-languages" = "Seleziona Lingua(e)";
|
||||
|
||||
/* Label used with a package's version, as seen within the package installation prompt. Example: "Version: 14.0.0" */
|
||||
"installer-label-version" = "Versione: %@";
|
||||
|
||||
/* Section header for languages supported by a package, as seen within the package installation prompt */
|
||||
"installer-section-available-languages" = "Lingue Disponibili";
|
||||
|
||||
/* Text for the help popup for changing keyboards with the globe key */
|
||||
"keyboard-help-change" = "Tocca qui per cambiare la tastiera";
|
||||
|
||||
/* Text for the command to exit the Keyman keyboard in favor of other keyboards installed on the system */
|
||||
"keyboard-menu-exit" = "Chiudi %@";
|
||||
|
||||
/* Error installing a Keyman package - could not allocate a location to install it */
|
||||
"kmp-error-file-system" = "Errore nell'installazione del pacchetto - errore del file-system";
|
||||
|
||||
/* Error installing a Keyman package - could not copy package files */
|
||||
"kmp-error-file-copying" = "Errore durante l'installazione del pacchetto - impossibile copiare i file richiesti";
|
||||
|
||||
/* Error opening a Keyman package - package is not valid */
|
||||
"kmp-error-invalid" = "Il file del pacchetto è danneggiato.";
|
||||
|
||||
/* Error opening a Keyman package - it does not exist / the specified location is wrong */
|
||||
"kmp-error-missing" = "Il pacchetto specificato non esiste.";
|
||||
|
||||
/* Error installing a Keyman package - expected resource (keyboard or dictionary) is missing */
|
||||
"kmp-error-missing-resource" = "Questo pacchetto non contiene la tastiera o il dizionario richiesto.";
|
||||
|
||||
/* Error installing a Keyman package with a version of Keyman that does not support it */
|
||||
"kmp-error-unsupported-keyman-version" = "This package requires a newer version of Keyman.";
|
||||
|
||||
/* Error opening a Keyman package - cannot parse contents */
|
||||
"kmp-error-no-metadata" = "Questo pacchetto non è stato costruito correttamente - contenuti sconosciuti.";
|
||||
|
||||
/* Error opening a Keyman package - package's contents are for desktop platforms only */
|
||||
"kmp-error-unsupported" = "Questo pacchetto non include il supporto per il tuo dispositivo.";
|
||||
|
||||
/* Error opening a Keyman package - package contains unexpected resource (keyboard or dictionary) type */
|
||||
"kmp-error-wrong-type" = "Questo pacchetto non contiene il tipo di risorsa previsto.";
|
||||
|
||||
/* Title for the Installed Languages menu */
|
||||
"menu-installed-languages-title" = "Lingue Installate";
|
||||
|
||||
/* Section header for lexical models within a language-specific settings menu */
|
||||
"menu-langsettings-label-lexical-models" = "Dizionari";
|
||||
|
||||
/* Section header for keyboards within a language-specific settings menu */
|
||||
"menu-langsettings-section-keyboards" = "Tastiere";
|
||||
|
||||
/* Section header for the settings toggles within a language-specific settings menu */
|
||||
"menu-langsettings-section-settings" = "Impostazioni Lingua";
|
||||
|
||||
/* Title for the language-specific settings menus */
|
||||
"menu-langsettings-title" = "Impostazioni %@";
|
||||
|
||||
/* Label for the toggle that enables corrections that is displayed within a language-specific settings menu */
|
||||
"menu-langsettings-toggle-correct" = "Abilita correzioni";
|
||||
|
||||
/* Label for the toggle that enables predictions that is displayed within a language-specific settings menu */
|
||||
"menu-langsettings-toggle-predict" = "Abilita previsioni";
|
||||
|
||||
/* 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" = "Vuoi installare questo dizionario?";
|
||||
|
||||
/* 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" = "Nessun dizionario disponibile";
|
||||
|
||||
/* Title for the lexical model menu, a submenu of the language-specific settings menus */
|
||||
"menu-lexical-model-title" = "%@ Dizionari";
|
||||
|
||||
/* Title for the keyboard picker */
|
||||
"menu-picker-title" = "Tastiere";
|
||||
|
||||
/* Primary text for the Settings menu option to report keyboard crashes */
|
||||
"menu-settings-error-report" = "Consenti Segnalazione Errori";
|
||||
|
||||
/* Secondary text for the Settings menu option to report keyboard crashes */
|
||||
"menu-settings-error-report-description" = "Può richiedere \"pieno accesso\"";
|
||||
|
||||
/* Primary text for the Settings menu local-file package installation option */
|
||||
"menu-settings-install-from-file" = "Installa Da File";
|
||||
|
||||
/* Secondary text for the Settings menu local-file package installation option */
|
||||
"menu-settings-install-from-file-description" = "Esplora i file .kmp";
|
||||
|
||||
/* Primary text for the Settings menu option that displays the iOS system menu options for the app's keyboard */
|
||||
"menu-settings-system-keyboard-menu" = "Impostazioni Tastiera Di Sistema";
|
||||
|
||||
/* Label for the "Show Banner" toggle on the main settings screen */
|
||||
"menu-settings-show-banner" = "Mostra Banner";
|
||||
|
||||
/* Label for the "Get Started" automatic display toggle seen in the Settings menu */
|
||||
"menu-settings-startup-get-started" = "Mostra 'Inizia' all'avvio";
|
||||
|
||||
/* Title for the main Settings menu */
|
||||
"menu-settings-title" = "Impostazioni Keyman";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - blank */
|
||||
"menu-settings-spacebar-hint-blank" = "Non mostrare la didascalia sulla barra spaziatrice";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - keyboard */
|
||||
"menu-settings-spacebar-hint-keyboard" = "Mostra il nome della tastiera nella barra spaziatrice";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - language */
|
||||
"menu-settings-spacebar-hint-language" = "Mostra il nome della lingua nella barra spaziatrice";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - language + keyboard */
|
||||
"menu-settings-spacebar-hint-languageKeyboard" = "Mostra la lingua e il nome della tastiera nella barra spaziatrice";
|
||||
|
||||
/* Label for the "Spacebar Caption" item on the main settings screen */
|
||||
"menu-settings-spacebar-text" = "Didascalia Barra Spaziale";
|
||||
|
||||
/* Title for the "Spacebar Caption" settings screen */
|
||||
"menu-settings-spacebar-title" = "Didascalia Barra Spaziale";
|
||||
|
||||
/* Text showing name of spacebar caption - blank */
|
||||
"menu-settings-spacebar-item-blank" = "Vuoto";
|
||||
|
||||
/* 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" = "Lingua";
|
||||
|
||||
/* Text showing name of spacebar caption - language + keyboard */
|
||||
"menu-settings-spacebar-item-languageKeyboard" = "Lingua e tastiera";
|
||||
|
||||
/* Short text for notification: download failure for keyboard */
|
||||
"notification-download-failure-keyboard" = "Download tastiera non riuscito";
|
||||
|
||||
/* Short text for notification: download failure for lexical model */
|
||||
"notification-download-failure-lexical-model" = "Download del dizionario non riuscito";
|
||||
|
||||
/* Short text for notification: download success for keyboard */
|
||||
"notification-download-success-keyboard" = "Tastiera scaricata con successo";
|
||||
|
||||
/* Short text for notification: download success for lexical model */
|
||||
"notification-download-success-lexical-model" = "Modello lessicale scaricato con successo";
|
||||
|
||||
/* Short text for notification: downloading a keyboard */
|
||||
"notification-downloading-keyboard" = "Scaricamento tastiera\U2026";
|
||||
|
||||
/* Short text for notification: downloading a lexical model */
|
||||
"notification-downloading-lexical-model" = "Scaricamento dizionario\U2026";
|
||||
|
||||
/* Short text for notification: an update is available */
|
||||
"notification-update-available" = "Aggiornamento Disponibile";
|
||||
|
||||
/* Short text for notification: currently updating */
|
||||
"notification-update-processing" = "Aggiornamento\U2026";
|
||||
|
||||
/* Text indicating success at installing new keyboards or dictionaries */
|
||||
"success-install" = "Installato con successo.";
|
||||
|
||||
/* A title to use in alerts indicating 'success' at whatever task the user requested */
|
||||
"success-title" = "Successo";
|
||||
118
ios/engine/KMEI/KeymanEngine/it.lproj/Localizable.stringsdict
Normal file
118
ios/engine/KMEI/KeymanEngine/it.lproj/Localizable.stringsdict
Normal 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 dizionario installato</string>
|
||||
<key>other</key>
|
||||
<string>%u dizionari installati</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 aggiornamento non riuscito</string>
|
||||
<key>other</key>
|
||||
<string>%u aggiornamenti falliti</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 aggiornamento riuscito</string>
|
||||
<key>other</key>
|
||||
<string>%u aggiornamenti riusciti</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 tastiera installata</string>
|
||||
<key>other</key>
|
||||
<string>%u tastiera installata</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 lingua installata</string>
|
||||
<key>other</key>
|
||||
<string>%u lingue installate</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>Trovato %u tastiera nel pacchetto:</string>
|
||||
<key>other</key>
|
||||
<string>Trovate %u tastiere nel pacchetto:</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>Trovato %u dizionario nel pacchetto:</string>
|
||||
<key>other</key>
|
||||
<string>Trovati %u dizionari nel pacchetto:</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
257
ios/engine/KMEI/KeymanEngine/pl.lproj/Localizable.strings
Normal file
257
ios/engine/KMEI/KeymanEngine/pl.lproj/Localizable.strings
Normal file
|
|
@ -0,0 +1,257 @@
|
|||
/* A descriptive message used for errors when the app is already busy downloading */
|
||||
"alert-download-error-busy" = "Zajęty pobieraniem.";
|
||||
|
||||
/* A descriptive message used when a download fails */
|
||||
"alert-download-error-detail" = "Wystąpił błąd podczas pobierania lub instalacji.";
|
||||
|
||||
/* Title for a "download failed" alert */
|
||||
"alert-download-error-title" = "Błąd pobierania";
|
||||
|
||||
/* Title for a general alert about errors */
|
||||
"alert-error-title" = "Błąd";
|
||||
|
||||
/* A descriptive message used when no internet connection is detected */
|
||||
"alert-no-connection-detail" = "Nie udało się połączyć z serwerem Keyman. Spróbuj ponownie później.";
|
||||
|
||||
/* Title for a "no connection" alert */
|
||||
"alert-no-connection-title" = "Błąd połączenia";
|
||||
|
||||
/* Short text for a 'back' navigational command. Used to return to the previous screen */
|
||||
"command-back" = "Wstecz";
|
||||
|
||||
/* Short text for a 'cancel' command. Used to back out of a menu or install process without making changes */
|
||||
"command-cancel" = "Anuluj";
|
||||
|
||||
/* Short text for a 'done' command. Used to back out of settings menus after changes have been made */
|
||||
"command-done" = "Gotowe";
|
||||
|
||||
/* Short text for an 'install' command. Used to confirm installation of a package. */
|
||||
"command-install" = "Zainstaluj";
|
||||
|
||||
/* Short text for a 'next' navigational command. Used to advance to the next screen */
|
||||
"command-next" = "Następny";
|
||||
|
||||
/* Short text for an 'OK' command. Used for some error alerts */
|
||||
"command-ok" = "OK";
|
||||
|
||||
/* Short text for confirmining 'uninstall' commands. */
|
||||
"command-uninstall" = "Odinstaluj";
|
||||
|
||||
/* Text for the command to uninstall a keyboard */
|
||||
"command-uninstall-keyboard" = "Odinstaluj klawiaturę";
|
||||
|
||||
/* Confirmation text to display before uninstalling a keyboard */
|
||||
"command-uninstall-keyboard-confirm" = "Czy chcesz odinstalować tę klawiaturę?";
|
||||
|
||||
/* Text for the command to uninstall a lexical model */
|
||||
"command-uninstall-lexical-model" = "Odinstaluj słownik";
|
||||
|
||||
/* Confirmation text to display before uninstalling a lexical model */
|
||||
"command-uninstall-lexical-model-confirm" = "Czy chcesz odinstalować ten słownik?";
|
||||
|
||||
/* Text for error when a keyboard cannot load properly */
|
||||
"error-loading-keyboard" = "Nie można załadować żądanej klawiatury";
|
||||
|
||||
/* Text for error when a lexical model cannot load properly */
|
||||
"error-loading-lexical-model" = "Nie można załadować żądanego słownika";
|
||||
|
||||
/* Text for error when an installed file is unexpectedly missing */
|
||||
"error-missing-file" = "Nie znaleziono wymaganego pliku.";
|
||||
|
||||
/* Text for error when an installed file is unexpectedly missing */
|
||||
"error-missing-file-critical" = "Nie znaleziono pliku krytycznego. Spróbuj ponownie zainstalować aplikację.";
|
||||
|
||||
/* Text for errors in data received from search queries */
|
||||
"error-query-decoding" = "Serwer ma problemy techniczne";
|
||||
|
||||
/* A descriptive message used when a download fails */
|
||||
"error-query-general" = "Błąd komunikacji z serwerem";
|
||||
|
||||
/* Text for error when a search query is unexpectedly empty */
|
||||
"error-query-no-data" = "Serwer nie odpowiedział";
|
||||
|
||||
/* Text for general errors where not much information is known */
|
||||
"error-unknown" = "Wystąpił nieoczekiwany błąd";
|
||||
|
||||
/* Text for error when updating a resource: cannot download because no source is available */
|
||||
"error-update-no-link" = "Brak dostępnych źródeł aktualizacji dla tego pakietu";
|
||||
|
||||
/* Text for error when updating a resource: Keyman does not know how to update the resource */
|
||||
"error-update-not-managed" = "Nie można zaktualizować zasobu nie zarządzanego przez Keyman";
|
||||
|
||||
/* Text for the command to open the help page of a keyboard, as shown on resource information views */
|
||||
"info-command-help-keyboard" = "Pomoc klawiatury";
|
||||
|
||||
/* Text for the command to open the help page of a lexical model, as shown on resource information views */
|
||||
"info-command-help-lexical-model" = "Pomoc słownika";
|
||||
|
||||
/* Text label for displaying a keyboard's version, as shown on resource information views */
|
||||
"info-label-version-keyboard" = "Wersja klawiatury";
|
||||
|
||||
/* Text label for displaying a lexical model's version, as shown on resource information views */
|
||||
"info-label-version-lexical-model" = "Wersja słownika";
|
||||
|
||||
/* Label used for the "package info" / readme tab with the package installation prompt on phones. */
|
||||
"installer-label-package-info" = "Informacje o pakiecie";
|
||||
|
||||
/* Label used for the language-selection tab with the package installation prompt on phones. */
|
||||
"installer-label-select-languages" = "Wybierz język(i)";
|
||||
|
||||
/* Label used with a package's version, as seen within the package installation prompt. Example: "Version: 14.0.0" */
|
||||
"installer-label-version" = "Wersja: %@";
|
||||
|
||||
/* Section header for languages supported by a package, as seen within the package installation prompt */
|
||||
"installer-section-available-languages" = "Dostępne języki";
|
||||
|
||||
/* Text for the help popup for changing keyboards with the globe key */
|
||||
"keyboard-help-change" = "Dotknij tutaj, aby zmienić klawiaturę";
|
||||
|
||||
/* Text for the command to exit the Keyman keyboard in favor of other keyboards installed on the system */
|
||||
"keyboard-menu-exit" = "Zamknij %@";
|
||||
|
||||
/* Error installing a Keyman package - could not allocate a location to install it */
|
||||
"kmp-error-file-system" = "Błąd instalacji pakietu - błąd systemu plików";
|
||||
|
||||
/* Error installing a Keyman package - could not copy package files */
|
||||
"kmp-error-file-copying" = "Błąd instalacji pakietu - nie można skopiować wymaganych plików";
|
||||
|
||||
/* Error opening a Keyman package - package is not valid */
|
||||
"kmp-error-invalid" = "Plik pakietu jest uszkodzony.";
|
||||
|
||||
/* Error opening a Keyman package - it does not exist / the specified location is wrong */
|
||||
"kmp-error-missing" = "Podany pakiet nie istnieje.";
|
||||
|
||||
/* Error installing a Keyman package - expected resource (keyboard or dictionary) is missing */
|
||||
"kmp-error-missing-resource" = "Ten pakiet nie zawiera żądanej klawiatury ani słownika.";
|
||||
|
||||
/* Error installing a Keyman package with a version of Keyman that does not support it */
|
||||
"kmp-error-unsupported-keyman-version" = "This package requires a newer version of Keyman.";
|
||||
|
||||
/* Error opening a Keyman package - cannot parse contents */
|
||||
"kmp-error-no-metadata" = "Ten pakiet nie został prawidłowo zbudowany - zawartość nieznana.";
|
||||
|
||||
/* Error opening a Keyman package - package's contents are for desktop platforms only */
|
||||
"kmp-error-unsupported" = "Ten pakiet nie zawiera wsparcia dla Twojego urządzenia.";
|
||||
|
||||
/* Error opening a Keyman package - package contains unexpected resource (keyboard or dictionary) type */
|
||||
"kmp-error-wrong-type" = "Ten pakiet nie zawiera oczekiwanego typu zasobów.";
|
||||
|
||||
/* Title for the Installed Languages menu */
|
||||
"menu-installed-languages-title" = "Zainstalowane języki";
|
||||
|
||||
/* Section header for lexical models within a language-specific settings menu */
|
||||
"menu-langsettings-label-lexical-models" = "Słowniki";
|
||||
|
||||
/* Section header for keyboards within a language-specific settings menu */
|
||||
"menu-langsettings-section-keyboards" = "Klawiatury";
|
||||
|
||||
/* Section header for the settings toggles within a language-specific settings menu */
|
||||
"menu-langsettings-section-settings" = "Ustawienia języka";
|
||||
|
||||
/* Title for the language-specific settings menus */
|
||||
"menu-langsettings-title" = "%@ Ustawieni as";
|
||||
|
||||
/* Label for the toggle that enables corrections that is displayed within a language-specific settings menu */
|
||||
"menu-langsettings-toggle-correct" = "Włącz korekcję";
|
||||
|
||||
/* Label for the toggle that enables predictions that is displayed within a language-specific settings menu */
|
||||
"menu-langsettings-toggle-predict" = "Włącz przewidywania";
|
||||
|
||||
/* 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" = "Czy chcesz zainstalować ten słownik?";
|
||||
|
||||
/* 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" = "Brak dostępnych słowników";
|
||||
|
||||
/* Title for the lexical model menu, a submenu of the language-specific settings menus */
|
||||
"menu-lexical-model-title" = "%@ Słowniki";
|
||||
|
||||
/* Title for the keyboard picker */
|
||||
"menu-picker-title" = "Klawiatury";
|
||||
|
||||
/* Primary text for the Settings menu option to report keyboard crashes */
|
||||
"menu-settings-error-report" = "Zezwalaj na raportowanie błędów";
|
||||
|
||||
/* Secondary text for the Settings menu option to report keyboard crashes */
|
||||
"menu-settings-error-report-description" = "Może wymagać \"pełnego dostępu\"";
|
||||
|
||||
/* Primary text for the Settings menu local-file package installation option */
|
||||
"menu-settings-install-from-file" = "Zainstaluj z pliku";
|
||||
|
||||
/* Secondary text for the Settings menu local-file package installation option */
|
||||
"menu-settings-install-from-file-description" = "Przeglądaj pliki .kmp";
|
||||
|
||||
/* Primary text for the Settings menu option that displays the iOS system menu options for the app's keyboard */
|
||||
"menu-settings-system-keyboard-menu" = "Ustawienia klawiatury systemowej";
|
||||
|
||||
/* Label for the "Show Banner" toggle on the main settings screen */
|
||||
"menu-settings-show-banner" = "Pokaż baner";
|
||||
|
||||
/* Label for the "Get Started" automatic display toggle seen in the Settings menu */
|
||||
"menu-settings-startup-get-started" = "Pokaż 'Rozpocznij' przy starcie";
|
||||
|
||||
/* Title for the main Settings menu */
|
||||
"menu-settings-title" = "Ustawienia Keyman";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - blank */
|
||||
"menu-settings-spacebar-hint-blank" = "Nie pokazuj podpisu na spacji";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - keyboard */
|
||||
"menu-settings-spacebar-hint-keyboard" = "Pokaż nazwę klawiatury na spacji";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - language */
|
||||
"menu-settings-spacebar-hint-language" = "Pokaż nazwę języka na spacji";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - language + keyboard */
|
||||
"menu-settings-spacebar-hint-languageKeyboard" = "Pokaż język i nazwę klawiatury na spacji";
|
||||
|
||||
/* Label for the "Spacebar Caption" item on the main settings screen */
|
||||
"menu-settings-spacebar-text" = "Podpis paska spacji";
|
||||
|
||||
/* Title for the "Spacebar Caption" settings screen */
|
||||
"menu-settings-spacebar-title" = "Podpis paska spacji";
|
||||
|
||||
/* Text showing name of spacebar caption - blank */
|
||||
"menu-settings-spacebar-item-blank" = "Puste";
|
||||
|
||||
/* 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" = "Język";
|
||||
|
||||
/* Text showing name of spacebar caption - language + keyboard */
|
||||
"menu-settings-spacebar-item-languageKeyboard" = "Język i klawiatura";
|
||||
|
||||
/* Short text for notification: download failure for keyboard */
|
||||
"notification-download-failure-keyboard" = "Pobieranie klawiatury nie powiodło się";
|
||||
|
||||
/* Short text for notification: download failure for lexical model */
|
||||
"notification-download-failure-lexical-model" = "Pobieranie słownika nie powiodło się";
|
||||
|
||||
/* Short text for notification: download success for keyboard */
|
||||
"notification-download-success-keyboard" = "Pomyślnie pobrano klawiaturę";
|
||||
|
||||
/* Short text for notification: download success for lexical model */
|
||||
"notification-download-success-lexical-model" = "Model Lexical został pomyślnie pobrany";
|
||||
|
||||
/* Short text for notification: downloading a keyboard */
|
||||
"notification-downloading-keyboard" = "Pobieranie klawiatury\U2026";
|
||||
|
||||
/* Short text for notification: downloading a lexical model */
|
||||
"notification-downloading-lexical-model" = "Pobieranie słownika\U2026";
|
||||
|
||||
/* Short text for notification: an update is available */
|
||||
"notification-update-available" = "Aktualizacja dostępna";
|
||||
|
||||
/* Short text for notification: currently updating */
|
||||
"notification-update-processing" = "Aktualizowanie\U2026";
|
||||
|
||||
/* Text indicating success at installing new keyboards or dictionaries */
|
||||
"success-install" = "Pomyślnie zainstalowany.";
|
||||
|
||||
/* A title to use in alerts indicating 'success' at whatever task the user requested */
|
||||
"success-title" = "Sukces";
|
||||
146
ios/engine/KMEI/KeymanEngine/pl.lproj/Localizable.stringsdict
Normal file
146
ios/engine/KMEI/KeymanEngine/pl.lproj/Localizable.stringsdict
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
<?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 słownik zainstalowany</string>
|
||||
<key>few</key>
|
||||
<string>%u słowniki zainstalowane</string>
|
||||
<key>many</key>
|
||||
<string>%u słowników zainstalowano</string>
|
||||
<key>other</key>
|
||||
<string>%u słowników zainstalowano</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 aktualizacja nieudana</string>
|
||||
<key>few</key>
|
||||
<string>%u Aktualizacje nieudane</string>
|
||||
<key>many</key>
|
||||
<string>%u Aktualizacje nieudane</string>
|
||||
<key>other</key>
|
||||
<string>%u Aktualizacje nieudane</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 Aktualizacja powiodła się</string>
|
||||
<key>few</key>
|
||||
<string>%u Aktualizacje powiodły się</string>
|
||||
<key>many</key>
|
||||
<string>%u Aktualizacji powiodło się</string>
|
||||
<key>other</key>
|
||||
<string>%u Aktualizacje powiodły się</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 klawiatura zainstalowana</string>
|
||||
<key>few</key>
|
||||
<string>%u klawiatur zainstalowanych</string>
|
||||
<key>many</key>
|
||||
<string>%u klawiatur zainstalowanych</string>
|
||||
<key>other</key>
|
||||
<string>%u klawiatur zainstalowanych</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 język zainstalowany</string>
|
||||
<key>few</key>
|
||||
<string>%u języki zainstalowane</string>
|
||||
<key>many</key>
|
||||
<string>%u języki zainstalowane</string>
|
||||
<key>other</key>
|
||||
<string>%u języki zainstalowane</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>Znaleziono %u klawiaturę w pakiecie:</string>
|
||||
<key>few</key>
|
||||
<string>Znaleziono %u klawiatury w pakiecie:</string>
|
||||
<key>many</key>
|
||||
<string>Znaleziono %u klawiatury w pakiecie:</string>
|
||||
<key>other</key>
|
||||
<string>Znaleziono %u klawiatury w pakiecie:</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>Znaleziono %u słownik w pakiecie:</string>
|
||||
<key>few</key>
|
||||
<string>Znaleziono %u słowniki w pakiecie:</string>
|
||||
<key>many</key>
|
||||
<string>Znaleziono %u słowniki w pakiecie:</string>
|
||||
<key>other</key>
|
||||
<string>Znaleziono %u słowniki w pakiecie:</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
254
ios/engine/KMEI/KeymanEngine/pt-PT.lproj/Localizable.strings
Normal file
254
ios/engine/KMEI/KeymanEngine/pt-PT.lproj/Localizable.strings
Normal file
|
|
@ -0,0 +1,254 @@
|
|||
/* A descriptive message used for errors when the app is already busy downloading */
|
||||
"alert-download-error-busy" = "Baixando já ocupado.";
|
||||
|
||||
/* A descriptive message used when a download fails */
|
||||
"alert-download-error-detail" = "Ocorreu um erro durante o download ou instalação.";
|
||||
|
||||
/* Title for a "download failed" alert */
|
||||
"alert-download-error-title" = "Erro no download";
|
||||
|
||||
/* Title for a general alert about errors */
|
||||
"alert-error-title" = "Erro";
|
||||
|
||||
/* A descriptive message used when no internet connection is detected */
|
||||
"alert-no-connection-detail" = "Não foi possível acessar o servidor Keyman. Por favor, tente novamente mais tarde.";
|
||||
|
||||
/* Title for a "no connection" alert */
|
||||
"alert-no-connection-title" = "Erro de conexão";
|
||||
|
||||
/* Short text for a 'back' navigational command. Used to return to the previous screen */
|
||||
"command-back" = "Voltar";
|
||||
|
||||
/* Short text for a 'cancel' command. Used to back out of a menu or install process without making changes */
|
||||
"command-cancel" = "Instalar Mais Tarde";
|
||||
|
||||
/* Short text for a 'done' command. Used to back out of settings menus after changes have been made */
|
||||
"command-done" = "Concluído";
|
||||
|
||||
/* Short text for an 'install' command. Used to confirm installation of a package. */
|
||||
"command-install" = "Instalar";
|
||||
|
||||
/* Short text for a 'next' navigational command. Used to advance to the next screen */
|
||||
"command-next" = "Próximo";
|
||||
|
||||
/* Short text for an 'OK' command. Used for some error alerts */
|
||||
"command-ok" = "OK";
|
||||
|
||||
/* Short text for confirmining 'uninstall' commands. */
|
||||
"command-uninstall" = "Desinstalar";
|
||||
|
||||
/* Text for the command to uninstall a keyboard */
|
||||
"command-uninstall-keyboard" = "Desinstalar teclado";
|
||||
|
||||
/* Confirmation text to display before uninstalling a keyboard */
|
||||
"command-uninstall-keyboard-confirm" = "Gostaria de desinstalar este teclado?";
|
||||
|
||||
/* Text for the command to uninstall a lexical model */
|
||||
"command-uninstall-lexical-model" = "Desinstalar dicionário";
|
||||
|
||||
/* Confirmation text to display before uninstalling a lexical model */
|
||||
"command-uninstall-lexical-model-confirm" = "Gostaria de desinstalar este dicionário?";
|
||||
|
||||
/* Text for error when a keyboard cannot load properly */
|
||||
"error-loading-keyboard" = "Não foi possível carregar o teclado solicitado";
|
||||
|
||||
/* Text for error when a lexical model cannot load properly */
|
||||
"error-loading-lexical-model" = "Não foi possível carregar o dicionário solicitado";
|
||||
|
||||
/* Text for error when an installed file is unexpectedly missing */
|
||||
"error-missing-file" = "Não foi possível encontrar um arquivo obrigatório.";
|
||||
|
||||
/* Text for error when an installed file is unexpectedly missing */
|
||||
"error-missing-file-critical" = "Não foi possível encontrar um arquivo crítico. Por favor, tente reinstalar o aplicativo.";
|
||||
|
||||
/* Text for errors in data received from search queries */
|
||||
"error-query-decoding" = "O servidor está atualmente passando por dificuldades técnicas";
|
||||
|
||||
/* A descriptive message used when a download fails */
|
||||
"error-query-general" = "Erro de comunicação com o servidor";
|
||||
|
||||
/* Text for error when a search query is unexpectedly empty */
|
||||
"error-query-no-data" = "O servidor não conseguiu responder";
|
||||
|
||||
/* Text for general errors where not much information is known */
|
||||
"error-unknown" = "Ocorreu um erro inesperado";
|
||||
|
||||
/* Text for error when updating a resource: cannot download because no source is available */
|
||||
"error-update-no-link" = "Nenhuma fonte para atualizações está disponível para este pacote";
|
||||
|
||||
/* Text for error when updating a resource: Keyman does not know how to update the resource */
|
||||
"error-update-not-managed" = "Não é possível atualizar o recurso não gerenciado pelo motor Keyman";
|
||||
|
||||
/* Text for the command to open the help page of a keyboard, as shown on resource information views */
|
||||
"info-command-help-keyboard" = "Ajuda do teclado";
|
||||
|
||||
/* Text for the command to open the help page of a lexical model, as shown on resource information views */
|
||||
"info-command-help-lexical-model" = "Ajuda do dicionário";
|
||||
|
||||
/* Text label for displaying a keyboard's version, as shown on resource information views */
|
||||
"info-label-version-keyboard" = "Versão do teclado";
|
||||
|
||||
/* Text label for displaying a lexical model's version, as shown on resource information views */
|
||||
"info-label-version-lexical-model" = "Versão do dicionário";
|
||||
|
||||
/* Label used for the "package info" / readme tab with the package installation prompt on phones. */
|
||||
"installer-label-package-info" = "Informações do pacote";
|
||||
|
||||
/* Label used for the language-selection tab with the package installation prompt on phones. */
|
||||
"installer-label-select-languages" = "Selecione Idioma(s)";
|
||||
|
||||
/* Label used with a package's version, as seen within the package installation prompt. Example: "Version: 14.0.0" */
|
||||
"installer-label-version" = "Versão: %@";
|
||||
|
||||
/* Section header for languages supported by a package, as seen within the package installation prompt */
|
||||
"installer-section-available-languages" = "Idiomas Disponíveis";
|
||||
|
||||
/* Text for the help popup for changing keyboards with the globe key */
|
||||
"keyboard-help-change" = "Toque aqui para alterar o teclado";
|
||||
|
||||
/* Text for the command to exit the Keyman keyboard in favor of other keyboards installed on the system */
|
||||
"keyboard-menu-exit" = "Fechar %@";
|
||||
|
||||
/* Error installing a Keyman package - could not allocate a location to install it */
|
||||
"kmp-error-file-system" = "Erro ao instalar pacote - erro de arquivo-sistema";
|
||||
|
||||
/* Error installing a Keyman package - could not copy package files */
|
||||
"kmp-error-file-copying" = "Erro ao instalar o pacote - não foi possível copiar os arquivos necessários";
|
||||
|
||||
/* Error opening a Keyman package - package is not valid */
|
||||
"kmp-error-invalid" = "O arquivo do pacote está corrompido.";
|
||||
|
||||
/* Error opening a Keyman package - it does not exist / the specified location is wrong */
|
||||
"kmp-error-missing" = "O pacote especificado não existe.";
|
||||
|
||||
/* Error installing a Keyman package - expected resource (keyboard or dictionary) is missing */
|
||||
"kmp-error-missing-resource" = "Este pacote não contém o teclado ou dicionário solicitados.";
|
||||
|
||||
/* Error opening a Keyman package - cannot parse contents */
|
||||
"kmp-error-no-metadata" = "Este pacote não foi construído corretamente - conteúdo desconhecido.";
|
||||
|
||||
/* Error opening a Keyman package - package's contents are for desktop platforms only */
|
||||
"kmp-error-unsupported" = "Este pacote não inclui suporte para o seu dispositivo.";
|
||||
|
||||
/* Error opening a Keyman package - package contains unexpected resource (keyboard or dictionary) type */
|
||||
"kmp-error-wrong-type" = "Este pacote não contém o tipo de recurso esperado.";
|
||||
|
||||
/* Title for the Installed Languages menu */
|
||||
"menu-installed-languages-title" = "Idiomas instalados";
|
||||
|
||||
/* Section header for lexical models within a language-specific settings menu */
|
||||
"menu-langsettings-label-lexical-models" = "Dicionários";
|
||||
|
||||
/* Section header for keyboards within a language-specific settings menu */
|
||||
"menu-langsettings-section-keyboards" = "Teclados";
|
||||
|
||||
/* Section header for the settings toggles within a language-specific settings menu */
|
||||
"menu-langsettings-section-settings" = "Configurações de idioma";
|
||||
|
||||
/* Title for the language-specific settings menus */
|
||||
"menu-langsettings-title" = "Configurações de %@";
|
||||
|
||||
/* Label for the toggle that enables corrections that is displayed within a language-specific settings menu */
|
||||
"menu-langsettings-toggle-correct" = "Habilitar correções";
|
||||
|
||||
/* Label for the toggle that enables predictions that is displayed within a language-specific settings menu */
|
||||
"menu-langsettings-toggle-predict" = "Habilitar previsões";
|
||||
|
||||
/* 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" = "Gostaria de instalar este dicionário?";
|
||||
|
||||
/* 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" = "Nenhum dicionário disponível";
|
||||
|
||||
/* Title for the lexical model menu, a submenu of the language-specific settings menus */
|
||||
"menu-lexical-model-title" = "%@ Dicionários";
|
||||
|
||||
/* Title for the keyboard picker */
|
||||
"menu-picker-title" = "Teclados";
|
||||
|
||||
/* Primary text for the Settings menu option to report keyboard crashes */
|
||||
"menu-settings-error-report" = "Permitir Relatório de Erros";
|
||||
|
||||
/* Secondary text for the Settings menu option to report keyboard crashes */
|
||||
"menu-settings-error-report-description" = "Pode exigir \"acesso total\"";
|
||||
|
||||
/* Primary text for the Settings menu local-file package installation option */
|
||||
"menu-settings-install-from-file" = "Instalar do arquivo";
|
||||
|
||||
/* Secondary text for the Settings menu local-file package installation option */
|
||||
"menu-settings-install-from-file-description" = "Procurar por arquivos .kmp";
|
||||
|
||||
/* Primary text for the Settings menu option that displays the iOS system menu options for the app's keyboard */
|
||||
"menu-settings-system-keyboard-menu" = "Configurações do teclado";
|
||||
|
||||
/* Label for the "Show Banner" toggle on the main settings screen */
|
||||
"menu-settings-show-banner" = "Mostrar banner";
|
||||
|
||||
/* Label for the "Get Started" automatic display toggle seen in the Settings menu */
|
||||
"menu-settings-startup-get-started" = "Mostrar 'Começar' na inicialização";
|
||||
|
||||
/* Title for the main Settings menu */
|
||||
"menu-settings-title" = "Configurações do Keyman";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - blank */
|
||||
"menu-settings-spacebar-hint-blank" = "Não mostrar legenda na barra de espaço";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - keyboard */
|
||||
"menu-settings-spacebar-hint-keyboard" = "Mostrar o nome do teclado na barra de espaço";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - language */
|
||||
"menu-settings-spacebar-hint-language" = "Mostrar nome do idioma na barra de espaço";
|
||||
|
||||
/* Secondary text showing current setting for spacebar caption - language + keyboard */
|
||||
"menu-settings-spacebar-hint-languageKeyboard" = "Mostrar idioma e nome do teclado na barra de espaço";
|
||||
|
||||
/* Label for the "Spacebar Caption" item on the main settings screen */
|
||||
"menu-settings-spacebar-text" = "Barra de espaço";
|
||||
|
||||
/* Title for the "Spacebar Caption" settings screen */
|
||||
"menu-settings-spacebar-title" = "Barra de espaço";
|
||||
|
||||
/* Text showing name of spacebar caption - blank */
|
||||
"menu-settings-spacebar-item-blank" = "Vazio";
|
||||
|
||||
/* Text showing name of spacebar caption - keyboard */
|
||||
"menu-settings-spacebar-item-keyboard" = "Teclado";
|
||||
|
||||
/* Text showing name of spacebar caption - language */
|
||||
"menu-settings-spacebar-item-language" = "Idioma";
|
||||
|
||||
/* Text showing name of spacebar caption - language + keyboard */
|
||||
"menu-settings-spacebar-item-languageKeyboard" = "Idioma e teclado";
|
||||
|
||||
/* Short text for notification: download failure for keyboard */
|
||||
"notification-download-failure-keyboard" = "Download do teclado falhou";
|
||||
|
||||
/* Short text for notification: download failure for lexical model */
|
||||
"notification-download-failure-lexical-model" = "Download do dicionário falhou";
|
||||
|
||||
/* Short text for notification: download success for keyboard */
|
||||
"notification-download-success-keyboard" = "Teclado baixado com sucesso";
|
||||
|
||||
/* Short text for notification: download success for lexical model */
|
||||
"notification-download-success-lexical-model" = "Modelo Léxico baixado com sucesso";
|
||||
|
||||
/* Short text for notification: downloading a keyboard */
|
||||
"notification-downloading-keyboard" = "Baixando teclado\U2026";
|
||||
|
||||
/* Short text for notification: downloading a lexical model */
|
||||
"notification-downloading-lexical-model" = "Baixando o dicionário\U2026";
|
||||
|
||||
/* Short text for notification: an update is available */
|
||||
"notification-update-available" = "Atualização disponível";
|
||||
|
||||
/* Short text for notification: currently updating */
|
||||
"notification-update-processing" = "Atualizando\U2026";
|
||||
|
||||
/* Text indicating success at installing new keyboards or dictionaries */
|
||||
"success-install" = "Instalado com sucesso.";
|
||||
|
||||
/* A title to use in alerts indicating 'success' at whatever task the user requested */
|
||||
"success-title" = "Sucesso";
|
||||
118
ios/engine/KMEI/KeymanEngine/pt-PT.lproj/Localizable.stringsdict
Normal file
118
ios/engine/KMEI/KeymanEngine/pt-PT.lproj/Localizable.stringsdict
Normal 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 dicionário instalado</string>
|
||||
<key>other</key>
|
||||
<string>%u dicionários instalados</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 falha na atualização</string>
|
||||
<key>other</key>
|
||||
<string>%u atualizações falharam</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 atualização concluída</string>
|
||||
<key>other</key>
|
||||
<string>%u atualizações com sucesso</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 teclado instalado</string>
|
||||
<key>other</key>
|
||||
<string>%u teclados instalados</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 idioma instalado</string>
|
||||
<key>other</key>
|
||||
<string>%u idiomas instalados</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>Encontrado %u teclado no pacote:</string>
|
||||
<key>other</key>
|
||||
<string>Encontrado %u teclados no pacote:</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>%u dicionário encontrado no pacote:</string>
|
||||
<key>other</key>
|
||||
<string>%u dicionários encontrados no pacote:</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -29,6 +29,12 @@ sentryManager.init();
|
|||
window.addEventListener('load', init, false);
|
||||
|
||||
function init() {
|
||||
// As of iOS 15, Safari WebViews will try to avoid letting us use the "safe area"
|
||||
// at the bottom of iPhone X style devices. While `-webkit-fill-available` will partly
|
||||
// counteract this... it's only a "partly". Fortunately, we can manually force the
|
||||
// page to our desired size.
|
||||
document.body.style.height = window.outerHeight;
|
||||
|
||||
var kmw=window['keyman'];
|
||||
// We could convert to relying on the promise, but the underlying input element
|
||||
// tends to show a bit due to the delay when we do so.
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
body {background-color: rgb(210,214,220);}
|
||||
</style>
|
||||
</head>
|
||||
<body class="kmw-embedded keyman-app">
|
||||
<body class="kmw-embedded keyman-app" style="height: -webkit-fill-available">
|
||||
<textarea id="ta" cols="1" rows="1" style="visibility:hidden;" disabled></textarea>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -205,6 +205,9 @@
|
|||
16A9229D20325253003CC98E /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Keyman/Info.plist; sourceTree = SOURCE_ROOT; };
|
||||
293EA3E027059C6900545EED /* ha */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ha; path = ha.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
294914742738DF7700400732 /* ff-NG */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ff-NG"; path = "ff-NG.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
29BFA75D282931F8009FCCC3 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
29BFA769282946EC009FCCC3 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
29C1E17028001EC200759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
37378F4222C9AA610043F22B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainViewController_iPad.xib; sourceTree = "<group>"; };
|
||||
37378F4322C9AA630043F22B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainViewController_iPhone.xib; sourceTree = "<group>"; };
|
||||
9815725018E4F0930014DF0C /* 702-share.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "702-share.png"; path = "Keyman Icons/702-share.png"; sourceTree = "<group>"; };
|
||||
|
|
@ -786,6 +789,9 @@
|
|||
"zh-Hans",
|
||||
ha,
|
||||
"ff-NG",
|
||||
"pt-PT",
|
||||
it,
|
||||
pl
|
||||
);
|
||||
mainGroup = 98ABADA7176935E400B62590;
|
||||
productRefGroup = 98ABADB1176935E400B62590 /* Products */;
|
||||
|
|
@ -1089,6 +1095,9 @@
|
|||
CEEC468226F2F7BA009A5B7D /* zh-Hans */,
|
||||
293EA3E027059C6900545EED /* ha */,
|
||||
294914742738DF7700400732 /* ff-NG */,
|
||||
29C1E17028001EC200759EDE /* pt-PT */,
|
||||
29BFA75D282931F8009FCCC3 /* it */,
|
||||
29BFA769282946EC009FCCC3 /* pl */
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue