mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-10 02:45:32 +00:00
Merge pull request #8237 from keymanapp/chore/web/feature-esmodule-update
chore(web): feature-esmodule base update
This commit is contained in:
commit
2df5bc1bea
98 changed files with 2614 additions and 1005 deletions
19
.github/actions/apt-install/action.yml
vendored
Normal file
19
.github/actions/apt-install/action.yml
vendored
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
name: apt-install
|
||||
description: |
|
||||
Install debian packages with apt
|
||||
inputs:
|
||||
packages:
|
||||
description: Packages to install
|
||||
default: devscripts equivs
|
||||
required: false
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Install packages
|
||||
shell: bash
|
||||
run: |
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
export DEBIAN_PRIORITY=critical
|
||||
export DEBCONF_NOWARNINGS=yes
|
||||
sudo apt-get update
|
||||
sudo apt-get install -q -y ${{ inputs.packages }}
|
||||
279
.github/workflows/deb-packaging.yml
vendored
Normal file
279
.github/workflows/deb-packaging.yml
vendored
Normal file
|
|
@ -0,0 +1,279 @@
|
|||
name: "Ubuntu packaging"
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: ['deb-release-packaging:*', 'deb-pr-packaging:*']
|
||||
env:
|
||||
COLOR_GREEN: "\e[32m"
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
STATUS_CONTEXT: 'Debian Packaging'
|
||||
DEBFULLNAME: 'Keyman GHA packager'
|
||||
DEBEMAIL: 'support@keyman.com'
|
||||
|
||||
jobs:
|
||||
sourcepackage:
|
||||
name: Build source package
|
||||
runs-on: ubuntu-22.04
|
||||
outputs:
|
||||
VERSION: ${{ steps.version_step.outputs.VERSION }}
|
||||
PRERELEASE_TAG: ${{ steps.prerelease_tag.outputs.PRERELEASE_TAG }}
|
||||
GIT_SHA: ${{ steps.set_status.outputs.GIT_SHA }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c #v3.3.0
|
||||
with:
|
||||
ref: '${{ github.event.client_payload.ref }}'
|
||||
|
||||
- name: Set pending status on PR builds
|
||||
id: set_status
|
||||
if: github.event.client_payload.isTestBuild == 'true'
|
||||
shell: bash
|
||||
run: |
|
||||
GIT_SHA="${{ github.event.client_payload.sha }}"
|
||||
echo "GIT_SHA=$GIT_SHA" >> $GITHUB_OUTPUT
|
||||
gh api \
|
||||
--method POST \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
/repos/$GITHUB_REPOSITORY/statuses/$GIT_SHA \
|
||||
-f state='pending' \
|
||||
-f target_url="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" \
|
||||
-f description='Debian packaging started' \
|
||||
-f context="$STATUS_CONTEXT"
|
||||
|
||||
- name: Install devscripts
|
||||
uses: ./.github/actions/apt-install
|
||||
with:
|
||||
packages: devscripts equivs
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
cd linux
|
||||
./scripts/deb-packaging.sh --gha dependencies
|
||||
|
||||
- name: Build source package
|
||||
run: |
|
||||
TIER=$(cat TIER.md)
|
||||
export TIER
|
||||
echo "TIER=$TIER" >> $GITHUB_ENV
|
||||
cd linux
|
||||
./scripts/deb-packaging.sh --gha source
|
||||
|
||||
- name: Set version as output parameter
|
||||
id: version_step
|
||||
shell: bash
|
||||
run: |
|
||||
THIS_SCRIPT="$GITHUB_WORKSPACE/.github/workflows/deb-packaging.yml"
|
||||
. "resources/build/build-utils.sh"
|
||||
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Set prerelease tag as output parameter
|
||||
id: prerelease_tag
|
||||
shell: bash
|
||||
run: |
|
||||
if [ "${{ github.event.client_payload.isTestBuild }}" == "true" ]; then
|
||||
PRERELEASE_TAG="~${{ github.event.client_payload.branch }}-$GITHUB_RUN_NUMBER.$GITHUB_RUN_ATTEMPT"
|
||||
else
|
||||
PRERELEASE_TAG=""
|
||||
fi
|
||||
echo "PRERELEASE_TAG=$PRERELEASE_TAG" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Output which branch or PR we're building plus name of .dsc file
|
||||
run: |
|
||||
if [ "${{ github.event.client_payload.isTestBuild }}" == "true" ]; then
|
||||
echo ":checkered_flag: **Test build of version ${{ steps.version_step.outputs.VERSION }} for ${{ github.event.client_payload.branch }}**" >> $GITHUB_STEP_SUMMARY
|
||||
else
|
||||
echo ":ship: **Release build of ${{ github.event.client_payload.branch }} branch (${{ github.event.client_payload.ref}}), version ${{ steps.version_step.outputs.VERSION }}**" >> $GITHUB_STEP_SUMMARY
|
||||
fi
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo ":gift: Generated source package:" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- $(find . -name keyman_\*.dsc)" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Store source package
|
||||
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
|
||||
with:
|
||||
name: keyman-srcpkg
|
||||
path: |
|
||||
keyman_*
|
||||
debian/***/*
|
||||
if: always()
|
||||
|
||||
binary_packages:
|
||||
name: Build binary packages
|
||||
needs: sourcepackage
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
dist: [focal, jammy, kinetic]
|
||||
arch: [amd64]
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
|
||||
with:
|
||||
path: artifacts
|
||||
|
||||
- name: Build
|
||||
uses: sillsdev/gha-ubuntu-packaging@5b56c86ee78598308d864edc55a1d06b4ba36f92 # v0.3
|
||||
with:
|
||||
dist: "${{ matrix.dist }}"
|
||||
platform: "${{ matrix.arch }}"
|
||||
source_dir: "artifacts/keyman-srcpkg"
|
||||
sourcepackage: "keyman_${{ needs.sourcepackage.outputs.VERSION }}-1.dsc"
|
||||
deb_fullname: $DEBFULLNAME
|
||||
deb_email: $DEBEMAIL
|
||||
prerelease_tag: ${{ needs.sourcepackage.outputs.PRERELEASE_TAG }}
|
||||
|
||||
- name: Output resulting .deb files
|
||||
run: |
|
||||
echo '```' >> $GITHUB_STEP_SUMMARY
|
||||
echo "$(find artifacts/ -name \*.deb)" >> $GITHUB_STEP_SUMMARY
|
||||
echo '```' >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Store binary packages
|
||||
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
|
||||
with:
|
||||
name: keyman-binarypkgs
|
||||
path: |
|
||||
artifacts/*
|
||||
!artifacts/keyman-srcpkg/
|
||||
if: always()
|
||||
|
||||
deb_signing:
|
||||
name: Sign source and binary packages
|
||||
needs: [sourcepackage, binary_packages]
|
||||
runs-on: ubuntu-latest
|
||||
environment: "deploy (linux)"
|
||||
if: github.event.client_payload.isTestBuild == 'false'
|
||||
|
||||
steps:
|
||||
- name: Sign packages
|
||||
uses: sillsdev/gha-deb-signing@cd1af3dddf83787f9da20a93fc449d927a63bfbf # v0.4
|
||||
with:
|
||||
src-pkg-path: "artifacts/keyman-srcpkg"
|
||||
src-pkg-name: "keyman_${{ needs.sourcepackage.outputs.VERSION }}-1_source.changes"
|
||||
bin-pkg-path: "artifacts/keyman-binarypkgs"
|
||||
bin-pkg-name: "keyman_${{ needs.sourcepackage.outputs.VERSION }}-1${{ needs.sourcepackage.outputs.PRERELEASE_TAG }}+"
|
||||
artifacts-name: "keyman-signedpkgs"
|
||||
gpg-signing-key: "${{ secrets.GPG_SIGNING_KEY }}"
|
||||
debsign-keyid: "${{ secrets.DEBSIGN_KEYID }}"
|
||||
|
||||
upload-to-llso:
|
||||
name: Upload packages to llso
|
||||
needs: deb_signing
|
||||
runs-on: self-hosted
|
||||
environment: "deploy (linux)"
|
||||
if: ${{ ! github.event.client_payload.isTestBuild }}
|
||||
|
||||
steps:
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
|
||||
with:
|
||||
name: keyman-signedpkgs
|
||||
path: artifacts
|
||||
|
||||
- name: Install dput
|
||||
uses: ./.github/actions/apt-install
|
||||
with:
|
||||
packages: dput
|
||||
|
||||
- name: Setup .dput.cf
|
||||
run: |
|
||||
echo "${{vars.ENV_DPUT_CONFIG}}" > ~/.dput.cf
|
||||
|
||||
- name: Upload
|
||||
run: |
|
||||
case ${{ github.event.client_payload.branch }} in
|
||||
stable-*) destination='' ;;
|
||||
beta) destination='-proposed' ;;
|
||||
*) destination='-experimental' ;;
|
||||
esac
|
||||
|
||||
cd artifacts/keyman-signedpkgs
|
||||
ls -R
|
||||
|
||||
echo -e "::group::${COLOR_GREEN}Upload source package"
|
||||
cd artifacts/keyman-srcpkg
|
||||
dput -U llso:ubuntu/jammy${destination} *_source.changes
|
||||
echo "::endgroup::"
|
||||
|
||||
echo -e "::group::${COLOR_GREEN}Uploading binary packages"
|
||||
cd ../keyman-binarypkgs
|
||||
pattern="keyman_${{ needs.sourcepackage.outputs.VERSION }}.+\+(.*)[0-9]_[^.]+.changes"
|
||||
for f in *.changes; do
|
||||
if [[ $f =~ $pattern ]]; then
|
||||
dist=${BASH_REMATCH[1]}
|
||||
dput -U llso:ubuntu/${dist}${destination} $f
|
||||
fi
|
||||
done
|
||||
echo "::endgroup::"
|
||||
|
||||
api_verification:
|
||||
name: Verify API for libkmnkbp0.so
|
||||
needs: [sourcepackage, binary_packages]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c #v3.3.0
|
||||
with:
|
||||
ref: '${{ github.event.client_payload.ref }}'
|
||||
|
||||
- name: Download Artifacts
|
||||
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
|
||||
with:
|
||||
path: artifacts
|
||||
|
||||
- name: Install devscripts
|
||||
uses: ./.github/actions/apt-install
|
||||
with:
|
||||
packages: devscripts equivs
|
||||
|
||||
- name: Verify API
|
||||
run: |
|
||||
cd linux
|
||||
SRC_PKG="${GITHUB_WORKSPACE}/artifacts/keyman-srcpkg/keyman_${{ needs.sourcepackage.outputs.VERSION }}-1.debian.tar.xz" \
|
||||
BIN_PKG="${GITHUB_WORKSPACE}/artifacts/keyman-binarypkgs/libkmnkbp0-0_${{ needs.sourcepackage.outputs.VERSION }}-1${{ needs.sourcepackage.outputs.PRERELEASE_TAG }}+jammy1_amd64.deb" \
|
||||
PKG_VERSION="${{ needs.sourcepackage.outputs.VERSION }}" \
|
||||
./scripts/deb-packaging.sh --gha verify >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Archive .symbols file
|
||||
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
|
||||
with:
|
||||
name: libkmnkbp0-0.symbols
|
||||
path: linux/debian/libkmnkbp0-0.symbols
|
||||
if: always()
|
||||
|
||||
set_status:
|
||||
name: Set result status on PR builds
|
||||
needs: [sourcepackage, binary_packages, deb_signing, api_verification]
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ always() && github.event.client_payload.isTestBuild == 'true' }}
|
||||
steps:
|
||||
- name: Set success
|
||||
if: needs.sourcepackage.result == 'success' && needs.binary_packages.result == 'success' && (needs.deb_signing.result == 'success' || needs.deb_signing.result == 'skipped') && needs.api_verification.result == 'success'
|
||||
run: |
|
||||
echo "RESULT=success" >> $GITHUB_ENV
|
||||
echo "MSG=Package build succeeded" >> $GITHUB_ENV
|
||||
|
||||
- name: Set cancelled
|
||||
if: needs.sourcepackage.result == 'cancelled' || needs.binary_packages.result == 'cancelled' || needs.deb_signing.result == 'cancelled' || needs.api_verification.result == 'cancelled'
|
||||
run: |
|
||||
echo "RESULT=error" >> $GITHUB_ENV
|
||||
echo "MSG=Package build cancelled" >> $GITHUB_ENV
|
||||
|
||||
- name: Set failure
|
||||
if: needs.sourcepackage.result == 'failure' || needs.binary_packages.result == 'failure' || needs.deb_signing.result == 'failure' || needs.api_verification.result == 'failure'
|
||||
run: |
|
||||
echo "RESULT=failure" >> $GITHUB_ENV
|
||||
echo "MSG=Package build failed" >> $GITHUB_ENV
|
||||
|
||||
- name: Set final status
|
||||
run: |
|
||||
gh api \
|
||||
--method POST \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
/repos/$GITHUB_REPOSITORY/statuses/${{ needs.sourcepackage.outputs.GIT_SHA }} \
|
||||
-f state="$RESULT" \
|
||||
-f target_url="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" \
|
||||
-f description="$MSG" \
|
||||
-f context="$STATUS_CONTEXT"
|
||||
64
HISTORY.md
64
HISTORY.md
|
|
@ -1,5 +1,69 @@
|
|||
# Keyman Version History
|
||||
|
||||
## 17.0.49 alpha 2023-02-15
|
||||
|
||||
* feat(linux): Pass PR# in the event type (#8221)
|
||||
* feat(linux): Implement uploading of packages in packaging GHA (#8223)
|
||||
* fix(linux): Fix GHA package build (#8225)
|
||||
* fix(linux): Another fix for GHA package build (#8228)
|
||||
|
||||
## 17.0.48 alpha 2023-02-14
|
||||
|
||||
* fix(developer): Select BCP47 Code dialog inconsistencies (#8179)
|
||||
* chore(common): automatically apply _builder_check_color (#8197)
|
||||
* docs(linux): Update packaging documentation (#8202)
|
||||
* chore(common): Report status if no platform needs build (#8210)
|
||||
* chore(linux): Exclude autopkg tests on s390x (#8218)
|
||||
* fix(linux): Fix path to symbols file in packaging GHA (#8209)
|
||||
|
||||
## 17.0.47 alpha 2023-02-10
|
||||
|
||||
* fix(linux): Fix autopkgtests (#8201)
|
||||
* fix(linux): Fix Verify-API step of GHA (#8199)
|
||||
|
||||
## 17.0.46 alpha 2023-02-09
|
||||
|
||||
* fix(windows): add remove lang id uses correct keyboard id (#8186)
|
||||
* chore(common): add `builder_term` function (#8187)
|
||||
* chore(common): builder internal dependencies (#8188)
|
||||
* chore(linux): Update changelog from Debian (#8192)
|
||||
* feat(linux): Add debian packaging GHA (#7911)
|
||||
|
||||
## 17.0.45 alpha 2023-02-08
|
||||
|
||||
* chore(ios): update certificate (#8176)
|
||||
* fix(linux): Fix autopkgtests (#8181)
|
||||
* chore(common): Cleanup Kannada locale (#8182)
|
||||
* chore(windows): Fix Portuguese UI language name (#8184)
|
||||
|
||||
## 17.0.44 alpha 2023-02-07
|
||||
|
||||
* chore(linux): Set test-helper script executable (#8178)
|
||||
* chore(linux): Update debian changelog (#8156)
|
||||
|
||||
## 17.0.43 alpha 2023-02-06
|
||||
|
||||
* chore(linux): Build with meson instead of autotools ️ (#8111)
|
||||
|
||||
## 17.0.42 alpha 2023-02-03
|
||||
|
||||
* chore(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 (#8144)
|
||||
* feat(developer): check for duplicated language codes in package editor and compiler (#8151)
|
||||
* chore: Fail TC build if triggering Jenkins build fails (#8152)
|
||||
* chore(linux): Fix lintian warnings (#8154)
|
||||
* chore(core): Update meson version (#7882)
|
||||
* refactor(android/engine): Consolidate Keyboard picker intent (#8163)
|
||||
|
||||
## 17.0.41 alpha 2023-02-02
|
||||
|
||||
* chore(web): main web build & test script rework to our common script format + nomenclature (#7474)
|
||||
* change(web): conversion to standard filesystem layout: source -> src, intermediate + release -> build (#7513)
|
||||
* change(web): conversion to standard filesystem layout: testing -> src/test/manual, unit_tests -> src/test/auto (#7515)
|
||||
* change(web): conversion to standard filesystem layout: tools -> src/tools (#7556)
|
||||
* chore(web): updates build product references, extracts CI test-build scripts (#7831)
|
||||
* feat(common): TS-based sourcemap remapping tool (#7894)
|
||||
* feat(web): implements shell scripting for CI release-build configurations (#8001)
|
||||
|
||||
## 17.0.40 alpha 2023-02-01
|
||||
|
||||
* chore(developer): kmcmpdll debug src path (#8127)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
17.0.41
|
||||
17.0.50
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
<!-- Context: Clear Text dialog -->
|
||||
<string name="all_text_will_be_cleared" comment="Erase all the text">\nಎಲ್ಲಾ ಪಠ್ಯವನ್ನು ತೆರವುಗೊಳಿಸಲಾಗುತ್ತದೆ\n</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="get_started" comment="Menu for getting started">ಶುರುಮಾಡಿ</string>
|
||||
<string name="get_started" comment="Menu for getting started">ಪ್ರಾರಂಭಿಕ ಪರದೆ</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
<string name="add_a_keyboard" comment="Menu item to add a keyboard">ನಿಮ್ಮ ಭಾಷೆಗೆ ಕೀಲಿಮಣೆಯನ್ನು ಸೇರಿಸಿ</string>
|
||||
<!-- Context: Get Started menu -->
|
||||
|
|
|
|||
|
|
@ -1905,21 +1905,22 @@ public final class KMManager {
|
|||
}
|
||||
|
||||
public static void showKeyboardPicker(Context context, KeyboardType kbType) {
|
||||
if (kbType == KeyboardType.KEYBOARD_TYPE_INAPP) {
|
||||
Intent i = new Intent(context, KeyboardPickerActivity.class);
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
i.putExtra(KMKey_DisplayKeyboardSwitcher, false);
|
||||
context.startActivity(i);
|
||||
} else if (kbType == KeyboardType.KEYBOARD_TYPE_SYSTEM) {
|
||||
Intent i = new Intent(context, KeyboardPickerActivity.class);
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
|
||||
if (kbType == KeyboardType.KEYBOARD_TYPE_UNDEFINED) {
|
||||
KMLog.LogError(TAG, String.format("showKeyboardPicker with invalid %s", kbType.toString()));
|
||||
return;
|
||||
}
|
||||
|
||||
Intent i = new Intent(context, KeyboardPickerActivity.class);
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); // Replaces FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Required to call startActivity() from outside of an Activity context
|
||||
|
||||
if (kbType == KeyboardType.KEYBOARD_TYPE_SYSTEM) {
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
i.putExtra(KMKey_DisplayKeyboardSwitcher, true);
|
||||
context.startActivity(i);
|
||||
}
|
||||
|
||||
i.putExtra(KMKey_DisplayKeyboardSwitcher, kbType == KeyboardType.KEYBOARD_TYPE_SYSTEM);
|
||||
context.startActivity(i);
|
||||
}
|
||||
|
||||
public static void setKeyboardPickerFont(Typeface typeface) {
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
"@types/node": "^14.0.4",
|
||||
"chai": "^4.3.4",
|
||||
"mocha": "^10.0.0",
|
||||
"typescript": "^4.5.4"
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@keymanapp/keyman-version": "*",
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
},
|
||||
"homepage": "https://github.com/keymanapp/keyman/tree/master/common/models/types#readme",
|
||||
"devDependencies": {
|
||||
"typescript": "^4.5.4"
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"files": [
|
||||
"README.md",
|
||||
|
|
|
|||
|
|
@ -47,8 +47,8 @@
|
|||
"@types/mocha": "^7.0.2",
|
||||
"chai": "^4.3.4",
|
||||
"mocha": "^10.0.0",
|
||||
"ts-node": "^9.1.1",
|
||||
"typescript": "^4.5.4"
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
|
|
|
|||
|
|
@ -22,8 +22,6 @@ cd "$(dirname "$THIS_SCRIPT")"
|
|||
|
||||
################################ Main script ################################
|
||||
|
||||
builder_check_color "$@"
|
||||
|
||||
# "@../models/types" \ # is just a .d.ts, so there's nothing to actually BUILD.
|
||||
|
||||
builder_describe "Builds the lm-layer module" \
|
||||
|
|
@ -35,7 +33,7 @@ builder_describe "Builds the lm-layer module" \
|
|||
"configure" \
|
||||
"build" \
|
||||
"test" \
|
||||
"--ci Sets ${BUILDER_TERM_START}test${BUILDER_TERM_END} action to use CI-based test configurations & reporting"
|
||||
"--ci Sets $(builder_term test) action to use CI-based test configurations & reporting"
|
||||
|
||||
builder_describe_outputs \
|
||||
configure /node_modules \
|
||||
|
|
|
|||
|
|
@ -41,8 +41,8 @@
|
|||
"mocha": "^10.0.0",
|
||||
"mocha-teamcity-reporter": "^4.0.0",
|
||||
"sinon": "^7.1.1",
|
||||
"ts-node": "^9.1.1",
|
||||
"typescript": "^4.5.4"
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@keymanapp/models-templates": "*",
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ if builder_start_action test:libraries; then
|
|||
# addition to fair bit of `pushd` and `popd`.
|
||||
pushd "$KEYMAN_ROOT/common/models/wordbreakers"
|
||||
echo
|
||||
echo "### Running ${BUILDER_TERM_START}common/models/wordbreaker${BUILDER_TERM_END} tests"
|
||||
echo "### Running $(builder_term common/models/wordbreakers) tests"
|
||||
# NPM doesn't seem to parse the post `--` part if specified via script variable.
|
||||
# So... a simple if-else will do the job for now.
|
||||
if builder_has_option --ci; then
|
||||
|
|
@ -55,7 +55,7 @@ if builder_start_action test:libraries; then
|
|||
|
||||
pushd "$KEYMAN_ROOT/common/models/templates"
|
||||
echo
|
||||
echo "### Running ${BUILDER_TERM_START}common/models/templates${BUILDER_TERM_END} tests"
|
||||
echo "### Running $builder_term common/models/templates) tests"
|
||||
if builder_has_option --ci; then
|
||||
npm run test -- -reporter mocha-teamcity-reporter
|
||||
else
|
||||
|
|
@ -65,7 +65,7 @@ if builder_start_action test:libraries; then
|
|||
|
||||
pushd "$KEYMAN_ROOT/common/models/types"
|
||||
echo
|
||||
echo "### Running ${BUILDER_TERM_START}common/models/types${BUILDER_TERM_END} tests"
|
||||
echo "### Running $builder_term common/models/types) tests"
|
||||
# Is not mocha-based; it's TSC-based instead, as we're just ensuring that the .d.ts
|
||||
# file is a proper TS declaration file.
|
||||
npm run test
|
||||
|
|
@ -103,7 +103,7 @@ if [[ $VERSION_ENVIRONMENT == test ]] && builder_has_action test :browser; then
|
|||
if builder_pull_get_details; then
|
||||
if ! ([[ $builder_pull_title =~ \(web\) ]] || builder_pull_has_label test-browserstack); then
|
||||
|
||||
echo "Auto-skipping ${BUILDER_TERM_START}test:browser${BUILDER_TERM_END} for unrelated CI test build"
|
||||
echo "Auto-skipping $builder_term test:browser) for unrelated CI test build"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
|
@ -129,7 +129,7 @@ if builder_start_action test:browser; then
|
|||
KARMA_INFO_LEVEL="--log-level=debug"
|
||||
|
||||
if builder_has_option --debug; then
|
||||
echo "${BUILDER_TERM_START}--ci${BUILDER_TERM_END} option set; ignoring ${BUILDER_TERM_START}--debug${BUILDER_TERM_END} option"
|
||||
echo "$(builder_term --ci) option set; ignoring $(builder_term --debug) option"
|
||||
fi
|
||||
else
|
||||
KARMA_CONFIG="manual.conf.cjs"
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@
|
|||
"mocha": "^10.0.0",
|
||||
"mocha-teamcity-reporter": "^4.0.0",
|
||||
"sinon": "^7.1.1",
|
||||
"ts-node": "^9.1.1",
|
||||
"typescript": "^4.5.4"
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"convert-source-map": "^2.0.0"
|
||||
|
|
|
|||
|
|
@ -16,8 +16,6 @@ cd "$(dirname "$THIS_SCRIPT")"
|
|||
|
||||
################################ Main script ################################
|
||||
|
||||
builder_check_color "$@"
|
||||
|
||||
# TODO: for predictive-text, we only need :headless, perhaps we should be splitting modules?
|
||||
# TODO: remove :tools once kmlmc is a dependency for test:module
|
||||
|
||||
|
|
@ -31,7 +29,7 @@ builder_describe "Builds the standalone, headless form of Keyman Engine for Web'
|
|||
"test" \
|
||||
":module A headless, Node-oriented version of the module useful for unit tests" \
|
||||
":tools Related tools useful for development and testing of this module" \
|
||||
"--ci Sets ${BUILDER_TERM_START}test${BUILDER_TERM_END} action to use CI-based test configurations & reporting"
|
||||
"--ci Sets $(builder_term test) action to use CI-based test configurations & reporting"
|
||||
|
||||
builder_describe_outputs \
|
||||
configure /node_modules \
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@
|
|||
"chai": "^4.3.4",
|
||||
"mocha": "^10.0.0",
|
||||
"mocha-teamcity-reporter": "^4.0.0",
|
||||
"ts-node": "^9.1.1",
|
||||
"typescript": "^4.5.4"
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"scripts": {
|
||||
"tsc": "tsc",
|
||||
|
|
|
|||
|
|
@ -17,10 +17,6 @@ cd "$THIS_SCRIPT_PATH"
|
|||
|
||||
################################ Main script ################################
|
||||
|
||||
# Ensures color var use in `builder_describe`'s argument respects the specified
|
||||
# --color/--no-color option.
|
||||
builder_check_color "$@"
|
||||
|
||||
builder_describe \
|
||||
"Compiles the web-oriented utility function module." \
|
||||
"@../recorder test" \
|
||||
|
|
@ -30,7 +26,7 @@ builder_describe \
|
|||
clean \
|
||||
build \
|
||||
test \
|
||||
"--ci For use with action ${BUILDER_TERM_START}test${BUILDER_TERM_END} - emits CI-friendly test reports"
|
||||
"--ci For use with action $(builder_term test) - emits CI-friendly test reports"
|
||||
|
||||
builder_describe_outputs \
|
||||
configure /node_modules \
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@
|
|||
"chai": "^4.3.4",
|
||||
"mocha": "^10.0.0",
|
||||
"mocha-teamcity-reporter": "^4.0.0",
|
||||
"ts-node": "^9.1.1",
|
||||
"typescript": "^4.5.4"
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"scripts": {
|
||||
"tsc": "tsc",
|
||||
|
|
|
|||
|
|
@ -10,6 +10,6 @@
|
|||
"license": "MIT",
|
||||
"type": "module",
|
||||
"devDependencies": {
|
||||
"typescript": "^4.5.4"
|
||||
"typescript": "^4.9.5"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
},
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"typescript": "^4.5.4"
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"files": [
|
||||
"message.d.ts"
|
||||
|
|
|
|||
|
|
@ -35,8 +35,8 @@
|
|||
"mocha": "^10.0.0",
|
||||
"mocha-teamcity-reporter": "^4.0.0",
|
||||
"sinon": "^7.1.1",
|
||||
"ts-node": "^9.1.1",
|
||||
"typescript": "^4.5.4"
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@keymanapp/keyman-version": "*",
|
||||
|
|
|
|||
|
|
@ -25,6 +25,6 @@
|
|||
"@types/node": "^11.9.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^4.5.4"
|
||||
"typescript": "^4.9.5"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
},
|
||||
"homepage": "https://github.com/keymanapp/keyman#readme",
|
||||
"devDependencies": {
|
||||
"typescript": "^4.5.4"
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@keymanapp/keyman-version": "*",
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
"mocha": "^10.0.0",
|
||||
"mocha-teamcity-reporter": "^4.0.0",
|
||||
"@types/node": "^14.0.5",
|
||||
"typescript": "^4.5.4"
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"type": "module",
|
||||
"paths": {
|
||||
|
|
|
|||
|
|
@ -124,7 +124,20 @@ var
|
|||
begin
|
||||
if not FIsValid and FIsValidated then
|
||||
begin
|
||||
msg := '''' + OriginalTag + ''' is not a valid BCP 47 tag';
|
||||
if OriginalTag = '' then
|
||||
begin
|
||||
msg := 'A valid BCP 47 tag must contain at least a language subtag';
|
||||
end
|
||||
else
|
||||
begin
|
||||
msg := '''' + OriginalTag + ''' is not a valid BCP 47 tag';
|
||||
end;
|
||||
Exit(False);
|
||||
end;
|
||||
|
||||
if Tag = '' then
|
||||
begin
|
||||
msg := 'A valid BCP 47 tag must contain at least a language subtag';
|
||||
Exit(False);
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -337,6 +337,8 @@ type
|
|||
procedure SaveJSON(ARoot: TJSONObject); virtual;
|
||||
procedure LoadXML(ARoot: IXMLNode); virtual;
|
||||
procedure SaveXML(ARoot: IXMLNode); virtual;
|
||||
function ContainsID(const id: string): Boolean;
|
||||
function IndexOfID(const id: string): Integer;
|
||||
end;
|
||||
|
||||
TPackageLexicalModel = class(TPackageBaseObject)
|
||||
|
|
@ -2262,6 +2264,21 @@ end;
|
|||
|
||||
{ TPackageKeyboardLanguageList }
|
||||
|
||||
function TPackageKeyboardLanguageList.ContainsID(const id: string): Boolean;
|
||||
begin
|
||||
Result := IndexOfID(id) >= 0;
|
||||
end;
|
||||
|
||||
function TPackageKeyboardLanguageList.IndexOfID(const id: string): Integer;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := 0 to Count - 1 do
|
||||
if SameText(Items[i].ID, id) then
|
||||
Exit(i);
|
||||
Result := -1;
|
||||
end;
|
||||
|
||||
procedure TPackageKeyboardLanguageList.LoadJSON(ARoot: TJSONObject);
|
||||
var
|
||||
j: Integer;
|
||||
|
|
|
|||
|
|
@ -12,19 +12,14 @@ project('keyboardprocessor', 'cpp', 'c',
|
|||
'cpp_std=c++14',
|
||||
'b_vscrt=static_from_buildtype',
|
||||
'warning_level=2'],
|
||||
meson_version: '>=0.45.0')
|
||||
meson_version: '>=0.53.0')
|
||||
|
||||
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
|
||||
py = import('python')
|
||||
python = py.find_installation()
|
||||
|
||||
# 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)
|
||||
|
|
|
|||
|
|
@ -58,18 +58,7 @@ if compiler.get_id() == 'emscripten'
|
|||
links = []
|
||||
endif
|
||||
|
||||
lib = library('kmnkbp0',
|
||||
'option.cpp',
|
||||
'keyboard.cpp',
|
||||
'state.cpp',
|
||||
'km_kbp_context_api.cpp',
|
||||
'km_kbp_keyboard_api.cpp',
|
||||
'km_kbp_options_api.cpp',
|
||||
'km_kbp_state_api.cpp',
|
||||
'km_kbp_debug_api.cpp',
|
||||
'km_kbp_processevent_api.cpp',
|
||||
'jsonpp.cpp',
|
||||
'mock/mock_processor.cpp',
|
||||
kmx_files = files(
|
||||
'kmx/kmx_consts.cpp',
|
||||
'kmx/kmx_processevent.cpp',
|
||||
'kmx/kmx_actions.cpp',
|
||||
|
|
@ -84,14 +73,58 @@ lib = library('kmnkbp0',
|
|||
'kmx/kmx_options.cpp',
|
||||
'kmx/kmx_processor.cpp',
|
||||
'kmx/kmx_xstring.cpp',
|
||||
)
|
||||
|
||||
api_files = files(
|
||||
'km_kbp_context_api.cpp',
|
||||
'km_kbp_keyboard_api.cpp',
|
||||
'km_kbp_options_api.cpp',
|
||||
'km_kbp_state_api.cpp',
|
||||
'km_kbp_debug_api.cpp',
|
||||
'km_kbp_processevent_api.cpp',
|
||||
)
|
||||
|
||||
core_files = files(
|
||||
'option.cpp',
|
||||
'keyboard.cpp',
|
||||
'state.cpp',
|
||||
'jsonpp.cpp',
|
||||
'utfcodec.cpp',
|
||||
)
|
||||
|
||||
mock_files = files(
|
||||
'mock/mock_processor.cpp',
|
||||
)
|
||||
|
||||
lib = library('kmnkbp0',
|
||||
api_files,
|
||||
core_files,
|
||||
kmx_files,
|
||||
mock_files,
|
||||
version_res,
|
||||
cpp_args: defns + warns + flags,
|
||||
link_args: links,
|
||||
version: lib_version,
|
||||
include_directories: inc,
|
||||
pic: true,
|
||||
install: true)
|
||||
|
||||
if host_machine.system() == 'linux'
|
||||
# on Linux we need the static lib for ibus-keyman tests
|
||||
static_library('kmnkbp0-static',
|
||||
api_files,
|
||||
core_files,
|
||||
kmx_files,
|
||||
mock_files,
|
||||
version_res,
|
||||
cpp_args: defns + warns + flags,
|
||||
link_args: links,
|
||||
include_directories: inc,
|
||||
pic: true,
|
||||
install: false
|
||||
)
|
||||
endif
|
||||
|
||||
headerdirs = [ '.', 'keyman' ] # subdirectories of ${prefix}/include to add to header path
|
||||
|
||||
kmnkbp = declare_dependency(link_with: lib, include_directories: inc)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
# Note: this version of cmpfiles ignores line endings, which is better for platform independence
|
||||
cmpfiles = ['-c', 'import sys; a = open(sys.argv[1], \'r\').read(); b = open(sys.argv[2], \'r\').read(); exit(not (a==b))']
|
||||
stnds = join_paths(meson.source_root(), 'tests', 'standards')
|
||||
stnds = join_paths(meson.current_source_dir(), 'standards')
|
||||
|
||||
libsrc = include_directories(join_paths('../', 'src'))
|
||||
|
||||
|
|
|
|||
|
|
@ -25,14 +25,28 @@ else
|
|||
test_path = meson.current_build_dir()
|
||||
endif
|
||||
|
||||
coretest_files = files(
|
||||
'kmx_test_source.cpp',
|
||||
)
|
||||
|
||||
kmx = executable('kmx',
|
||||
'kmx.cpp',
|
||||
'kmx_test_source.cpp',
|
||||
coretest_files,
|
||||
cpp_args: defns + warns,
|
||||
include_directories: [inc, libsrc],
|
||||
link_args: links + tests_flags,
|
||||
objects: lib.extract_all_objects())
|
||||
|
||||
test_lib = static_library('kmnkbp-tests',
|
||||
coretest_files,
|
||||
cpp_args: defns + warns + flags,
|
||||
include_directories: [inc, libsrc],
|
||||
link_args: links + tests_flags,
|
||||
objects: lib.extract_all_objects(),
|
||||
pic: true,
|
||||
install: false
|
||||
)
|
||||
|
||||
tests = [
|
||||
'000 - null keyboard',
|
||||
'001 - basic input UnicodeI',
|
||||
|
|
@ -87,7 +101,7 @@ tests = [
|
|||
]
|
||||
|
||||
if build_machine.system() == 'windows'
|
||||
kmcomp = find_program(join_paths(meson.source_root(),'..','..','..','windows','bin','developer','kmcomp.exe'), 'kmcomp.exe', required: false)
|
||||
kmcomp = find_program(join_paths(meson.current_source_dir(),'..','..','..','..','windows','bin','developer','kmcomp.exe'), 'kmcomp.exe', required: false)
|
||||
kmcomp_cmd = [kmcomp]
|
||||
copy_cmd = [find_program('cmd.exe', required: true), '/c', 'copy']
|
||||
cat_cmd = [find_program('cmd.exe', required: true), '/c', 'type']
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ files:
|
|||
locale:
|
||||
de: de
|
||||
fr: fr
|
||||
kn: kn
|
||||
|
||||
- source: /windows/src/desktop/setup/locale/en/strings.xml
|
||||
dest: /windows/setup/strings.xml
|
||||
|
|
@ -68,6 +69,7 @@ files:
|
|||
locale:
|
||||
de: de
|
||||
fr: fr
|
||||
kn: kn
|
||||
|
||||
# iOS files
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,9 @@ unit CompilePackage;
|
|||
interface
|
||||
|
||||
uses
|
||||
kpsfile, kmpinffile, PackageInfo,
|
||||
kpsfile,
|
||||
kmpinffile,
|
||||
PackageInfo,
|
||||
Keyman.Developer.System.Project.ProjectLog;
|
||||
|
||||
function DoCompilePackage(pack: TKPSFile; AMessageEvent: TCompilePackageMessageEvent; ASilent, ACheckFilenameConventions: Boolean; const AOutputFileName: string): Boolean; // I4688
|
||||
|
|
@ -37,6 +39,7 @@ implementation
|
|||
uses
|
||||
Winapi.Windows,
|
||||
System.Classes,
|
||||
System.Generics.Collections,
|
||||
System.SysUtils,
|
||||
System.IniFiles,
|
||||
System.Zip,
|
||||
|
|
@ -85,6 +88,7 @@ type
|
|||
procedure CheckKeyboardLanguages;
|
||||
procedure CheckFilenameConventions;
|
||||
function CheckLexicalModels: Boolean;
|
||||
procedure CheckForDuplicatedLanguages(const resourceType, id: string; languages: TPackageKeyboardLanguageList);
|
||||
end;
|
||||
|
||||
function DoCompilePackage(pack: TKPSFile; AMessageEvent: TCompilePackageMessageEvent; ASilent, ACheckFilenameConventions: Boolean; const AOutputFileName: string): Boolean; // I4688
|
||||
|
|
@ -141,6 +145,8 @@ begin
|
|||
end;
|
||||
|
||||
function TCompilePackage.CheckLexicalModels: Boolean;
|
||||
var
|
||||
model: TPackageLexicalModel;
|
||||
begin
|
||||
if pack.LexicalModels.Count > 0 then
|
||||
begin
|
||||
|
|
@ -151,6 +157,12 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
for model in pack.LexicalModels do
|
||||
begin
|
||||
CheckForDuplicatedLanguages('model', model.id, model.Languages);
|
||||
end;
|
||||
|
||||
|
||||
Exit(True);
|
||||
end;
|
||||
|
||||
|
|
@ -487,6 +499,7 @@ end;
|
|||
const
|
||||
SKKeyboardPackageLanguageNonCanonical = 'The keyboard %0:s has a non-canonical language tag "%1:s" (%2:s), should be "%3:s".';
|
||||
SKKeyboardShouldHaveAtLeastOneLanguage = 'The keyboard %0:s has no language tags. It should have at least one language tag.';
|
||||
SKPackageShouldNotRepeatLanguages = 'The %0:s %1:s has a repeated language "%2:s".';
|
||||
|
||||
procedure TCompilePackage.CheckKeyboardLanguages;
|
||||
var
|
||||
|
|
@ -496,6 +509,30 @@ begin
|
|||
begin
|
||||
if k.Languages.Count = 0 then
|
||||
WriteMessage(plsWarning, Format(SKKeyboardShouldHaveAtLeastOneLanguage, [k.ID]));
|
||||
CheckForDuplicatedLanguages('keyboard', k.ID, k.Languages);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCompilePackage.CheckForDuplicatedLanguages(const resourceType, id: string; languages: TPackageKeyboardLanguageList);
|
||||
var
|
||||
tags: TDictionary<string,Integer>;
|
||||
lang: TPackageKeyboardLanguage;
|
||||
begin
|
||||
tags := TDictionary<string,Integer>.Create;
|
||||
try
|
||||
for lang in languages do
|
||||
begin
|
||||
if tags.ContainsKey(lang.ID.ToLower) then
|
||||
begin
|
||||
WriteMessage(plsWarning, Format(SKPackageShouldNotRepeatLanguages, [resourceType, id, lang.ID]));
|
||||
end
|
||||
else
|
||||
begin
|
||||
tags.Add(lang.ID.ToLower, 0);
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
tags.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
"@keymanapp/models-types": "*",
|
||||
"@keymanapp/keyman-version": "*",
|
||||
"commander": "^3.0.0",
|
||||
"typescript": "^4.5.4",
|
||||
"typescript": "^4.9.5",
|
||||
"xml2js": "^0.4.19"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
@ -53,7 +53,7 @@
|
|||
"chalk": "^2.4.2",
|
||||
"jszip": "^3.7.0",
|
||||
"mocha": "^10.0.0",
|
||||
"ts-node": "^9.1.1"
|
||||
"ts-node": "^10.9.1"
|
||||
},
|
||||
"mocha": {
|
||||
"spec": "dist-tests/**/test-*.js"
|
||||
|
|
|
|||
|
|
@ -35,9 +35,9 @@
|
|||
"chai": "^4.3.4",
|
||||
"copyfiles": "^2.4.1",
|
||||
"mocha": "^10.0.0",
|
||||
"ts-node": "^10.4.0",
|
||||
"ts-node": "^10.9.1",
|
||||
"tsc-watch": "^4.5.0",
|
||||
"typescript": "^4.5.4"
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"mocha": {
|
||||
"require": "ts-node/register",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es2017",
|
||||
"target": "es2022",
|
||||
"moduleResolution": "node",
|
||||
"sourceMap": true,
|
||||
"outDir": "dist/",
|
||||
|
|
@ -15,7 +15,8 @@
|
|||
"noImplicitAny": true,
|
||||
"strictBindCallApply": true,
|
||||
"strictFunctionTypes": true,
|
||||
"noUnusedLocals": true
|
||||
"noUnusedLocals": true,
|
||||
"lib": ["es2022"]
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts"
|
||||
|
|
|
|||
|
|
@ -314,8 +314,7 @@ type
|
|||
procedure EnableLexicalModelTabControls;
|
||||
procedure ShowEditLanguageForm(grid: TStringGrid;
|
||||
langs: TPackageKeyboardLanguageList; lang: TPackageKeyboardLanguage);
|
||||
function ShowAddLanguageForm(grid: TStringGrid;
|
||||
langs: TPackageKeyboardLanguageList): Boolean;
|
||||
procedure ShowAddLanguageForm(grid: TStringGrid; langs: TPackageKeyboardLanguageList);
|
||||
procedure RefreshLexicalModelList;
|
||||
procedure UpdateQRCode;
|
||||
|
||||
|
|
@ -1624,6 +1623,8 @@ procedure TfrmPackageEditor.EnableControls;
|
|||
begin
|
||||
EnableStartMenuControls;
|
||||
EnableDetailsTabControls;
|
||||
EnableKeyboardTabControls;
|
||||
EnableLexicalModelTabControls;
|
||||
EnableCompileTabControls;
|
||||
end;
|
||||
|
||||
|
|
@ -1686,35 +1687,16 @@ end;
|
|||
procedure TfrmPackageEditor.cmdKeyboardAddLanguageClick(Sender: TObject);
|
||||
var
|
||||
k: TPackageKeyboard;
|
||||
lang: TPackageKeyboardLanguage;
|
||||
frm: TfrmSelectBCP47Language;
|
||||
begin
|
||||
k := SelectedKeyboard;
|
||||
Assert(Assigned(k));
|
||||
|
||||
frm := TfrmSelectBCP47Language.Create(Application.MainForm);
|
||||
try
|
||||
if frm.ShowModal = mrOk then
|
||||
begin
|
||||
lang := TPackageKeyboardLanguage.Create(pack);
|
||||
lang.ID := frm.LanguageID;
|
||||
lang.Name := frm.LanguageName;
|
||||
k.Languages.Add(lang);
|
||||
RefreshKeyboardLanguageList(k);
|
||||
gridKeyboardLanguages.Row := gridKeyboardLanguages.RowCount - 1;
|
||||
gridKeyboardLanguagesClick(gridKeyboardLanguages);
|
||||
Modified := True;
|
||||
end;
|
||||
finally
|
||||
frm.Free;
|
||||
end;
|
||||
ShowAddLanguageForm(gridKeyboardLanguages, k.Languages);
|
||||
end;
|
||||
|
||||
procedure TfrmPackageEditor.cmdKeyboardEditLanguageClick(Sender: TObject);
|
||||
var
|
||||
k: TPackageKeyboard;
|
||||
lang: TPackageKeyboardLanguage;
|
||||
frm: TfrmSelectBCP47Language;
|
||||
begin
|
||||
k := SelectedKeyboard;
|
||||
Assert(Assigned(k));
|
||||
|
|
@ -1722,20 +1704,7 @@ begin
|
|||
lang := SelectedKeyboardLanguage;
|
||||
Assert(Assigned(lang));
|
||||
|
||||
frm := TfrmSelectBCP47Language.Create(Application.MainForm);
|
||||
try
|
||||
frm.LanguageID := lang.ID;
|
||||
frm.LanguageName := lang.Name;
|
||||
if frm.ShowModal = mrOk then
|
||||
begin
|
||||
lang.ID := frm.LanguageID;
|
||||
lang.Name := frm.LanguageName;
|
||||
RefreshKeyboardLanguageList(k);
|
||||
Modified := True;
|
||||
end;
|
||||
finally
|
||||
frm.Free;
|
||||
end;
|
||||
ShowEditLanguageForm(gridKeyboardLanguages, k.Languages, lang);
|
||||
end;
|
||||
|
||||
procedure TfrmPackageEditor.cmdKeyboardRemoveLanguageClick(Sender: TObject);
|
||||
|
|
@ -1819,16 +1788,25 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function TfrmPackageEditor.ShowAddLanguageForm(grid: TStringGrid; langs: TPackageKeyboardLanguageList): Boolean;
|
||||
procedure TfrmPackageEditor.ShowAddLanguageForm(grid: TStringGrid; langs: TPackageKeyboardLanguageList);
|
||||
var
|
||||
lang: TPackageKeyboardLanguage;
|
||||
frm: TfrmSelectBCP47Language;
|
||||
n: Integer;
|
||||
begin
|
||||
Result := False;
|
||||
frm := TfrmSelectBCP47Language.Create(Application.MainForm);
|
||||
try
|
||||
if frm.ShowModal = mrOk then
|
||||
begin
|
||||
n := langs.IndexOfID(frm.LanguageID);
|
||||
if n >= 0 then
|
||||
begin
|
||||
// Duplicate - we won't re-add the item, just select the existing item
|
||||
grid.Row := n + 1;
|
||||
EnableControls;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
lang := TPackageKeyboardLanguage.Create(pack);
|
||||
lang.ID := frm.LanguageID;
|
||||
lang.Name := frm.LanguageName;
|
||||
|
|
@ -1836,7 +1814,7 @@ begin
|
|||
RefreshLanguageList(grid, langs);
|
||||
grid.Row := grid.RowCount - 1;
|
||||
Modified := True;
|
||||
Result := True;
|
||||
EnableControls;
|
||||
end;
|
||||
finally
|
||||
frm.Free;
|
||||
|
|
@ -1846,6 +1824,7 @@ end;
|
|||
procedure TfrmPackageEditor.ShowEditLanguageForm(grid: TStringGrid; langs: TPackageKeyboardLanguageList; lang: TPackageKeyboardLanguage);
|
||||
var
|
||||
frm: TfrmSelectBCP47Language;
|
||||
n: Integer;
|
||||
begin
|
||||
frm := TfrmSelectBCP47Language.Create(Application.MainForm);
|
||||
try
|
||||
|
|
@ -1853,9 +1832,30 @@ begin
|
|||
frm.LanguageName := lang.Name;
|
||||
if frm.ShowModal = mrOk then
|
||||
begin
|
||||
if not SameText(frm.LanguageID, lang.ID) then
|
||||
begin
|
||||
// If the id has changed, check for duplicates
|
||||
n := langs.IndexOfID(frm.LanguageID);
|
||||
if n >= 0 then
|
||||
begin
|
||||
// Duplicate - we will delete the edited one and select the existing
|
||||
// one
|
||||
langs.Remove(lang);
|
||||
RefreshLanguageList(grid, langs);
|
||||
|
||||
// The index may have changed, search again
|
||||
n := langs.IndexOfID(frm.LanguageID);
|
||||
grid.Row := n + 1;
|
||||
EnableControls;
|
||||
Modified := True;
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
lang.ID := frm.LanguageID;
|
||||
lang.Name := frm.LanguageName;
|
||||
RefreshLanguageList(grid, langs);
|
||||
EnableControls;
|
||||
Modified := True;
|
||||
end;
|
||||
finally
|
||||
|
|
@ -2005,10 +2005,7 @@ var
|
|||
begin
|
||||
lm := SelectedLexicalModel;
|
||||
Assert(Assigned(lm));
|
||||
|
||||
if ShowAddLanguageForm(gridLexicalModelLanguages, lm.Languages) then
|
||||
gridLexicalModelLanguagesClick(gridLexicalModelLanguages);
|
||||
EnableLexicalModelTabControls;
|
||||
ShowAddLanguageForm(gridLexicalModelLanguages, lm.Languages);
|
||||
end;
|
||||
|
||||
procedure TfrmPackageEditor.cmdLexicalModelLanguageEditClick(Sender: TObject);
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ type
|
|||
private
|
||||
tag: TBCP47Tag;
|
||||
FCustomLanguageName: Boolean;
|
||||
procedure EnableControls;
|
||||
function GetLanguageID: string;
|
||||
function GetLanguageName: string;
|
||||
procedure RefreshLanguageName;
|
||||
|
|
@ -106,6 +107,8 @@ begin
|
|||
PopulateComboBoxFromDict(cbLanguageTag, TLanguageCodeUtils.BCP47Languages);
|
||||
PopulateComboBoxFromDict(cbScriptTag, TLanguageCodeUtils.BCP47Scripts);
|
||||
PopulateComboBoxFromDict(cbRegionTag, TLanguageCodeUtils.BCP47Regions);
|
||||
RefreshLanguageName;
|
||||
EnableControls;
|
||||
end;
|
||||
|
||||
procedure TfrmSelectBCP47Language.FormDestroy(Sender: TObject);
|
||||
|
|
@ -144,11 +147,18 @@ procedure TfrmSelectBCP47Language.cmdResetLanguageNameClick(Sender: TObject);
|
|||
begin
|
||||
editLanguageName.Text := LookupLanguageName;
|
||||
FCustomLanguageName := False;
|
||||
EnableControls;
|
||||
end;
|
||||
|
||||
procedure TfrmSelectBCP47Language.editLanguageNameChange(Sender: TObject);
|
||||
begin
|
||||
FCustomLanguageName := True;
|
||||
EnableControls;
|
||||
end;
|
||||
|
||||
procedure TfrmSelectBCP47Language.EnableControls;
|
||||
begin
|
||||
cmdResetLanguageName.Enabled := FCustomLanguageName;
|
||||
end;
|
||||
|
||||
procedure TfrmSelectBCP47Language.cbLanguageTagChange(Sender: TObject);
|
||||
|
|
@ -175,6 +185,7 @@ begin
|
|||
end;
|
||||
FCustomLanguageName := False; // Always reset when entering a language tag.
|
||||
RefreshLanguageName;
|
||||
EnableControls;
|
||||
end;
|
||||
|
||||
procedure TfrmSelectBCP47Language.cbRegionTagChange(Sender: TObject);
|
||||
|
|
@ -213,6 +224,7 @@ begin
|
|||
begin
|
||||
editLanguageName.Text := LookupLanguageName;
|
||||
FCustomLanguageName := False;
|
||||
EnableControls;
|
||||
end;
|
||||
cmdOK.Enabled := tag.IsValid(True, msg);
|
||||
if not cmdOK.Enabled
|
||||
|
|
@ -228,12 +240,14 @@ begin
|
|||
cbScriptTag.Text := tag.Script;
|
||||
RefreshLanguageName;
|
||||
FCustomLanguageName := editLanguageName.Text <> LookupLanguageName;
|
||||
EnableControls;
|
||||
end;
|
||||
|
||||
procedure TfrmSelectBCP47Language.SetLanguageName(const Value: string);
|
||||
begin
|
||||
editLanguageName.Text := Value;
|
||||
FCustomLanguageName := editLanguageName.Text <> LookupLanguageName;
|
||||
EnableControls;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
|
|
|||
|
|
@ -13,7 +13,8 @@ sudo apt install python3-lxml python3-magic python3-numpy python3-qrcode python3
|
|||
python3-setuptools python3-pip python3-dbus ibus libglib2.0-bin liblocale-gettext-perl
|
||||
```
|
||||
|
||||
Either `python3-raven` or `python3-sentry-sdk` (>= 1.4) is required as well. On Ubuntu 22.04 and later run:
|
||||
Either `python3-raven` or `python3-sentry-sdk` (>= 1.4) is required as well.
|
||||
On Ubuntu 22.04 and later run:
|
||||
|
||||
```bash
|
||||
sudo apt install python3-sentry-sdk
|
||||
|
|
@ -34,8 +35,8 @@ or install it with pip:
|
|||
pip3 install sentry-sdk
|
||||
```
|
||||
|
||||
Run the script `./createkeymandirs.sh` to create the directories for these programs to
|
||||
install the packages to.
|
||||
Run the script `./createkeymandirs.sh` to create the directories for these
|
||||
programs to install the packages to.
|
||||
|
||||
Also copy and compile the GSettings schema:
|
||||
|
||||
|
|
@ -65,7 +66,8 @@ To uninstall you can run `sudo make uninstall`.
|
|||
|
||||
`./km-config`
|
||||
|
||||
This displays a configuration panel that shows the currently installed Keyman keyboard packages and can download and install additional keyboards.
|
||||
This displays a configuration panel that shows the currently installed Keyman
|
||||
keyboard packages and can download and install additional keyboards.
|
||||
|
||||
#### Buttons
|
||||
|
||||
|
|
|
|||
|
|
@ -169,38 +169,81 @@ Building packages happen in the [Keyman source tree](https://github.com/keymanap
|
|||
|
||||
The Keyman
|
||||
[`linux/scripts/jenkins.sh`](https://github.com/keymanapp/keyman/blob/master/linux/scripts/jenkins.sh)
|
||||
script can be used to create a source package (replace `packageName` with the name of the package,
|
||||
i.e. one of keyman, kmflcomp, libkmfl, and ibus-kmfl).
|
||||
script can be used to create a source package.
|
||||
|
||||
```bash
|
||||
cd linux
|
||||
./scripts/jenkins.sh ${packageName} ${DEBSIGNKEY}
|
||||
./scripts/jenkins.sh keyman ${DEBSIGNKEY}
|
||||
```
|
||||
|
||||
This creates a source package (`<packageName>_<version>-1.dsc`) and some `*.tar.?z` files in the source root directory for `keyman`.
|
||||
This creates a source package (`keyman_<version>-1.dsc`) and some `*.tar.?z`
|
||||
files in the source root directory for `keyman`.
|
||||
|
||||
ci-builder-script's [`build-package`](https://github.com/sillsdev/ci-builder-scripts/blob/master/bash/build-package)
|
||||
script creates the binary packages:
|
||||
|
||||
```bash
|
||||
cd linux/${packageName}
|
||||
cd $KEYMAN_ROOT
|
||||
~/ci-builder-scripts/bash/build-package \
|
||||
--dists "focal bionic" --arches "amd64 i386" \
|
||||
--debkeyid ${DEBSIGNKEY} --build-in-place --no-upload
|
||||
```
|
||||
|
||||
This will create the binary package `<packageName>_<version>-1+<dist>1_<arch>.deb`.
|
||||
This will create the binary package `keyman_<version>-1+<dist>1_<arch>.deb`.
|
||||
|
||||
To speed up package building you might want to limit the build to a single dist
|
||||
(e.g. `--dists "bionic"`) and arch (e.g. `--arches "amd64"`).
|
||||
|
||||
After building packages it might be a good idea to clean up the source tree before doing further
|
||||
work:
|
||||
After building packages it might be a good idea to clean up the source tree
|
||||
before doing further work:
|
||||
|
||||
```bash
|
||||
git clean -dxf
|
||||
```
|
||||
|
||||
### Local package builds (Docker)
|
||||
|
||||
It is possible to use the usual Debian/Ubuntu tools to create the package locally.
|
||||
For someone who only occasionally deals with packaging it might be easier to use
|
||||
the scripts that run on GitHub actions:
|
||||
|
||||
#### Prerequisites for local package builds with Docker
|
||||
|
||||
You'll have to create the docker image.
|
||||
|
||||
- clone [gha-ubuntu-packaging](https://github.com/sillsdev/gha-ubuntu-packaging)
|
||||
repo
|
||||
- create the image:
|
||||
|
||||
```bash
|
||||
cd /path/to/gha-ubuntu-packaging
|
||||
docker build --build-arg DIST=jammy --build-arg PLATFORM=amd64 -t sillsdev/jammy .
|
||||
```
|
||||
|
||||
#### Building packages with Docker
|
||||
|
||||
- create the source package
|
||||
|
||||
```bash
|
||||
cd $KEYMAN_ROOT
|
||||
TIER=$(cat TIER.md)
|
||||
export TIER
|
||||
cd linux
|
||||
./scripts/deb-packaging.sh source
|
||||
```
|
||||
|
||||
This will create the source package in $KEYMAN_ROOT directory.
|
||||
|
||||
- Create the binary packages with Docker:
|
||||
|
||||
```bash
|
||||
cd $KEYMAN_ROOT
|
||||
docker run -v $(pwd):/source -i -t -w /source --platform=linux/amd64 \
|
||||
sillsdev/jammy keyman_*.dsc /source
|
||||
```
|
||||
|
||||
This will create the binary packages in `$KEYMAN_ROOT/artifacts`.
|
||||
|
||||
## Package builds on Launchpad
|
||||
|
||||
Package builds on Launchpad are triggered manually by running the Keyman script
|
||||
|
|
@ -210,10 +253,10 @@ Package builds on Launchpad are triggered manually by running the Keyman script
|
|||
|
||||
1. If you don't have one, create an account at [launchpad.net](https://launchpad.net)
|
||||
2. Request to join the ["Keyman for Linux"](https://launchpad.net/~keymanapp) team.
|
||||
3. Create a [GPG](https://help.ubuntu.com/community/GnuPrivacyGuardHowto) key and associate it
|
||||
to your launchpad account
|
||||
4. Set the following environment variables in your `~/.profile` or `~/.bashrc` (so you don't have
|
||||
to set them every time)
|
||||
3. Create a [GPG](https://help.ubuntu.com/community/GnuPrivacyGuardHowto) key
|
||||
and associate it to your launchpad account
|
||||
4. Set the following environment variables in your `~/.profile` or `~/.bashrc`
|
||||
(so you don't have to set them every time)
|
||||
|
||||
```bash
|
||||
export GPGKEY=[key_id] # using the `key_id` of your GPG key
|
||||
|
|
@ -224,8 +267,9 @@ Package builds on Launchpad are triggered manually by running the Keyman script
|
|||
### Building packages on Launchpad
|
||||
|
||||
The `launchpad.sh` script downloads the current source code (beta or stable) from
|
||||
[downloads.keyman.com](https://downloads.keyman.com/linux/stable/), creates a Debian source package
|
||||
and uploads this to launchpad. Launchpad then rebuilds for the different distros and architectures.
|
||||
[downloads.keyman.com](https://downloads.keyman.com/linux/stable/), creates a
|
||||
Debian source package and uploads this to launchpad. Launchpad then rebuilds
|
||||
for the different distros and architectures.
|
||||
|
||||
To upload the packages to launchpad, run the following script from the `linux/` directory:
|
||||
|
||||
|
|
@ -239,14 +283,15 @@ To upload the packages to launchpad, run the following script from the `linux/`
|
|||
- `TIER="<tier>"` - alpha, beta, or stable, default from `../TIER.md`
|
||||
- `PROJECT="<project>"` - only upload this package
|
||||
- `DIST="<dist>"` - only upload for this distribution
|
||||
- `PACKAGEVERSION="<version>"` - normally use the default so don't specify it. But if you
|
||||
change packaging and run another upload you need to increment the number at the end of
|
||||
`PACKAGEVERSION`. e.g. next one is `1~sil2` then `1~sil3`…
|
||||
- `PACKAGEVERSION="<version>"` - normally use the default so don't specify
|
||||
it. But if you change packaging and run another upload you need to increment
|
||||
the number at the end of `PACKAGEVERSION`. e.g. next one is `1~sil2` then
|
||||
`1~sil3`…
|
||||
|
||||
### Releasing a new version
|
||||
|
||||
As part of releasing a new version it might be good to do some local testing first before uploading
|
||||
to Launchpad:
|
||||
As part of releasing a new version it might be good to do some local testing
|
||||
first before uploading to Launchpad:
|
||||
|
||||
- Run `launchpad.sh` with `UPLOAD="no"` to build the packages
|
||||
- Then install them on a clean VM and make sure no glaring bugs
|
||||
|
|
@ -268,11 +313,12 @@ accepted.
|
|||
The Keyman packages are maintained on the Debian side by the
|
||||
[Debian Input Method Team](https://wiki.debian.org/Teams/IMEPackagingTeam).
|
||||
|
||||
**NOTE:** All `changelog` files should contain the exact same entry that was previously
|
||||
accepted into the Debian repo (plus the new entry for the new update). This means that
|
||||
when your upload got accepted into Debian (not <mentors.debian.net>) you'll have to
|
||||
update the `changelog` files to match what got accepted (sometimes the Debian maintainers
|
||||
will create additional package versions).
|
||||
**NOTE:** All `changelog` files should contain the exact same entry that was
|
||||
previously accepted into the Debian repo (plus the new entry for the new
|
||||
update). This means that when your upload got accepted into Debian (not
|
||||
<mentors.debian.net>) you'll have to update the `changelog` files to match
|
||||
what got accepted (sometimes the Debian maintainers will create additional
|
||||
package versions).
|
||||
|
||||
### Prerequisites
|
||||
|
||||
|
|
@ -290,30 +336,41 @@ will create additional package versions).
|
|||
allowed_distributions = .*
|
||||
```
|
||||
|
||||
- subscribe to the [debian-input-method](debian-input-method@lists.debian.org) mailing list
|
||||
- subscribe to the [debian-input-method](https://lists.debian.org/debian-input-method/)
|
||||
mailing list
|
||||
|
||||
### Updating and uploading Debian package
|
||||
### Updating and uploading a stable release to Debian
|
||||
|
||||
This is done in several steps:
|
||||
|
||||
1. Download the source code from <download.keyman.com> and create the source package by running
|
||||
`scripts/debian.sh`
|
||||
2. sign the source package (you might be able to omit this step if the source package already
|
||||
got signed with the correct key in the previous step)
|
||||
3. upload to mentors
|
||||
4. file a RFS bug (Request For Sponsorship) against the `sponsorship-requests` pseudo-package,
|
||||
cc'ing `debian-input-method`, or just send an email to the `debian-input-method` list.
|
||||
|
||||
After the package got published in Debian you should update the `linux/debian/changelog` file
|
||||
with the exact same information that the changelog in Debian has.
|
||||
|
||||
The first three steps above and updating the changelog file can be done by running
|
||||
the following script:
|
||||
To do this you can run the `linux/scripts/upload-to-debian.sh` script:
|
||||
|
||||
```bash
|
||||
linux/scripts/upload-to-debian.sh -k $DEBSIGN_KEYID --push
|
||||
linux/scripts/upload-to-debian.sh -k ${DEBSIGNKEY} --push
|
||||
```
|
||||
|
||||
This does several steps:
|
||||
|
||||
1. Download the source code from <download.keyman.com> and create the source
|
||||
package by running `scripts/debian.sh`
|
||||
2. sign the source package
|
||||
3. upload to mentors (unless `-n` is passed)
|
||||
4. Create a branch with the updated `linux/debian/changelog` file based on the
|
||||
stable branch
|
||||
5. Cherry-pick the change on a new branch based on `master`
|
||||
6. If `--push` is passed, the two branches will be pushed to GitHub
|
||||
|
||||
There are a few additional manual required steps:
|
||||
|
||||
1. Create a draft-PR for the change against stable branch
|
||||
2. Create a draft PR for the cherry-picked change against `master`
|
||||
3. file a RFS bug (Request For Sponsorship) against the `sponsorship-requests`
|
||||
pseudo-package, cc'ing `debian-input-method`, or just send an email to the
|
||||
`debian-input-method` list.
|
||||
|
||||
After the package got published in Debian you can mark the PRs as ready
|
||||
for review. This should only be done after the package got published in
|
||||
Debian because the changelog file needs to contain the exact same
|
||||
information that the changelog in Debian has.
|
||||
|
||||
## Reference
|
||||
|
||||
See the [Linux readme](https://github.com/keymanapp/keyman/blob/master/docs/linux/README.md)
|
||||
|
|
|
|||
|
|
@ -9,5 +9,6 @@
|
|||
"timonwong.shellcheck",
|
||||
"maelvalais.autoconf",
|
||||
"webfreak.debug",
|
||||
"dawidd6.debian-vscode",
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@
|
|||
"menu-settings-show-banner" = "ಬ್ಯಾನರ್ ತೋರಿಸು";
|
||||
|
||||
/* Label for the "Get Started" automatic display toggle seen in the Settings menu */
|
||||
"menu-settings-startup-get-started" = "ಆರಂಭದಲ್ಲಿ 'Get Started' ತೋರಿಸು";
|
||||
"menu-settings-startup-get-started" = "ಆರಂಭದಲ್ಲಿ \"ಪ್ರಾರಂಭಿಕ ಪರದೆ\" ತೋರಿಸು";
|
||||
|
||||
/* Title for the main Settings menu */
|
||||
"menu-settings-title" = "ಕೀಮ್ಯಾನ್ ಸೆಟ್ಟಿಂಗ್ಗಳು";
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@
|
|||
<key>teamID</key>
|
||||
<string>3YE4W86L3G</string>
|
||||
<key>signingCertificate</key>
|
||||
<string>3F2AB892E24387929F51C36E7A03EF33502D341A</string>
|
||||
<string>05473BF50CCD4B78B304656FB4D93FDC7EE7ACD0</string>
|
||||
<key>installerSigningCertificate</key>
|
||||
<string>3F2AB892E24387929F51C36E7A03EF33502D341A</string>
|
||||
<string>05473BF50CCD4B78B304656FB4D93FDC7EE7ACD0</string>
|
||||
<key>provisioningProfiles</key>
|
||||
<dict>
|
||||
<key>Tavultesoft.Keyman</key>
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ underneath the app's name within the app-specific keyboard menu.) */
|
|||
"menu-clear-text" = "ಪಠ್ಯವನ್ನು ತೆರವುಗೊಳಿಸಿ";
|
||||
|
||||
/* Menu option that displays a list designed to help users start using the app */
|
||||
"menu-get-started" = "ಶುರುಮಾಡಿ";
|
||||
"menu-get-started" = "ಪ್ರಾರಂಭಿಕ ಪರದೆ";
|
||||
|
||||
/* Menu option that displays help for the app */
|
||||
"menu-help" = "ಮಾಹಿತಿ";
|
||||
|
|
|
|||
1
linux/.gitignore
vendored
1
linux/.gitignore
vendored
|
|
@ -92,7 +92,6 @@ test.sh
|
|||
debianpackage/
|
||||
*.deb
|
||||
*.ddeb
|
||||
*.build
|
||||
*.buildinfo
|
||||
*.changes
|
||||
*.tar.xz
|
||||
|
|
|
|||
|
|
@ -1,8 +1,34 @@
|
|||
keyman (15.0.274-2) UNRELEASED; urgency=medium
|
||||
keyman (16.0.138-4) unstable; urgency=medium
|
||||
|
||||
* Team upload
|
||||
* debian/tests/control: Don't run autopkgtest on s390x
|
||||
|
||||
-- Gunnar Hjalmarsson <gunnarhj@ubuntu.com> Sat, 11 Feb 2023 18:39:13 +0100
|
||||
|
||||
keyman (16.0.138-3) unstable; urgency=medium
|
||||
|
||||
* debian/tests/test-build: Fix autopkgtests
|
||||
|
||||
-- Eberhard Beilharz <eb1@sil.org> Thu, 09 Feb 2023 12:18:47 +0100
|
||||
|
||||
keyman (16.0.138-2) unstable; urgency=medium
|
||||
|
||||
* Team upload
|
||||
* debian/tests/control: Added missing autopkgtest dependency on
|
||||
pkg-config (closes: #1030815).
|
||||
|
||||
-- Gunnar Hjalmarsson <gunnarhj@debian.org> Tue, 07 Feb 2023 20:34:35 +0100
|
||||
|
||||
keyman (16.0.138-1) unstable; urgency=medium
|
||||
|
||||
[ Jelmer Vernooij ]
|
||||
* Include packaging path in Vcs-Git header.
|
||||
|
||||
-- Jelmer Vernooij <jelmer@debian.org> Wed, 25 Jan 2023 23:46:54 +0000
|
||||
[ Eberhard Beilharz ]
|
||||
* New upstream release.
|
||||
* Re-release to Debian
|
||||
|
||||
-- Eberhard Beilharz <eb1@sil.org> Thu, 02 Feb 2023 10:53:17 +0100
|
||||
|
||||
keyman (15.0.274-1) unstable; urgency=medium
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ Build-Depends:
|
|||
python3-requests,
|
||||
python3-requests-cache,
|
||||
python3-setuptools,
|
||||
meson (>= 0.45),
|
||||
meson (>= 0.53),
|
||||
ninja-build,
|
||||
libgtk-3-dev,
|
||||
libibus-1.0-dev (>= 1.2),
|
||||
|
|
@ -37,8 +37,8 @@ Build-Depends:
|
|||
metacity,
|
||||
gawk,
|
||||
Standards-Version: 4.6.1
|
||||
Vcs-Git: https://github.com/keymanapp/keyman.git [linux/debian]
|
||||
Vcs-Browser: https://github.com/keymanapp/keyman/tree/master/linux/debian
|
||||
Vcs-Git: https://github.com/keymanapp/keyman.git -b stable-16.0 [linux/debian]
|
||||
Vcs-Browser: https://github.com/keymanapp/keyman/tree/stable-16.0/linux/debian
|
||||
Homepage: https://www.keyman.com
|
||||
Rules-Requires-Root: binary-targets
|
||||
|
||||
|
|
|
|||
|
|
@ -4,24 +4,24 @@ Upstream-Contact: Keyman team <support@keyman.com>
|
|||
Source: https://github.com/keymanapp/keyman
|
||||
|
||||
Files: *
|
||||
Copyright: 2018-2022 SIL International
|
||||
Copyright: 2018-2023 SIL International
|
||||
License: MIT
|
||||
|
||||
Files: linux/ibus-keyman/*
|
||||
Copyright: 2004-2022 SIL International
|
||||
Copyright: 2004-2023 SIL International
|
||||
License: GPL-2+
|
||||
|
||||
Files: linux/ibus-keyman/src/keymanutil.c
|
||||
linux/ibus-keyman/src/keymanutil.h
|
||||
linux/ibus-keyman/src/kmpdetails.c
|
||||
linux/ibus-keyman/src/kmpdetails.h
|
||||
Copyright: 2009-2022 SIL International
|
||||
Copyright: 2009-2023 SIL International
|
||||
License: GPL-2+ or MIT
|
||||
|
||||
Files: linux/ibus-keyman/src/keyman-service.c
|
||||
linux/ibus-keyman/src/keyman-service.h
|
||||
linux/keyman-config/buildtools/help2md
|
||||
Copyright: 2018-2022 SIL International
|
||||
Copyright: 2018-2023 SIL International
|
||||
License: GPL-3+
|
||||
|
||||
Files: linux/ibus-keyman/config.rpath
|
||||
|
|
@ -49,7 +49,7 @@ Files: linux/ibus-keyman/Makefile.am
|
|||
linux/ibus-keyman/tests/Makefile.am
|
||||
linux/ibus-keyman/tests/Makefile.in
|
||||
Copyright: 1994-2017, Free Software Foundation, Inc.
|
||||
2009-2022, SIL International
|
||||
2009-2023, SIL International
|
||||
License: GPL-2+
|
||||
|
||||
Files: linux/ibus-keyman/m4/gettext.m4
|
||||
|
|
@ -87,7 +87,7 @@ Copyright: 2008-2010, Peng Huang <shawn.p.huang@gmail.com>
|
|||
2008-2013, Peng Huang <shawn.p.huang@gmail.com>
|
||||
2008-2021, Red Hat, Inc.
|
||||
2015-2021, Takao Fujiwara <takao.fujiwara1@gmail.com>
|
||||
2021-2022, SIL International
|
||||
2021-2023, SIL International
|
||||
License: LGPL-2.1+
|
||||
|
||||
Files: linux/keyman-config/buildtools/help2man
|
||||
|
|
@ -97,7 +97,7 @@ License: GPL-3+
|
|||
Files: debian/com.keyman.config.appdata.xml
|
||||
debian/com.keyman.ibus_keyman.metainfo.xml
|
||||
Copyright: 2019 Daniel Glassey <wdg@debian.org>
|
||||
2022 SIL International
|
||||
2022-2023 SIL International
|
||||
License: MIT
|
||||
|
||||
License: MIT
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
# Lintian overrides
|
||||
keyman source: very-long-line-length-in-source-file CONTRIBUTING.md *
|
||||
keyman source: very-long-line-length-in-source-file linux/ibus-keyman/configure *
|
||||
keyman source: very-long-line-length-in-source-file linux/ibus-keyman/m4/* *
|
||||
keyman source: very-long-line-length-in-source-file linux/ibus-keyman/tests/Makefile.in *
|
||||
keyman source: very-long-line-length-in-source-file resources/standards-data/langtags/langtags.json *
|
||||
|
||||
# Looks like /usr/libexec/ibus-engine-keyman is not recognized as binary for the man page,
|
||||
# so ignore that rule
|
||||
spare-manual-page
|
||||
|
|
@ -7,3 +7,28 @@ See <https://packaging.ubuntu.com/html/auto-pkg-test.html> and
|
|||
|
||||
**NOTE:** Runtime test names are only allowed to contain decimal digits,
|
||||
lowercase ASCII letters, plus or minus signs, dots or slashes.
|
||||
|
||||
## Manually run the tests
|
||||
|
||||
- build source and binary packages (see [packaging.md](../../../docs/linux/packaging.md))
|
||||
|
||||
- install dependencies
|
||||
|
||||
```bash
|
||||
sudo apt install autopkgtest qemu-system qemu-utils autodep8
|
||||
```
|
||||
|
||||
- create environment. Several different options are available, see
|
||||
[README.running-tests](https://salsa.debian.org/ci-team/autopkgtest/blob/master/doc/README.running-tests.rst)
|
||||
|
||||
For example:
|
||||
|
||||
```bash
|
||||
autopkgtest-buildvm-ubuntu-cloud -v --release=jammy
|
||||
```
|
||||
|
||||
- Run tests
|
||||
|
||||
```bash
|
||||
autopkgtest -B *.deb keyman_*.dsc -- qemu autopkgtest-jammy-amd64.img
|
||||
```
|
||||
|
|
|
|||
|
|
@ -1,2 +1,5 @@
|
|||
Tests: test-build
|
||||
Depends: @, build-essential
|
||||
Depends: @,
|
||||
build-essential,
|
||||
pkg-config,
|
||||
Architecture: amd64 arm64 armel armhf i386 mips64el mipsel ppc64el riscv64
|
||||
|
|
|
|||
|
|
@ -7,22 +7,24 @@ set -e
|
|||
|
||||
WORKDIR=$(mktemp -d)
|
||||
trap "rm -rf $WORKDIR" 0 INT QUIT ABRT PIPE TERM
|
||||
cd $WORKDIR
|
||||
cd "$WORKDIR"
|
||||
|
||||
# Test all include files are available
|
||||
cat <<EOF > keymantest.c
|
||||
#include <keyman/keyboardprocessor.h>
|
||||
km_kbp_context c;
|
||||
km_kbp_context* c;
|
||||
EOF
|
||||
|
||||
gcc keymantest.c `pkg-config --cflags --libs keyman_kmn_processor`
|
||||
# shellcheck disable=SC2046
|
||||
gcc -c keymantest.c $(pkg-config --cflags --libs keyman_kmn_processor)
|
||||
echo "build 1: OK"
|
||||
|
||||
# Test pkg-config file - include without path
|
||||
cat <<EOF > keymantest.c
|
||||
#include <keyboardprocessor.h>
|
||||
km_kbp_context c;
|
||||
km_kbp_context* c;
|
||||
EOF
|
||||
|
||||
gcc keymantest.c `pkg-config --cflags --libs keyman_kmn_processor`
|
||||
# shellcheck disable=SC2046
|
||||
gcc -c keymantest.c $(pkg-config --cflags --libs keyman_kmn_processor)
|
||||
echo "build 2: OK"
|
||||
|
|
|
|||
6
linux/ibus-keyman/icons/meson.build
Normal file
6
linux/ibus-keyman/icons/meson.build
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
icons = files('default.png')
|
||||
|
||||
install_data(
|
||||
icons,
|
||||
install_dir: '{datadir}/keyman/icons'
|
||||
)
|
||||
44
linux/ibus-keyman/meson.build
Normal file
44
linux/ibus-keyman/meson.build
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
project('ibus-keyman', 'c', 'cpp',
|
||||
version: run_command('cat', '../../VERSION.md', check: true).stdout().strip(),
|
||||
license: 'GPL-2+',
|
||||
# default_options : ['buildtype=release',
|
||||
# 'cpp_std=c++14',
|
||||
# 'b_vscrt=static_from_buildtype',
|
||||
# 'warning_level=2'],
|
||||
meson_version: '>=0.53.0')
|
||||
cc = meson.get_compiler('c')
|
||||
conf = configuration_data()
|
||||
|
||||
ibus = dependency('ibus-1.0', version: '>= 1.2.0')
|
||||
gtk = dependency('gtk+-3.0', version: '>= 2.4')
|
||||
x11 = dependency('x11', version: '>= 1.6')
|
||||
json_glib = dependency('json-glib-1.0', version: '>= 1.0')
|
||||
|
||||
core_dir = meson.current_source_dir() / '../../core'
|
||||
common_dir = meson.current_source_dir() / '../../common'
|
||||
|
||||
kmnkbp_lib = cc.find_library(
|
||||
'libkmnkbp0',
|
||||
dirs: [ core_dir / 'build/arch' / get_option('buildtype') / 'src' ]
|
||||
)
|
||||
|
||||
env = find_program('env')
|
||||
|
||||
# Check if we have patched ibus (https://github.com/ibus/ibus/pull/2440)
|
||||
if cc.has_header_symbol('ibus.h', 'IBUS_CAP_PREFILTER', dependencies: [ibus], required: false)
|
||||
conf.set('IBUS_HAS_PREFILTER', 1)
|
||||
endif
|
||||
|
||||
conf.set('HAVE_CONFIG_H', 1)
|
||||
configure_file(output : 'config.h',
|
||||
configuration : conf)
|
||||
|
||||
core_include_dirs = [
|
||||
include_directories('../../core/src'),
|
||||
include_directories('../../core/src/kmx'),
|
||||
include_directories('../../common/include'),
|
||||
]
|
||||
|
||||
subdir('icons')
|
||||
subdir('src')
|
||||
subdir('tests')
|
||||
|
|
@ -50,11 +50,11 @@ TESTS = \
|
|||
$(NULL)
|
||||
|
||||
print_kmp_SOURCES = \
|
||||
print_kmp.c
|
||||
test/print_kmp.c
|
||||
|
||||
print_kmpdetails_SOURCES = \
|
||||
kmpdetails.c \
|
||||
print_kmpdetails.c \
|
||||
test/print_kmpdetails.c \
|
||||
$(NULL)
|
||||
print_kmpdetails_CFLAGS = \
|
||||
$(AM_CFLAGS) \
|
||||
|
|
|
|||
17
linux/ibus-keyman/src/keyman.xml.in
Normal file
17
linux/ibus-keyman/src/keyman.xml.in
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<component>
|
||||
<name>org.freedesktop.IBus.Keyman</name>
|
||||
<description>Keyman Component</description>
|
||||
<exec>@libexecdir@/ibus-engine-keyman --ibus</exec>
|
||||
<version>@VERSION@</version>
|
||||
<author>Keyman Team <support@keyman.com></author>
|
||||
<license>GPL</license>
|
||||
<homepage>https://keyman.com</homepage>
|
||||
<textdomain>ibus-keyman</textdomain>
|
||||
<observed-paths>
|
||||
<path>/usr/share/keyman/</path>
|
||||
<path>/usr/local/share/keyman/</path>
|
||||
<path>~/.local/share/keyman/</path>
|
||||
</observed-paths>
|
||||
<engines exec="@libexecdir@/ibus-engine-keyman --xml" />
|
||||
</component>
|
||||
49
linux/ibus-keyman/src/meson.build
Normal file
49
linux/ibus-keyman/src/meson.build
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
util_files = files(
|
||||
'keymanutil.c',
|
||||
'keymanutil.h',
|
||||
'kmpdetails.c',
|
||||
'kmpdetails.h',
|
||||
)
|
||||
|
||||
engine_files = files(
|
||||
'main.c',
|
||||
'engine.c',
|
||||
'engine.h',
|
||||
'keycodes.h',
|
||||
'keyman-service.c',
|
||||
'keyman-service.h',
|
||||
)
|
||||
|
||||
include_dirs = [
|
||||
core_include_dirs,
|
||||
include_directories('..'),
|
||||
include_directories(meson.current_build_dir() / '..'),
|
||||
]
|
||||
|
||||
deps = [ibus, gtk, x11, json_glib, kmnkbp_lib]
|
||||
|
||||
prefix = get_option('prefix')
|
||||
cfg = configuration_data()
|
||||
cfg.set('VERSION', meson.project_version())
|
||||
cfg.set('libexecdir', prefix / get_option('libexecdir'))
|
||||
|
||||
configure_file(
|
||||
configuration: cfg,
|
||||
input: 'keyman.xml.in',
|
||||
output: 'keyman.xml'
|
||||
)
|
||||
|
||||
configure_file(
|
||||
configuration: cfg,
|
||||
input: 'keyman-version.h.in',
|
||||
output: 'keyman-version.h'
|
||||
)
|
||||
|
||||
exe = executable(
|
||||
'ibus-engine-keyman',
|
||||
sources: [engine_files, util_files],
|
||||
dependencies: deps,
|
||||
include_directories: include_dirs,
|
||||
)
|
||||
|
||||
subdir('test')
|
||||
62
linux/ibus-keyman/src/test/meson.build
Normal file
62
linux/ibus-keyman/src/test/meson.build
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
keymanutil_sources = [
|
||||
'keymanutil_tests.c',
|
||||
util_files,
|
||||
]
|
||||
|
||||
keymanutil_deps = [ibus, gtk, x11, json_glib, kmnkbp_lib]
|
||||
|
||||
test_env = [
|
||||
'G_TEST_SRCDIR=' + meson.current_source_dir(),
|
||||
'G_TEST_BUILDDIR=' + meson.current_build_dir(),
|
||||
]
|
||||
|
||||
test_include_dirs = [
|
||||
include_dirs,
|
||||
include_directories('..'),
|
||||
include_directories(meson.current_build_dir() / '..'),
|
||||
]
|
||||
|
||||
executable(
|
||||
'keymanutil-tests',
|
||||
sources: keymanutil_sources,
|
||||
dependencies: keymanutil_deps,
|
||||
include_directories : test_include_dirs
|
||||
)
|
||||
|
||||
test(
|
||||
'keymanutil-tests',
|
||||
find_program('run-tests.sh'),
|
||||
env: test_env,
|
||||
protocol: 'tap',
|
||||
)
|
||||
|
||||
test(
|
||||
'print-kmpdetails-test',
|
||||
executable(
|
||||
'print_kmpdetails',
|
||||
sources: [
|
||||
'print_kmpdetails.c',
|
||||
'../kmpdetails.c'
|
||||
],
|
||||
dependencies: [ json_glib ],
|
||||
include_directories: test_include_dirs
|
||||
),
|
||||
args: [ meson.current_source_dir() ],
|
||||
env: test_env,
|
||||
protocol: 'exitcode',
|
||||
)
|
||||
|
||||
test(
|
||||
'print-kmp-test',
|
||||
executable(
|
||||
'print_kmp',
|
||||
sources: [
|
||||
'print_kmp.c',
|
||||
],
|
||||
dependencies: [ json_glib ],
|
||||
include_directories: test_include_dirs
|
||||
),
|
||||
args: [ meson.current_source_dir() / 'kmp.json' ],
|
||||
env: test_env,
|
||||
protocol: 'exitcode',
|
||||
)
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
SRCDIR=${top_srcdir:-$(realpath $(dirname $0)/../..)}
|
||||
SRCDIR=${top_srcdir:-$(realpath "$(dirname $0)/../..")}
|
||||
PID_FILE=/tmp/keymanutil-tests-pids
|
||||
|
||||
if [ -v KEYMAN_PKG_BUILD ]; then
|
||||
|
|
@ -12,19 +12,20 @@ if [ -v KEYMAN_PKG_BUILD ]; then
|
|||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
if ! which Xvfb > /dev/null || ! which Xephyr > /dev/null || ! which metacity > /dev/null; then
|
||||
echo "Please install Xvfb, Xephyr and metacity before running these tests!"
|
||||
echo "# Please install Xvfb, Xephyr and metacity before running these tests!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
function cleanup() {
|
||||
if [ -f $PID_FILE ]; then
|
||||
echo
|
||||
echo "Shutting down processes..."
|
||||
echo "# Shutting down processes..."
|
||||
bash $PID_FILE > /dev/null 2>&1
|
||||
rm $PID_FILE
|
||||
rm -rf $TEMP_DATA_DIR
|
||||
echo "Finished shutdown of processes."
|
||||
rm -rf "$TEMP_DATA_DIR"
|
||||
echo "# Finished shutdown of processes."
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
@ -32,15 +33,15 @@ echo > $PID_FILE
|
|||
|
||||
trap cleanup EXIT SIGINT
|
||||
|
||||
echo "Starting Xvfb..."
|
||||
echo "# Starting Xvfb..."
|
||||
Xvfb -screen 0 1024x768x24 :33 &> /dev/null &
|
||||
echo "kill -9 $!" >> $PID_FILE
|
||||
sleep 1
|
||||
echo "Starting Xephyr..."
|
||||
echo "# Starting Xephyr..."
|
||||
DISPLAY=:33 Xephyr :32 -screen 1024x768 &> /dev/null &
|
||||
echo "kill -9 $!" >> $PID_FILE
|
||||
sleep 1
|
||||
echo "Starting metacity"
|
||||
echo "# Starting metacity"
|
||||
metacity --display=:32 &> /dev/null &
|
||||
echo "kill -9 $!" >> $PID_FILE
|
||||
|
||||
|
|
@ -51,10 +52,10 @@ TEMP_DATA_DIR=$(mktemp --directory)
|
|||
SCHEMA_DIR=$TEMP_DATA_DIR/glib-2.0/schemas
|
||||
export XDG_DATA_DIRS=$TEMP_DATA_DIR:$XDG_DATA_DIRS
|
||||
|
||||
mkdir -p $SCHEMA_DIR
|
||||
cp $SRCDIR/../keyman-config/com.keyman.gschema.xml $SCHEMA_DIR/
|
||||
glib-compile-schemas $SCHEMA_DIR
|
||||
mkdir -p "$SCHEMA_DIR"
|
||||
cp "$SRCDIR/../keyman-config/com.keyman.gschema.xml" "$SCHEMA_DIR/"
|
||||
glib-compile-schemas "$SCHEMA_DIR"
|
||||
|
||||
export GSETTINGS_BACKEND=memory
|
||||
|
||||
./keymanutil-tests $@
|
||||
${G_TEST_BUILDDIR:-.}/keymanutil-tests "$@"
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ The tests get run as part of building `ibus-keyman`, more specifically when runn
|
|||
All tests can be run with the test script:
|
||||
|
||||
```bash
|
||||
./run-tests.sh
|
||||
scripts/run-tests.sh
|
||||
```
|
||||
|
||||
### Run specific tests
|
||||
|
|
@ -22,5 +22,5 @@ To run a single test you pass the testname (as found in
|
|||
`core/build/arch/*/tests/unit/kmx`). Multiple tests should be separated by space.
|
||||
|
||||
```bash
|
||||
./run-tests.sh -- k_000___null_keyboard k_005___nul_with_initial_context
|
||||
scripts/run-tests.sh -- k_000___null_keyboard k_005___nul_with_initial_context
|
||||
```
|
||||
|
|
|
|||
|
|
@ -28,9 +28,7 @@
|
|||
// simplyfying the code a bit by replacing async calls with direct synchronous
|
||||
// method calls.
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#ifndef IBUS_HAS_PREFILTER
|
||||
#warning Compiling against ibus version that does not include prefilter mask patch (https://github.com/ibus/ibus/pull/2440). Output ordering guarantees will be disabled.
|
||||
|
|
|
|||
142
linux/ibus-keyman/tests/meson.build
Normal file
142
linux/ibus-keyman/tests/meson.build
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
test_files = [
|
||||
'ibusimcontext.c',
|
||||
'ibusimcontext.h',
|
||||
'testfixture.cpp',
|
||||
'testmodule.c',
|
||||
'testmodule.h',
|
||||
]
|
||||
|
||||
kmx_dir = [
|
||||
core_dir / 'build/arch' / get_option('buildtype') / 'tests/unit/kmx'
|
||||
]
|
||||
|
||||
kmnkbp_tests_lib = cc.find_library(
|
||||
'libkmnkbp-tests',
|
||||
dirs: kmx_dir
|
||||
)
|
||||
|
||||
deps = [ibus, gtk, x11, json_glib, kmnkbp_lib, kmnkbp_tests_lib]
|
||||
|
||||
test_env = [
|
||||
'G_TEST_SRCDIR=' + meson.current_source_dir(),
|
||||
'G_TEST_BUILDDIR=' + meson.current_build_dir(),
|
||||
]
|
||||
|
||||
test_include_dirs = [
|
||||
core_include_dirs,
|
||||
include_directories('../../../core/tests/unit/kmx'),
|
||||
include_directories('../src'),
|
||||
include_directories('..'),
|
||||
]
|
||||
|
||||
test_exe = executable(
|
||||
'ibus-keyman-tests',
|
||||
test_files, util_files,
|
||||
dependencies: deps,
|
||||
include_directories: test_include_dirs,
|
||||
)
|
||||
|
||||
env_file = '/tmp/env.txt'
|
||||
pid_file = '/tmp/ibus-keyman-test-pids'
|
||||
|
||||
setup_tests = find_program('setup-tests.sh', dirs: [meson.current_source_dir() / 'scripts'])
|
||||
teardown_tests = find_program('teardown-tests.sh', dirs: [meson.current_source_dir() / 'scripts'])
|
||||
run_test = find_program('run-single-test.sh', dirs: [meson.current_source_dir() / 'scripts'])
|
||||
find_tests = find_program('find-tests.sh', dirs: [meson.current_source_dir() / 'scripts'])
|
||||
|
||||
test(
|
||||
'setup-x11',
|
||||
setup_tests,
|
||||
args: ['--x11', env_file, pid_file],
|
||||
env: test_env,
|
||||
priority: -10,
|
||||
is_parallel: false,
|
||||
protocol: 'exitcode'
|
||||
)
|
||||
|
||||
test(
|
||||
'setup-wayland',
|
||||
setup_tests,
|
||||
args: ['--wayland', env_file, pid_file],
|
||||
env: test_env,
|
||||
priority: -20,
|
||||
is_parallel: false,
|
||||
protocol: 'exitcode'
|
||||
)
|
||||
|
||||
test(
|
||||
'teardown-x11',
|
||||
teardown_tests,
|
||||
args: [pid_file],
|
||||
priority: -19,
|
||||
is_parallel: false,
|
||||
protocol: 'exitcode'
|
||||
)
|
||||
|
||||
test(
|
||||
'teardown-wayland',
|
||||
teardown_tests,
|
||||
args: [pid_file],
|
||||
priority: -29,
|
||||
is_parallel: false,
|
||||
protocol: 'exitcode'
|
||||
)
|
||||
|
||||
kmxtest_files = run_command(
|
||||
find_tests,
|
||||
kmx_dir,
|
||||
check: true,
|
||||
).stdout().split('\n')
|
||||
|
||||
foreach kmx: kmxtest_files
|
||||
filename = kmx.split('\t')
|
||||
if filename[0] == ''
|
||||
continue
|
||||
endif
|
||||
testname = filename[1].split('.kmx')[0]
|
||||
test_args = [ '--tap', '-k', '--env', env_file, '--', filename]
|
||||
test(
|
||||
'X11-' + testname + '__surrounding-text',
|
||||
run_test,
|
||||
args: [ '--x11', '--surrounding-text', test_args],
|
||||
env: test_env,
|
||||
depends: [test_exe],
|
||||
priority: -11,
|
||||
is_parallel: false,
|
||||
timeout: 120,
|
||||
protocol: 'tap',
|
||||
)
|
||||
test(
|
||||
'X11-' + testname + '__no-surrounding-text',
|
||||
run_test,
|
||||
args: [ '--x11', '--no-surrounding-text', test_args],
|
||||
env: test_env,
|
||||
depends: [test_exe],
|
||||
priority: -12,
|
||||
is_parallel: false,
|
||||
timeout: 120,
|
||||
protocol: 'tap',
|
||||
)
|
||||
test(
|
||||
'Wayland-' + testname + '__surrounding-text',
|
||||
run_test,
|
||||
args: [ '--wayland', '--surrounding-text', test_args],
|
||||
env: test_env,
|
||||
depends: [test_exe],
|
||||
priority: -21,
|
||||
is_parallel: false,
|
||||
timeout: 120,
|
||||
protocol: 'tap',
|
||||
)
|
||||
test(
|
||||
'Wayland-' + testname + '__no-surrounding-text',
|
||||
run_test,
|
||||
args: [ '--wayland', '--no-surrounding-text', test_args],
|
||||
env: test_env,
|
||||
depends: [test_exe],
|
||||
priority: -22,
|
||||
is_parallel: false,
|
||||
timeout: 120,
|
||||
protocol: 'tap',
|
||||
)
|
||||
endforeach
|
||||
16
linux/ibus-keyman/tests/scripts/find-tests.sh
Executable file
16
linux/ibus-keyman/tests/scripts/find-tests.sh
Executable file
|
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env bash
|
||||
set -eu
|
||||
while [ -n "$1" ]; do
|
||||
if [ ! -d "$1" ]; then
|
||||
shift
|
||||
continue
|
||||
fi
|
||||
pushd "$1" > /dev/null
|
||||
while IFS= read -r -d '' file; do
|
||||
testname=$(basename "$file" .kmx)
|
||||
#shellcheck disable=SC2059
|
||||
printf "$(basename "$file")\t${testname#k_}\n"
|
||||
done < <(find . -name \*.kmx -print0 | sort -z)
|
||||
popd > /dev/null
|
||||
exit 0
|
||||
done
|
||||
73
linux/ibus-keyman/tests/scripts/run-single-test.sh
Executable file
73
linux/ibus-keyman/tests/scripts/run-single-test.sh
Executable file
|
|
@ -0,0 +1,73 @@
|
|||
#!/usr/bin/env bash
|
||||
TESTDIR=${XDG_DATA_HOME:-$HOME/.local/share}/keyman/test_kmx
|
||||
|
||||
. "$(dirname "$0")"/test-helper.sh
|
||||
|
||||
if [ -v KEYMAN_PKG_BUILD ]; then
|
||||
# During package builds we skip these tests that require to start ibus because
|
||||
# ibus requires to find /var/lib/dbus/machine-id or /etc/machine-id, otherwise it fails with:
|
||||
# "Bail out! IBUS-FATAL-WARNING: Unable to load /var/lib/dbus/machine-id: Failed to open file
|
||||
# “/var/lib/dbus/machine-id”: No such file or directory"
|
||||
echo "1..1"
|
||||
echo "ok 1 - Integration tests # SKIP on package build"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if ! which Xvfb > /dev/null || ! which Xephyr > /dev/null || ! which metacity > /dev/null || ! which mutter > /dev/null; then
|
||||
echo "Please install Xvfb, Xephyr, metacity and mutter before running these tests!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
function help() {
|
||||
echo "Usage:"
|
||||
echo " $0 [--env <envfile>] [-k] [--tap] [--surrounding-text] [--no-surrounding-text] [--wayland|--x11] [--] TEST"
|
||||
echo
|
||||
echo "Arguments:"
|
||||
echo " --help, -h, -? Display this help"
|
||||
echo " --verbose, -v Run tests verbosely"
|
||||
echo " --debug debug test logging output"
|
||||
echo " -k passed to GLib testing framework"
|
||||
echo " --tap output in TAP format. Passed to GLib testing framework"
|
||||
echo " --surrounding-text run tests with surrounding texts enabled"
|
||||
echo " --no-surrounding-text run tests without support for surrounding text"
|
||||
echo " --wayland run tests with Wayland"
|
||||
echo " --x11 run tests with X11"
|
||||
echo " --env <envfile> Name of the file containing environment variables to use"
|
||||
exit 0
|
||||
}
|
||||
|
||||
function run_tests() {
|
||||
echo "# NOTE: When the tests fail check /tmp/ibus-engine-keyman.log and /tmp/ibus-daemon.log!"
|
||||
echo ""
|
||||
|
||||
echo "# Starting tests..."
|
||||
# Note: -k and --tap are consumed by the GLib testing framework
|
||||
# shellcheck disable=SC2086
|
||||
"${G_TEST_BUILDDIR:-.}"/ibus-keyman-tests ${ARG_K-} ${ARG_TAP-} \
|
||||
${ARG_VERBOSE-} ${ARG_DEBUG-} ${ARG_SURROUNDING_TEXT-} ${ARG_NO_SURROUNDING_TEXT-} \
|
||||
--directory "$TESTDIR" ${ARG_DISPLAY_SERVER} "$TESTFILE"
|
||||
echo "# Finished tests."
|
||||
}
|
||||
|
||||
while (( $# )); do
|
||||
case $1 in
|
||||
--help|-h|-\?) help ;;
|
||||
-k) ARG_K=$1 ;;
|
||||
--tap) ARG_TAP=$1 ;;
|
||||
--surrounding-text) ARG_SURROUNDING_TEXT=$1 ;;
|
||||
--no-surrounding-text) ARG_NO_SURROUNDING_TEXT=$1 ;;
|
||||
--wayland) ARG_DISPLAY_SERVER=$1 ;;
|
||||
--x11) ARG_DISPLAY_SERVER=$1 ;;
|
||||
--verbose|-v) ARG_VERBOSE=--verbose;;
|
||||
--debug) ARG_DEBUG=--debug-log;;
|
||||
--env) shift ; ARG_ENV=$1 ;;
|
||||
--) shift ; TESTFILE=$1; break ;;
|
||||
*) echo "Error: Unexpected argument \"$1\". Exiting." ; exit 4 ;;
|
||||
esac
|
||||
shift || (echo "Error: The last argument is missing a value. Exiting."; false) || exit 5
|
||||
done
|
||||
|
||||
# shellcheck source=/dev/null
|
||||
. "$ARG_ENV"
|
||||
|
||||
run_tests
|
||||
206
linux/ibus-keyman/tests/scripts/run-tests.sh
Executable file
206
linux/ibus-keyman/tests/scripts/run-tests.sh
Executable file
|
|
@ -0,0 +1,206 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
TOP_SRCDIR=${top_srcdir:-$(realpath "$(dirname "$0")/..")}
|
||||
TESTDIR=${XDG_DATA_HOME:-$HOME/.local/share}/keyman/test_kmx
|
||||
|
||||
. "$(dirname "$0")"/test-helper.sh
|
||||
|
||||
if [ -v KEYMAN_PKG_BUILD ]; then
|
||||
# During package builds we skip these tests that require to start ibus because
|
||||
# ibus requires to find /var/lib/dbus/machine-id or /etc/machine-id, otherwise it fails with:
|
||||
# "Bail out! IBUS-FATAL-WARNING: Unable to load /var/lib/dbus/machine-id: Failed to open file
|
||||
# “/var/lib/dbus/machine-id”: No such file or directory"
|
||||
echo "1..1"
|
||||
echo "ok 1 - Integration tests # SKIP on package build"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if ! which Xvfb > /dev/null || ! which Xephyr > /dev/null || ! which metacity > /dev/null || ! which mutter > /dev/null; then
|
||||
echo "Please install Xvfb, Xephyr, metacity and mutter before running these tests!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
function cleanup() {
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
echo
|
||||
echo "# Shutting down processes..."
|
||||
bash "$PID_FILE" > /dev/null 2>&1
|
||||
rm "$PID_FILE"
|
||||
echo "# Finished shutdown of processes."
|
||||
fi
|
||||
}
|
||||
|
||||
function help() {
|
||||
echo "Usage:"
|
||||
echo " $0 [-k] [--tap] [--surrounding-text] [--no-surrounding-text] [--no-wayland] [--no-x11] [[--] TEST...]"
|
||||
echo
|
||||
echo "Arguments:"
|
||||
echo " --help, -h, -? Display this help"
|
||||
echo " --verbose, -v Run tests verbosely"
|
||||
echo " --debug debug test logging output"
|
||||
echo " -k passed to GLib testing framework"
|
||||
echo " --tap output in TAP format. Passed to GLib testing framework"
|
||||
echo " --surrounding-text run tests with surrounding texts enabled"
|
||||
echo " --no-surrounding-text run tests without support for surrounding text"
|
||||
echo " --no-wayland don't run tests with Wayland"
|
||||
echo " --no-x11 don't run tests with X11"
|
||||
echo
|
||||
echo "If no TESTs are specified then all tests are run."
|
||||
echo "If neither --surrounding-text nor --no-surrounding-text are specified then the tests run with both settings."
|
||||
exit 0
|
||||
}
|
||||
|
||||
function run_tests() {
|
||||
DISPLAY_SERVER=$1
|
||||
shift
|
||||
|
||||
echo > "$PID_FILE"
|
||||
TEMP_DATA_DIR=$(mktemp --directory)
|
||||
echo "rm -rf ${TEMP_DATA_DIR}" >> "$PID_FILE"
|
||||
|
||||
COMMON_ARCH_DIR=
|
||||
[ -d "${TOP_SRCDIR}"/../../core/build/arch ] && COMMON_ARCH_DIR=${TOP_SRCDIR}/../../core/build/arch
|
||||
[ -d "${TOP_SRCDIR}"/../keyboardprocessor/arch ] && COMMON_ARCH_DIR=${TOP_SRCDIR}/../keyboardprocessor/arch
|
||||
|
||||
if [ -d "${COMMON_ARCH_DIR}"/release ]; then
|
||||
COMMON_ARCH_DIR=${COMMON_ARCH_DIR}/release
|
||||
elif [ -d "${COMMON_ARCH_DIR}"/debug ]; then
|
||||
COMMON_ARCH_DIR=${COMMON_ARCH_DIR}/debug
|
||||
else
|
||||
echo "Can't find neither ${COMMON_ARCH_DIR}/release nor ${COMMON_ARCH_DIR}/debug"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ ! -d "$TESTDIR" ] || ! [[ $(find "${TESTDIR}/" -name \*.kmx 2>/dev/null | wc -l) -gt 0 ]]; then
|
||||
if [[ $(find "${COMMON_ARCH_DIR}/tests/unit/kmx/" -name \*.kmx 2>/dev/null | wc -l) -gt 0 ]]; then
|
||||
mkdir -p "$(realpath --canonicalize-missing "$TESTDIR"/..)"
|
||||
ln -sf "$(realpath "${COMMON_ARCH_DIR}"/tests/unit/kmx)" "$TESTDIR"
|
||||
else
|
||||
echo "Can't find kmx files in ${COMMON_ARCH_DIR}/tests/unit/kmx"
|
||||
exit 3
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "# NOTE: When the tests fail check /tmp/ibus-engine-keyman.log and /tmp/ibus-daemon.log!"
|
||||
echo ""
|
||||
|
||||
if [ "$DISPLAY_SERVER" == "wayland" ]; then
|
||||
if ! can_run_wayland; then
|
||||
# support for --headless got added in mutter 40.x
|
||||
echo "ERROR: mutter doesn't support running headless. Can't run Wayland tests."
|
||||
exit 7
|
||||
fi
|
||||
echo "# Running on Wayland..."
|
||||
TMPFILE=$(mktemp)
|
||||
# mutter-Message: 18:56:15.422: Using Wayland display name 'wayland-1'
|
||||
mutter --wayland --headless --no-x11 --virtual-monitor 1024x768 &> "$TMPFILE" &
|
||||
echo "kill -9 $!" >> "$PID_FILE"
|
||||
sleep 1s
|
||||
export WAYLAND_DISPLAY
|
||||
WAYLAND_DISPLAY=$(cat "$TMPFILE" | grep "Using Wayland display" | cut -d"'" -f2)
|
||||
rm "$TMPFILE"
|
||||
else
|
||||
echo "# Starting Xvfb..."
|
||||
Xvfb -screen 0 1024x768x24 :33 &> /dev/null &
|
||||
echo "kill -9 $!" >> "$PID_FILE"
|
||||
sleep 1
|
||||
echo "# Starting Xephyr..."
|
||||
DISPLAY=:33 Xephyr :32 -screen 1024x768 &> /dev/null &
|
||||
echo "kill -9 $!" >> "$PID_FILE"
|
||||
sleep 1
|
||||
echo "# Starting metacity"
|
||||
metacity --display=:32 &> /dev/null &
|
||||
echo "kill -9 $!" >> "$PID_FILE"
|
||||
|
||||
export DISPLAY=:32
|
||||
fi
|
||||
|
||||
# Install schema to temporary directory. This removes the build dependency on the keyman package.
|
||||
SCHEMA_DIR=$TEMP_DATA_DIR/glib-2.0/schemas
|
||||
export XDG_DATA_DIRS=$TEMP_DATA_DIR:$XDG_DATA_DIRS
|
||||
|
||||
mkdir -p "$SCHEMA_DIR"
|
||||
cp "${TOP_SRCDIR}"/../keyman-config/com.keyman.gschema.xml "$SCHEMA_DIR"/
|
||||
glib-compile-schemas "$SCHEMA_DIR"
|
||||
|
||||
if [ $# -gt 0 ]; then
|
||||
TESTFILES=($@)
|
||||
else
|
||||
pushd "$TESTDIR" > /dev/null || exit
|
||||
TESTFILES=(*.kmx)
|
||||
popd > /dev/null || exit
|
||||
fi
|
||||
|
||||
export LD_LIBRARY_PATH=${COMMON_ARCH_DIR}/src:$LD_LIBRARY_PATH
|
||||
|
||||
# Ubuntu 18.04 Bionic doesn't have ibus-memconf, and glib is not compiled with the keyfile
|
||||
# backend enabled, so we just use the default backend. Otherwise we use the keyfile
|
||||
# store which interferes less when running on a dev machine.
|
||||
if [ -f /usr/libexec/ibus-memconf ]; then
|
||||
export GSETTINGS_BACKEND=keyfile
|
||||
IBUS_CONFIG=--config=/usr/libexec/ibus-memconf
|
||||
fi
|
||||
|
||||
ibus-daemon "${ARG_VERBOSE-}" --panel=disable ${IBUS_CONFIG-} &> /tmp/ibus-daemon.log &
|
||||
echo "kill -9 $!" >> "$PID_FILE"
|
||||
sleep 1s
|
||||
|
||||
../src/ibus-engine-keyman "${ARG_VERBOSE-}" &> /tmp/ibus-engine-keyman.log &
|
||||
echo "kill -9 $!" >> "$PID_FILE"
|
||||
sleep 1s
|
||||
|
||||
echo "# Starting tests..."
|
||||
# Note: -k and --tap are consumed by the GLib testing framework
|
||||
"${G_TEST_BUILDDIR:-.}"/ibus-keyman-tests "${ARG_K-}" "${ARG_TAP-}" \
|
||||
"${ARG_VERBOSE-}" "${ARG_DEBUG-}" "${ARG_SURROUNDING_TEXT-}" "${ARG_NO_SURROUNDING_TEXT-}" \
|
||||
--directory "$TESTDIR" --"${DISPLAY_SERVER}" "${TESTFILES[@]}"
|
||||
echo "# Finished tests."
|
||||
|
||||
cleanup
|
||||
}
|
||||
|
||||
USE_WAYLAND=1
|
||||
USE_X11=1
|
||||
|
||||
while (( $# )); do
|
||||
case $1 in
|
||||
--help|-h|-\?) help ;;
|
||||
-k) ARG_K=$1 ;;
|
||||
--tap) ARG_TAP=$1 ;;
|
||||
--surrounding-text) ARG_SURROUNDING_TEXT=$1 ;;
|
||||
--no-surrounding-text) ARG_NO_SURROUNDING_TEXT=$1 ;;
|
||||
--no-wayland) USE_WAYLAND=0;;
|
||||
--no-x11) USE_X11=0;;
|
||||
--verbose|-v) ARG_VERBOSE=--verbose;;
|
||||
--debug) ARG_DEBUG=--debug-log;;
|
||||
--) shift && break ;;
|
||||
*) echo "Error: Unexpected argument \"$1\". Exiting." ; exit 4 ;;
|
||||
esac
|
||||
shift || (echo "Error: The last argument is missing a value. Exiting."; false) || exit 5
|
||||
done
|
||||
|
||||
if ! can_run_wayland; then
|
||||
# support for --headless got added in mutter 40.x
|
||||
echo "# WARNING: mutter doesn't support running headless. Skipping Wayland tests."
|
||||
USE_WAYLAND=0
|
||||
if [ "$USE_X11" == "0" ]; then
|
||||
echo "ERROR: no tests to run. Can't run Wayland tests, and --no-x11 is specified."
|
||||
exit 8
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$USE_WAYLAND" == "0" ] && [ "$USE_X11" == "0" ]; then
|
||||
echo "ERROR: I'll have to run somewhere. Specifying both --no-wayland and --no-x11 is not allowed."
|
||||
exit 6
|
||||
fi
|
||||
|
||||
echo > "$PID_FILE"
|
||||
trap cleanup EXIT SIGINT
|
||||
|
||||
if [ "$USE_WAYLAND" == "1" ]; then
|
||||
run_tests wayland "$@"
|
||||
fi
|
||||
|
||||
if [ "$USE_X11" == "1" ]; then
|
||||
run_tests x11 "$@"
|
||||
fi
|
||||
111
linux/ibus-keyman/tests/scripts/setup-tests.sh
Executable file
111
linux/ibus-keyman/tests/scripts/setup-tests.sh
Executable file
|
|
@ -0,0 +1,111 @@
|
|||
#!/usr/bin/env bash
|
||||
DISPLAY_SERVER=$1
|
||||
ENV_FILE=$2
|
||||
PID_FILE=$3
|
||||
|
||||
TOP_SRCDIR=${G_TEST_SRCDIR:-$(realpath "$(dirname "$0")/..")}/..
|
||||
TOP_BINDIR=${G_TEST_BUILDDIR:-$(realpath "$(dirname "$0/..")")}/..
|
||||
TESTDIR=${XDG_DATA_HOME:-$HOME/.local/share}/keyman/test_kmx
|
||||
|
||||
. "$(dirname "$0")/"/test-helper.sh
|
||||
|
||||
echo > "$ENV_FILE"
|
||||
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
# kill previous instances
|
||||
"$(dirname "$0")"/teardown-tests.sh "$PID_FILE"
|
||||
fi
|
||||
|
||||
echo > "$PID_FILE"
|
||||
TEMP_DATA_DIR=$(mktemp --directory)
|
||||
echo "rm -rf ${TEMP_DATA_DIR}" >> "$PID_FILE"
|
||||
|
||||
COMMON_ARCH_DIR=
|
||||
[ -d "${TOP_SRCDIR}"/../../core/build/arch ] && COMMON_ARCH_DIR=${TOP_SRCDIR}/../../core/build/arch
|
||||
[ -d "${TOP_SRCDIR}"/../keyboardprocessor/arch ] && COMMON_ARCH_DIR=${TOP_SRCDIR}/../keyboardprocessor/arch
|
||||
|
||||
if [ -d "${COMMON_ARCH_DIR}"/release ]; then
|
||||
COMMON_ARCH_DIR=${COMMON_ARCH_DIR}/release
|
||||
elif [ -d "${COMMON_ARCH_DIR}"/debug ]; then
|
||||
COMMON_ARCH_DIR=${COMMON_ARCH_DIR}/debug
|
||||
else
|
||||
echo "Can't find neither ${COMMON_ARCH_DIR}/release nor ${COMMON_ARCH_DIR}/debug"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ ! -d "$TESTDIR" ] || ! [[ $(find "${TESTDIR}/" -name \*.kmx 2>/dev/null | wc -l) -gt 0 ]]; then
|
||||
if [[ $(find "${COMMON_ARCH_DIR}/tests/unit/kmx/" -name \*.kmx 2>/dev/null | wc -l) -gt 0 ]]; then
|
||||
mkdir -p "$(realpath --canonicalize-missing "$TESTDIR"/..)"
|
||||
ln -sf "$(realpath "${COMMON_ARCH_DIR}"/tests/unit/kmx)" "$TESTDIR"
|
||||
else
|
||||
echo "Can't find kmx files in ${COMMON_ARCH_DIR}/tests/unit/kmx"
|
||||
exit 3
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$DISPLAY_SERVER" == "wayland" ]; then
|
||||
if ! can_run_wayland; then
|
||||
# support for --headless got added in mutter 40.x
|
||||
echo "ERROR: mutter doesn't support running headless. Can't run Wayland tests."
|
||||
exit 7
|
||||
fi
|
||||
echo "Running on Wayland..."
|
||||
TMPFILE=$(mktemp)
|
||||
# mutter-Message: 18:56:15.422: Using Wayland display name 'wayland-1'
|
||||
mutter --wayland --headless --no-x11 --virtual-monitor 1024x768 &> "$TMPFILE" &
|
||||
echo "kill -9 $!" >> "$PID_FILE"
|
||||
sleep 1s
|
||||
export WAYLAND_DISPLAY
|
||||
WAYLAND_DISPLAY=$(grep "Using Wayland display" "$TMPFILE" | cut -d"'" -f2)
|
||||
rm "$TMPFILE"
|
||||
echo "export WAYLAND_DISPLAY=\"$WAYLAND_DISPLAY\"" >> "$ENV_FILE"
|
||||
else
|
||||
echo "Starting Xvfb..."
|
||||
Xvfb -screen 0 1024x768x24 :33 &> /dev/null &
|
||||
echo "kill -9 $!" >> "$PID_FILE"
|
||||
sleep 1
|
||||
echo "Starting Xephyr..."
|
||||
DISPLAY=:33 Xephyr :32 -screen 1024x768 &> /dev/null &
|
||||
echo "kill -9 $!" >> "$PID_FILE"
|
||||
sleep 1
|
||||
echo "Starting metacity"
|
||||
metacity --display=:32 &> /dev/null &
|
||||
echo "kill -9 $!" >> "$PID_FILE"
|
||||
|
||||
export DISPLAY=:32
|
||||
echo "export DISPLAY=\"$DISPLAY\"" >> "$ENV_FILE"
|
||||
fi
|
||||
|
||||
# Install schema to temporary directory. This removes the build dependency on the keyman package.
|
||||
SCHEMA_DIR=$TEMP_DATA_DIR/glib-2.0/schemas
|
||||
export XDG_DATA_DIRS=$TEMP_DATA_DIR:$XDG_DATA_DIRS
|
||||
echo "export XDG_DATA_DIRS=\"$XDG_DATA_DIRS\"" >> "$ENV_FILE"
|
||||
|
||||
mkdir -p "$SCHEMA_DIR"
|
||||
cp "${TOP_SRCDIR}"/../keyman-config/com.keyman.gschema.xml "$SCHEMA_DIR"/
|
||||
glib-compile-schemas "$SCHEMA_DIR"
|
||||
|
||||
export LD_LIBRARY_PATH=${COMMON_ARCH_DIR}/src:$LD_LIBRARY_PATH
|
||||
echo "export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"" >> "$ENV_FILE"
|
||||
|
||||
# Ubuntu 18.04 Bionic doesn't have ibus-memconf, and glib is not compiled with the keyfile
|
||||
# backend enabled, so we just use the default backend. Otherwise we use the keyfile
|
||||
# store which interferes less when running on a dev machine.
|
||||
if [ -f /usr/libexec/ibus-memconf ]; then
|
||||
export GSETTINGS_BACKEND=keyfile
|
||||
echo "export GSETTINGS_BACKEND=\"$GSETTINGS_BACKEND\"" >> "$ENV_FILE"
|
||||
IBUS_CONFIG=--config=/usr/libexec/ibus-memconf
|
||||
fi
|
||||
|
||||
ibus-daemon "${ARG_VERBOSE-}" --daemonize --panel=disable ${IBUS_CONFIG-} &> /tmp/ibus-daemon.log
|
||||
echo "kill -9 $!" >> "$PID_FILE"
|
||||
sleep 1s
|
||||
|
||||
IBUS_ADDRESS=$(ibus address)
|
||||
export IBUS_ADDRESS
|
||||
|
||||
echo "export IBUS_ADDRESS=\"$IBUS_ADDRESS\"" >> "$ENV_FILE"
|
||||
|
||||
"${TOP_BINDIR}"/src/ibus-engine-keyman "${ARG_VERBOSE-}" &> /tmp/ibus-engine-keyman.log &
|
||||
echo "kill -9 $!" >> "$PID_FILE"
|
||||
sleep 1s
|
||||
7
linux/ibus-keyman/tests/scripts/teardown-tests.sh
Executable file
7
linux/ibus-keyman/tests/scripts/teardown-tests.sh
Executable file
|
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
PID_FILE=$1
|
||||
|
||||
echo "Shutting down processes..."
|
||||
bash "$PID_FILE" > /dev/null 2>&1
|
||||
rm "$PID_FILE"
|
||||
echo "Finished shutdown of processes."
|
||||
11
linux/ibus-keyman/tests/scripts/test-helper.sh
Executable file
11
linux/ibus-keyman/tests/scripts/test-helper.sh
Executable file
|
|
@ -0,0 +1,11 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
function can_run_wayland() {
|
||||
local MUTTER_VERSION
|
||||
MUTTER_VERSION=$(mutter --version | head -1 | cut -f2 -d' ' | cut -f1 -d'.')
|
||||
if (( MUTTER_VERSION < 40 )); then
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@ msgstr ""
|
|||
"Project-Id-Version: keyman\n"
|
||||
"Report-Msgid-Bugs-To: <support@keyman.com>\n"
|
||||
"POT-Creation-Date: 2020-08-19 19:17+0200\n"
|
||||
"PO-Revision-Date: 2023-01-03 04:05\n"
|
||||
"PO-Revision-Date: 2023-02-07 14:38\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Kannada\n"
|
||||
"Language: kn_IN\n"
|
||||
|
|
|
|||
71
linux/scripts/deb-packaging.sh
Executable file
71
linux/scripts/deb-packaging.sh
Executable file
|
|
@ -0,0 +1,71 @@
|
|||
#!/usr/bin/env bash
|
||||
# Actions for creating a Debian source package. Used by deb-packaging.yml GHA.
|
||||
|
||||
set -eu
|
||||
|
||||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "$(dirname "$THIS_SCRIPT")/../../resources/build/build-utils.sh"
|
||||
## END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
builder_describe \
|
||||
"Helper for building Debian packages." \
|
||||
"dependencies Install dependencies as found in debian/control" \
|
||||
"source+ Build source package" \
|
||||
"verify Verify API" \
|
||||
"--gha Build from GitHub Action"
|
||||
|
||||
builder_parse "$@"
|
||||
|
||||
cd "$REPO_ROOT/linux"
|
||||
|
||||
if builder_has_option --gha; then
|
||||
START_STEP="::group::${COLOR_GREEN}"
|
||||
END_STEP="::endgroup::"
|
||||
else
|
||||
START_STEP="${COLOR_GREEN}"
|
||||
END_STEP=""
|
||||
fi
|
||||
|
||||
if builder_start_action dependencies; then
|
||||
sudo mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' debian/control
|
||||
builder_finish_action success dependencies
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if builder_start_action source; then
|
||||
echo "${START_STEP}Make source package for keyman${COLOR_RESET}"
|
||||
|
||||
echo "${START_STEP}reconfigure${COLOR_RESET}"
|
||||
./scripts/reconf.sh keyman
|
||||
echo "${END_STEP}"
|
||||
|
||||
echo "${START_STEP}Make origdist${COLOR_RESET}"
|
||||
./scripts/dist.sh origdist keyman
|
||||
echo "${END_STEP}"
|
||||
|
||||
echo "${START_STEP}Make deb source${COLOR_RESET}"
|
||||
./scripts/deb.sh sourcepackage keyman
|
||||
echo "${END_STEP}"
|
||||
|
||||
mv builddebs/* "${OUTPUT_PATH:-..}"
|
||||
|
||||
builder_finish_action success source
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if builder_start_action verify; then
|
||||
tar xf "${SRC_PKG}"
|
||||
if [ ! -f debian/libkmnkbp0-0.symbols ]; then
|
||||
echo ":warning: Missing libkmnkbp0-0.symbols file"
|
||||
else
|
||||
tmpDir=$(mktemp -d)
|
||||
dpkg -x "${BIN_PKG}" "$tmpDir"
|
||||
cd debian
|
||||
dpkg-gensymbols -v"${PKG_VERSION}" -plibkmnkbp0-0 -e"${tmpDir}"/usr/lib/x86_64-linux-gnu/libkmnkbp0.so* -Olibkmnkbp0-0.symbols -c4
|
||||
echo ":heavy_check_mark: libkmnkbp0-0 API didn't change"
|
||||
fi
|
||||
builder_finish_action success verify
|
||||
exit 0
|
||||
fi
|
||||
|
|
@ -104,7 +104,7 @@ cp debianpackage/keyman-*/debian/changelog debian/
|
|||
git add debian/changelog
|
||||
git commit -m "chore(linux): Update debian changelog"
|
||||
if [ -n "$PUSH" ]; then
|
||||
$NOOP git push origin chore/linux/changelog
|
||||
$NOOP git push --force-with-lease origin chore/linux/changelog
|
||||
fi
|
||||
|
||||
if $ISBETA; then
|
||||
|
|
@ -116,7 +116,7 @@ fi
|
|||
git checkout -B chore/linux/cherry-pick/changelog ${CLBRANCH}
|
||||
git cherry-pick -x chore/linux/changelog
|
||||
if [ -n "$PUSH" ]; then
|
||||
$NOOP git push origin chore/linux/cherry-pick/changelog
|
||||
$NOOP git push --force-with-lease origin chore/linux/cherry-pick/changelog
|
||||
fi
|
||||
|
||||
echo_heading "Finishing"
|
||||
|
|
|
|||
599
package-lock.json
generated
599
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -6,8 +6,8 @@
|
|||
"esbuild": "^0.15.15",
|
||||
"mocha": "^10.0.0",
|
||||
"mocha-teamcity-reporter": "^4.0.0",
|
||||
"ts-node": "^9.1.1",
|
||||
"typescript": "^4.5.4"
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"scripts": {},
|
||||
"workspaces": [
|
||||
|
|
|
|||
|
|
@ -14,7 +14,9 @@ objectives are:
|
|||
2. to be self-documenting in usage (`--help` should always tell you all you need
|
||||
to know)
|
||||
3. for the scripts to be easily readable, coherent, and straightforward for
|
||||
anyone involved in the project to maintain.
|
||||
anyone involved in the project to maintain
|
||||
4. for dependencies to be simple (a module dependency will always be to a whole
|
||||
module, not to a specific target within that module)
|
||||
|
||||
* [Jump to API definitions](#builder-api-functions-and-variables)
|
||||
|
||||
|
|
@ -124,6 +126,14 @@ another script:
|
|||
prefixed with a `:`, for example `:app`. If no target is defined for a script,
|
||||
then the default target `:project` is used.
|
||||
|
||||
If a folder exists with the same name as a target, then that automatically
|
||||
denotes the target as a "child project". This can simplify parent-child style
|
||||
scripts, using the [`builder_run_child_actions`] function.
|
||||
|
||||
A child project with an alternate folder can also be specified by appending
|
||||
`=path` to the target definition, for example `:app=src/app`. Where possible,
|
||||
avoid differences in names of child projects and folders.
|
||||
|
||||
* **actions**: these are the various actions that a build script can take, such
|
||||
as `clean`, or `build`. If no action is passed in to on a given script
|
||||
invocation, then the default action is `build` (unless the script defines an
|
||||
|
|
@ -214,22 +224,6 @@ The following parameters are pre-defined and should not be overridden:
|
|||
|
||||
# Builder API functions and variables
|
||||
|
||||
|
||||
## `builder_check_color` function
|
||||
|
||||
If you wish to provide [formatting variables] in your [`builder_describe`] call, you
|
||||
will need to use `builder_check_color` first. This function takes the same
|
||||
parameters as [`builder_parse`].
|
||||
|
||||
### Usage
|
||||
|
||||
```bash
|
||||
builder_check_color "$@"
|
||||
builder_describe "sample" \
|
||||
"--ci For use with action ${BUILDER_TERM_START}test${BUILDER_TERM_END} - emits CI-friendly test reports"
|
||||
```
|
||||
|
||||
|
||||
## `builder_describe` function
|
||||
|
||||
Describes a build script, defines available parameters and their meanings. Use
|
||||
|
|
@ -290,10 +284,18 @@ own in the call:
|
|||
* `:module`: `"this module"`
|
||||
* `:tools`: `"build tools for this project"`
|
||||
|
||||
If a folder exists with the same name as a target, then that automatically
|
||||
denotes the target as a "child project". This can simplify parent-child style
|
||||
scripts, using the [`builder_run_child_actions`] function.
|
||||
|
||||
A child project with an alternate folder can also be specified by appending
|
||||
`=path` to the target definition, for example `:app=src/app`. Where possible,
|
||||
avoid differences in names of child projects and folders.
|
||||
|
||||
**Actions** are defined as single words, for example:
|
||||
|
||||
```bash
|
||||
builder_describe "Sample script build "install installs app on local system"
|
||||
builder_describe "Sample script" build "install installs app on local system"
|
||||
```
|
||||
|
||||
There are several predefined actions. Again, these will not be available to
|
||||
|
|
@ -338,6 +340,7 @@ this, you should use `--debug,-d` to enable the shorthand form.
|
|||
|
||||
Note that you should not include any of the [standard builder parameters] here.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## `builder_display_usage` function
|
||||
|
||||
|
|
@ -351,6 +354,7 @@ builder_describe "sample" clean build test
|
|||
builder_display_usage
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## `$builder_extra_params` variable
|
||||
|
||||
|
|
@ -370,6 +374,7 @@ array expansion format:
|
|||
npm test -- "${builder_extra_params[@]}"
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## `builder_finish_action` function
|
||||
|
||||
|
|
@ -412,6 +417,7 @@ with a non-zero exit code:
|
|||
## [common/web/keyman-version] action:target failed with message: yeah, something failed
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## `builder_has_action` function
|
||||
|
||||
|
|
@ -429,6 +435,7 @@ fi
|
|||
|
||||
See [`builder_start_action`] for more details.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## `builder_has_option` function
|
||||
|
||||
|
|
@ -464,6 +471,7 @@ if builder_has_option --path; then
|
|||
fi
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## `builder_parse` function
|
||||
|
||||
|
|
@ -483,6 +491,35 @@ Generally, you will always pass `"$@"` as the parameter for this call, to pass
|
|||
all the command line parameters from the script invocation, with automatically
|
||||
correct quoting and escaping.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## `builder_run_child_actions` function
|
||||
|
||||
Executes the specified actions on or all child targets, or on the specified
|
||||
targets. A child target is any target which has a sub-folder of the same name as
|
||||
the target. Like [`builder_start_action`], the actions will only actually be run
|
||||
if they have been specified by the user on the command-line.
|
||||
|
||||
The child script will be called with the applicable action, for all targets. No
|
||||
options apart from standard builder options are passed through.
|
||||
|
||||
### Usage
|
||||
|
||||
```bash
|
||||
builder_run_child_actions action1 [...]
|
||||
```
|
||||
|
||||
### Parameters
|
||||
|
||||
1...: action[:target] name of action:target to run
|
||||
|
||||
### Example
|
||||
|
||||
```bash
|
||||
builder_run_child_actions configure build test install
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## `builder_start_action` function
|
||||
|
||||
|
|
@ -523,6 +560,22 @@ also print a log message indicating that the action has started, for example:
|
|||
## [common/web/keyman-version] build:project starting...
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## `builder_term` function
|
||||
|
||||
Emits the parameters passed to the function, wrapped with the helper function
|
||||
`builder_term`, which wraps the passed string with `$BUILDER_TERM_START` and
|
||||
`$BUILDER_TERM_END`, e.g.: `$(builder_term text)`.
|
||||
|
||||
### Usage
|
||||
|
||||
```bash
|
||||
builder_describe "sample" \
|
||||
"--ci For use with action $(builder_term test) - emits CI-friendly test reports"
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## `builder_use_color` function
|
||||
|
||||
|
|
@ -535,6 +588,8 @@ builder_use_color true
|
|||
builder_use_color false
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## `$builder_verbose` variable
|
||||
|
||||
This standard variable will be set to `"--verbose"`, if the `--verbose` or `-v`
|
||||
|
|
@ -553,6 +608,8 @@ if builder_has_option --verbose; then
|
|||
fi
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## Formatting variables
|
||||
|
||||
These helper variables define ANSI color escapes when running in color mode, and
|
||||
|
|
@ -571,9 +628,10 @@ resolve either to empty string (for `$COLOR_*`), or equivalent plain-text forms
|
|||
* `$HEADING_SETMARK`: Add a setmark, e.g. with VSCode
|
||||
<https://code.visualstudio.com/updates/v1_69#_setmark-sequence-support>
|
||||
|
||||
Note: it is recommended that you use `$(builder_term text)` instead of
|
||||
`${BUILDER_TERM_START}text${BUILDER_TERM_END}`.
|
||||
|
||||
[standard builder parameters]: #standard-builder-parameters
|
||||
[`builder_check_color`]: #buildercheckcolor-function
|
||||
[`builder_describe`]: #builderdescribe-function
|
||||
[`builder_display_usage`]: #builderdisplayusage-function
|
||||
[`$builder_extra_params`]: #builderextraparams-variable
|
||||
|
|
@ -585,3 +643,4 @@ resolve either to empty string (for `$COLOR_*`), or equivalent plain-text forms
|
|||
[`builder_use_color`]: #builderusecolor-function
|
||||
[`$builder_verbose`]: #builderverbose-variable
|
||||
[formatting variables]: #formatting-variables
|
||||
[`builder_run_child_actions`]: #builderrunchildactions-function
|
||||
|
|
@ -143,7 +143,7 @@ if [ "$action" == "commit" ]; then
|
|||
popd > /dev/null
|
||||
|
||||
#
|
||||
# Trigger builds for the previous version on TeamCity and Jenkins
|
||||
# Trigger builds for the previous version on TeamCity, Jenkins and GitHub
|
||||
#
|
||||
|
||||
triggerBuilds
|
||||
|
|
|
|||
|
|
@ -58,6 +58,10 @@ function triggerTestBuilds() {
|
|||
local job=${test_build%_Jenkins}
|
||||
echo " -- Triggering build configuration $job/$branch on Jenkins"
|
||||
triggerJenkinsBuild "$job" "$branch" "$force"
|
||||
elif [ "${test_build:(-7)}" == "_GitHub" ]; then
|
||||
local job=${test_build%_GitHub}
|
||||
echo " -- Triggering GitHub action build $job/$branch"
|
||||
triggerGitHubActionsBuild true "$job" "$branch"
|
||||
else
|
||||
echo " -- Triggering build configuration $test_build on teamcity"
|
||||
triggerTeamCityBuild true "$test_build" "$vcs_test" "$branch"
|
||||
|
|
@ -172,11 +176,21 @@ while IFS= read -r line; do
|
|||
done <<< "$prfiles"
|
||||
|
||||
debug_echo "Build platforms: ${build_platforms[*]}"
|
||||
#
|
||||
# Start the test builds
|
||||
#
|
||||
|
||||
echo ". Start test builds"
|
||||
triggerTestBuilds "`echo ${build_platforms[@]}`" "$PRNUM"
|
||||
if (( ${#build_platforms[@]} > 0)); then
|
||||
#
|
||||
# Start the test builds
|
||||
#
|
||||
echo ". Start test builds"
|
||||
triggerTestBuilds "`echo ${build_platforms[@]}`" "$PRNUM"
|
||||
else
|
||||
echo ". No builds to start"
|
||||
curl --silent --write-out '\n' \
|
||||
--request POST \
|
||||
--header "Accept: application/vnd.github+json" \
|
||||
--header "Authorization: token $GITHUB_TOKEN" \
|
||||
--data '{"state":"success","description":"Skipping since no platform builds necessary","context":"Test Build (Keyman)"}' \
|
||||
"https://api.github.com/repos/keymanapp/keyman/statuses/${BUILD_VCS_NUMBER}"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
|
|
|||
1
resources/build/tests/dependencies/.gitignore
vendored
Normal file
1
resources/build/tests/dependencies/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
**/out.*
|
||||
41
resources/build/tests/dependencies/app/build.sh
Executable file
41
resources/build/tests/dependencies/app/build.sh
Executable file
|
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eu
|
||||
|
||||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "$(dirname "$THIS_SCRIPT")/../../../build-utils.sh"
|
||||
# END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
cd "$THIS_SCRIPT_PATH"
|
||||
|
||||
# Test builder_describe_outputs and dependencies
|
||||
|
||||
builder_describe "app test module" \
|
||||
@../library \
|
||||
configure \
|
||||
build
|
||||
|
||||
builder_parse "$@"
|
||||
|
||||
builder_describe_outputs \
|
||||
configure:project out.configure \
|
||||
build:project out.build
|
||||
|
||||
if builder_start_action clean:project; then
|
||||
rm -f out.configure out.build
|
||||
builder_finish_action success clean:project
|
||||
fi
|
||||
|
||||
if builder_start_action configure:project; then
|
||||
echo " ... doing the 'configure' action for 'app'"
|
||||
touch out.configure
|
||||
builder_finish_action success configure:project
|
||||
fi
|
||||
|
||||
if builder_start_action build:project; then
|
||||
echo " ... doing the 'build' action for 'app'"
|
||||
touch out.build
|
||||
builder_finish_action success build:project
|
||||
fi
|
||||
41
resources/build/tests/dependencies/library/build.sh
Executable file
41
resources/build/tests/dependencies/library/build.sh
Executable file
|
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eu
|
||||
|
||||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "$(dirname "$THIS_SCRIPT")/../../../build-utils.sh"
|
||||
# END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
cd "$THIS_SCRIPT_PATH"
|
||||
|
||||
# Test builder_describe_outputs and dependencies
|
||||
|
||||
builder_describe "library test module" \
|
||||
clean \
|
||||
configure \
|
||||
build
|
||||
|
||||
builder_parse "$@"
|
||||
|
||||
builder_describe_outputs \
|
||||
configure:project out.configure \
|
||||
build:project out.build
|
||||
|
||||
if builder_start_action clean:project; then
|
||||
rm -f out.configure out.build
|
||||
builder_finish_action success clean:project
|
||||
fi
|
||||
|
||||
if builder_start_action configure:project; then
|
||||
echo " ... doing the 'configure' action for 'library'"
|
||||
touch out.configure
|
||||
builder_finish_action success configure:project
|
||||
fi
|
||||
|
||||
if builder_start_action build:project; then
|
||||
echo " ... doing the 'build' action for 'library'"
|
||||
touch out.build
|
||||
builder_finish_action success build:project
|
||||
fi
|
||||
1
resources/build/tests/trees/.gitignore
vendored
Normal file
1
resources/build/tests/trees/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
child?.*
|
||||
81
resources/build/tests/trees/build.sh
Executable file
81
resources/build/tests/trees/build.sh
Executable file
|
|
@ -0,0 +1,81 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eu
|
||||
|
||||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "$(dirname "$THIS_SCRIPT")/../../build-utils.sh"
|
||||
# END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
cd "$THIS_SCRIPT_PATH"
|
||||
|
||||
# Test builder_describe_outputs and dependencies
|
||||
|
||||
builder_describe "parent test module" \
|
||||
:child1 \
|
||||
:child2 \
|
||||
:child3=child3_renamed/src \
|
||||
clean \
|
||||
configure \
|
||||
build \
|
||||
test \
|
||||
install \
|
||||
error
|
||||
|
||||
builder_parse "$@"
|
||||
|
||||
# All child actions will generate files which we need to verify for test
|
||||
rm -f ./child?.*
|
||||
|
||||
function test_present() {
|
||||
local target=$1
|
||||
local action=$2
|
||||
|
||||
local CHECK="${COLOR_GREEN}✔${COLOR_RESET}" # ✔
|
||||
local CROSS="${COLOR_RED}❌${COLOR_RESET}" # ❌
|
||||
|
||||
if builder_has_action $action:$target; then
|
||||
if [ ! -f $target.$action ]; then
|
||||
builder_die "$CROSS FAIL: ./$target.$action to be present"
|
||||
else
|
||||
echo "$CHECK PASS: ./$target.$action found as expected"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# We need to specify the order to run actions in the parent script
|
||||
#
|
||||
# This may looks as simple as:
|
||||
#
|
||||
# builder_run_child_actions clean configure build test install
|
||||
#
|
||||
builder_run_child_actions clean
|
||||
test_present child1 clean
|
||||
test_present child2 clean
|
||||
test_present child3 clean
|
||||
|
||||
builder_run_child_actions configure
|
||||
test_present child1 configure
|
||||
test_present child2 configure
|
||||
test_present child3 configure
|
||||
|
||||
# Test chaining commands in a single statement
|
||||
builder_run_child_actions build test
|
||||
test_present child1 build
|
||||
test_present child2 build
|
||||
test_present child3 build
|
||||
test_present child1 test
|
||||
test_present child2 test
|
||||
test_present child3 test
|
||||
|
||||
# We are customising the order in which child scripts are installed, so 2 goes before 1
|
||||
builder_run_child_actions install:child2
|
||||
test_present child2 install
|
||||
|
||||
builder_run_child_actions install:child1
|
||||
test_present child1 install
|
||||
|
||||
builder_run_child_actions error
|
||||
|
||||
echo Done
|
||||
44
resources/build/tests/trees/child1/build.sh
Executable file
44
resources/build/tests/trees/child1/build.sh
Executable file
|
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eu
|
||||
|
||||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "$(dirname "$THIS_SCRIPT")/../../../build-utils.sh"
|
||||
# END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
cd "$THIS_SCRIPT_PATH"
|
||||
|
||||
# Test builder_describe_outputs and dependencies
|
||||
|
||||
project=child1
|
||||
|
||||
builder_describe "$project test module" \
|
||||
clean \
|
||||
configure \
|
||||
build \
|
||||
test \
|
||||
install \
|
||||
error
|
||||
|
||||
builder_parse "$@"
|
||||
|
||||
function test_action() {
|
||||
local action=$1
|
||||
|
||||
if builder_start_action $action; then
|
||||
touch ../$project.$action
|
||||
builder_finish_action success $action
|
||||
fi
|
||||
}
|
||||
|
||||
test_action clean
|
||||
test_action configure
|
||||
test_action build
|
||||
test_action test
|
||||
test_action install
|
||||
|
||||
if builder_start_action error; then
|
||||
builder_die "This error action is supposed to die"
|
||||
fi
|
||||
44
resources/build/tests/trees/child2/build.sh
Executable file
44
resources/build/tests/trees/child2/build.sh
Executable file
|
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eu
|
||||
|
||||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "$(dirname "$THIS_SCRIPT")/../../../build-utils.sh"
|
||||
# END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
cd "$THIS_SCRIPT_PATH"
|
||||
|
||||
# Test builder_describe_outputs and dependencies
|
||||
|
||||
project=child2
|
||||
|
||||
builder_describe "$project test module" \
|
||||
clean \
|
||||
configure \
|
||||
build \
|
||||
test \
|
||||
install \
|
||||
error
|
||||
|
||||
builder_parse "$@"
|
||||
|
||||
function test_action() {
|
||||
local action=$1
|
||||
|
||||
if builder_start_action $action; then
|
||||
touch ../$project.$action
|
||||
builder_finish_action success $action
|
||||
fi
|
||||
}
|
||||
|
||||
test_action clean
|
||||
test_action configure
|
||||
test_action build
|
||||
test_action test
|
||||
test_action install
|
||||
|
||||
if builder_start_action error; then
|
||||
builder_die "This error action is supposed to die"
|
||||
fi
|
||||
44
resources/build/tests/trees/child3_renamed/src/build.sh
Executable file
44
resources/build/tests/trees/child3_renamed/src/build.sh
Executable file
|
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eu
|
||||
|
||||
## START STANDARD BUILD SCRIPT INCLUDE
|
||||
# adjust relative paths as necessary
|
||||
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
|
||||
. "$(dirname "$THIS_SCRIPT")/../../../../build-utils.sh"
|
||||
# END STANDARD BUILD SCRIPT INCLUDE
|
||||
|
||||
cd "$THIS_SCRIPT_PATH"
|
||||
|
||||
# Test builder_describe_outputs and dependencies
|
||||
|
||||
project=child3
|
||||
|
||||
builder_describe "$project test module" \
|
||||
clean \
|
||||
configure \
|
||||
build \
|
||||
test \
|
||||
install \
|
||||
error
|
||||
|
||||
builder_parse "$@"
|
||||
|
||||
function test_action() {
|
||||
local action=$1
|
||||
|
||||
if builder_start_action $action; then
|
||||
touch ../../$project.$action
|
||||
builder_finish_action success $action
|
||||
fi
|
||||
}
|
||||
|
||||
test_action clean
|
||||
test_action configure
|
||||
test_action build
|
||||
test_action test
|
||||
test_action install
|
||||
|
||||
if builder_start_action error; then
|
||||
builder_die "This error action is supposed to die"
|
||||
fi
|
||||
17
resources/build/tests/trees/test.sh
Executable file
17
resources/build/tests/trees/test.sh
Executable file
|
|
@ -0,0 +1,17 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eu
|
||||
|
||||
./build.sh clean configure build install test
|
||||
if [ $(ls child?.* | wc -l) -ne 14 ]; then
|
||||
echo unexpected output file count
|
||||
exit 1
|
||||
fi
|
||||
|
||||
./build.sh error && (echo should not have passed; exit 1) || (echo " ... build returned error as expected")
|
||||
|
||||
./build.sh install:child1 test:child2
|
||||
if [ $(ls child?.* | wc -l) -ne 2 ]; then
|
||||
echo unexpected output file count
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -21,6 +21,10 @@ function triggerBuilds() {
|
|||
local job=${build%_Jenkins}
|
||||
echo Triggering Jenkins build "$job" "$base" "true"
|
||||
triggerJenkinsBuild "$job" "$base" "true"
|
||||
elif [ "${build:(-7)}" == "_GitHub" ]; then
|
||||
local job=${build%_GitHub}
|
||||
echo Triggering GitHub action build "$job" "$base"
|
||||
triggerGitHubActionsBuild false "$job" "$base"
|
||||
else
|
||||
echo Triggering TeamCity build false $build $TEAMCITY_VCS_ID $base
|
||||
triggerTeamCityBuild false $build $TEAMCITY_VCS_ID $base
|
||||
|
|
@ -96,6 +100,7 @@ function triggerJenkinsBuild() {
|
|||
if echo "$OUTPUT" | grep -q "\"triggered\":true"; then
|
||||
echo -n " job triggered: "
|
||||
else
|
||||
echo "##teamcity[buildProblem description='Triggering Jenkins build failed']"
|
||||
echo -n " triggering failed: "
|
||||
fi
|
||||
|
||||
|
|
@ -119,3 +124,47 @@ function triggerJenkinsBuild() {
|
|||
echo
|
||||
fi
|
||||
}
|
||||
|
||||
function triggerGitHubActionsBuild() {
|
||||
local IS_TEST_BUILD="$1"
|
||||
local GITHUB_ACTION="$2"
|
||||
local GIT_BRANCH="${3:-master}"
|
||||
local GIT_REF GIT_SHA
|
||||
|
||||
local GITHUB_SERVER=https://api.github.com/repos/keymanapp/keyman/dispatches
|
||||
|
||||
if [ "${action:-""}" == "commit" ]; then
|
||||
# This will only be true if we created and pushed a tag
|
||||
GIT_REF="refs/tags/release@$VERSION_WITH_TAG"
|
||||
GIT_SHA="$(git rev-parse "${GIT_REF}")"
|
||||
GIT_EVENT_TYPE="${GITHUB_ACTION}: release@${VERSION_WITH_TAG}"
|
||||
elif [[ $GIT_BRANCH != stable-* ]] && [[ $GIT_BRANCH =~ [0-9]+ ]]; then
|
||||
GIT_REF="refs/pull/${GIT_BRANCH}/merge"
|
||||
GIT_SHA="$(git rev-parse "refs/pull/${GIT_BRANCH}/head")"
|
||||
GIT_EVENT_TYPE="${GITHUB_ACTION}: PR #${GIT_BRANCH}"
|
||||
GIT_BRANCH="PR-${GIT_BRANCH}"
|
||||
else
|
||||
GIT_REF="refs/heads/${GIT_BRANCH}"
|
||||
GIT_SHA="$(git rev-parse "${GIT_REF}")"
|
||||
GIT_EVENT_TYPE="${GITHUB_ACTION}: ${GIT_BRANCH}"
|
||||
fi
|
||||
|
||||
local DATA="{\"event_type\": \"$GIT_EVENT_TYPE\", \
|
||||
\"client_payload\": { \
|
||||
\"ref\": \"$GIT_REF\", \
|
||||
\"sha\": \"$GIT_SHA\", \
|
||||
\"branch\": \"$GIT_BRANCH\", \
|
||||
\"isTestBuild\": \"$IS_TEST_BUILD\" \
|
||||
}}"
|
||||
|
||||
echo "GitHub Action Data: $DATA"
|
||||
|
||||
# adjust indentation for output of curl
|
||||
echo -n " "
|
||||
curl --silent --write-out '\n' \
|
||||
--request POST \
|
||||
--header "Accept: application/vnd.github+json" \
|
||||
--header "Authorization: token $GITHUB_TOKEN" \
|
||||
--data "$DATA" \
|
||||
$GITHUB_SERVER
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ watch_developer='common|core|web'
|
|||
# _Jenkins should be appended to any build configuration (pipeline) name that is from Jenkins,
|
||||
# not TeamCity.
|
||||
#
|
||||
# _GitHub should be appended to any build configuration name that is from GitHub, not TeamCity.
|
||||
|
||||
# Test Build Configurations
|
||||
|
||||
|
|
@ -35,7 +36,7 @@ bc_test_all=()
|
|||
|
||||
bc_test_android=(KeymanAndroid_TestPullRequests KeymanAndroid_TestSamplesAndTestProjects)
|
||||
bc_test_ios=(Keyman_iOS_TestPullRequests Keyman_iOS_TestSamplesAndTestProjects)
|
||||
bc_test_linux=(KeymanLinux_TestPullRequests Keyman_Common_KPAPI_TestPullRequests_Linux pipeline-keyman-packaging_Jenkins)
|
||||
bc_test_linux=(KeymanLinux_TestPullRequests Keyman_Common_KPAPI_TestPullRequests_Linux pipeline-keyman-packaging_Jenkins deb-pr-packaging_GitHub)
|
||||
bc_test_mac=(Keyman_KeymanMac_PullRequests Keyman_Common_KPAPI_TestPullRequests_macOS)
|
||||
bc_test_windows=(KeymanDesktop_TestPullRequests KeymanDesktop_TestPrRenderOnScreenKeyboards Keyman_Common_KPAPI_TestPullRequests_Windows)
|
||||
bc_test_web=(Keymanweb_TestPullRequests Keyman_Common_LMLayer_TestPullRequests Keyman_Common_KPAPI_TestPullRequests_WASM)
|
||||
|
|
@ -49,7 +50,7 @@ vcs_test=HttpsGithubComKeymanappKeymanPRs
|
|||
|
||||
bc_master_android=(KeymanAndroid_Build)
|
||||
bc_master_ios=(Keyman_iOS_Master)
|
||||
bc_master_linux=(KeymanLinux_Master pipeline-keyman-packaging_Jenkins)
|
||||
bc_master_linux=(KeymanLinux_Master pipeline-keyman-packaging_Jenkins deb-release-packaging_GitHub)
|
||||
bc_master_mac=(KeymanMac_Master)
|
||||
bc_master_windows=(Keyman_Build)
|
||||
bc_master_web=(Keymanweb_Build)
|
||||
|
|
@ -61,7 +62,7 @@ vcs_master=HttpsGithubComKeymanappKeyman
|
|||
|
||||
bc_beta_android=(KeymanAndroid_Build)
|
||||
bc_beta_ios=(Keyman_iOS_Master)
|
||||
bc_beta_linux=(KeymanLinux_Master pipeline-keyman-packaging_Jenkins)
|
||||
bc_beta_linux=(KeymanLinux_Master pipeline-keyman-packaging_Jenkins deb-release-packaging_GitHub)
|
||||
bc_beta_mac=(KeymanMac_Master)
|
||||
bc_beta_windows=(Keyman_Build)
|
||||
bc_beta_web=(Keymanweb_Build)
|
||||
|
|
@ -73,7 +74,7 @@ vcs_beta=HttpsGithubComKeymanappKeyman
|
|||
|
||||
bc_stable_14_0_android=(KeymanAndroid_Build)
|
||||
bc_stable_14_0_ios=(Keyman_iOS_Master)
|
||||
bc_stable_14_0_linux=(KeymanLinux_Master pipeline-keyman-packaging_Jenkins)
|
||||
bc_stable_14_0_linux=(KeymanLinux_Master pipeline-keyman-packaging_Jenkins deb-release-packaging_GitHub)
|
||||
bc_stable_14_0_mac=(KeymanMac_Master)
|
||||
bc_stable_14_0_windows=(Keyman_Build)
|
||||
bc_stable_14_0_web=(Keymanweb_Build)
|
||||
|
|
@ -88,7 +89,7 @@ vcs_stable_14_0=HttpsGithubComKeymanappKeyman
|
|||
|
||||
bc_stable_15_0_android=(KeymanAndroid_Build)
|
||||
bc_stable_15_0_ios=(Keyman_iOS_Master)
|
||||
bc_stable_15_0_linux=(KeymanLinux_Master pipeline-keyman-packaging_Jenkins)
|
||||
bc_stable_15_0_linux=(KeymanLinux_Master pipeline-keyman-packaging_Jenkins deb-release-packaging_GitHub)
|
||||
bc_stable_15_0_mac=(KeymanMac_Master)
|
||||
bc_stable_15_0_windows=(Keyman_Build)
|
||||
bc_stable_15_0_web=(Keymanweb_Build)
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"dependencies": {
|
||||
"@actions/core": "^1.9.1",
|
||||
"@actions/github": "^2.1.0",
|
||||
"typescript": "^4.5.4",
|
||||
"typescript": "^4.9.5",
|
||||
"yargs": "^15.1.0"
|
||||
},
|
||||
"description": "Automatically updates HISTORY.md based on pull requests",
|
||||
|
|
@ -10,10 +10,10 @@
|
|||
"@types/node": "^13.7.0",
|
||||
"@types/semver": "^7.1.0",
|
||||
"semver": "^7.1.2",
|
||||
"ts-node": "^8.6.2"
|
||||
"ts-node": "^10.9.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "16"
|
||||
"node": ">=16.0"
|
||||
},
|
||||
"files": [
|
||||
"src"
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ function _builder_init() {
|
|||
_builder_findRepoRoot
|
||||
_builder_setBuildScriptIdentifiers
|
||||
|
||||
if [[ -n "$TERM" ]] && [[ "$TERM" != "dumb" ]] && [[ "$TERM" != "unknown" ]]; then
|
||||
if [[ -n "$TERM" ]] && [[ "$TERM" != "dumb" ]] && [[ "$TERM" != "unknown" ]] && [ -t 1 ]; then
|
||||
builder_use_color true
|
||||
else
|
||||
builder_use_color false
|
||||
|
|
@ -109,13 +109,25 @@ builder_use_color() {
|
|||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# Wraps the input string in `builder_display_usage` with $BUILDER_TERM_START and
|
||||
# $BUILDER_TERM_END
|
||||
#
|
||||
function builder_term() {
|
||||
echo "${BUILDER_TERM_START}$*${BUILDER_TERM_END}"
|
||||
}
|
||||
|
||||
function builder_die() {
|
||||
echo
|
||||
echo "${COLOR_RED}$*"
|
||||
echo "${COLOR_RED}$*${COLOR_RESET}"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
function builder_warn() {
|
||||
echo "${COLOR_YELLOW}$*${COLOR_RESET}"
|
||||
}
|
||||
|
||||
####################################################################################
|
||||
#
|
||||
# builder_ functions for standard build script parameter and process management
|
||||
|
|
@ -126,7 +138,13 @@ function builder_die() {
|
|||
# builder_ names are reserved.
|
||||
# _builder_ names are internal use and subject to change
|
||||
#
|
||||
_builder_debug=false
|
||||
if [ -z ${_builder_debug+x} ]; then
|
||||
_builder_debug=false
|
||||
fi
|
||||
|
||||
if $_builder_debug; then
|
||||
echo "[DEBUG] Command line: $0 $@"
|
||||
fi
|
||||
|
||||
#
|
||||
# builder_extra_params: string containing all parameters after '--'
|
||||
|
|
@ -241,6 +259,90 @@ _builder_cleanup_deps() {
|
|||
fi
|
||||
}
|
||||
|
||||
_builder_execute_child() {
|
||||
local action=$1
|
||||
local target=$2
|
||||
|
||||
local scope="[$THIS_SCRIPT_IDENTIFIER] "
|
||||
local script="$THIS_SCRIPT_PATH/${_builder_target_paths[$target]}/build.sh"
|
||||
|
||||
if $_builder_debug; then
|
||||
echo "${COLOR_BLUE}## $scope$action$target starting...${COLOR_RESET}"
|
||||
fi
|
||||
|
||||
"$script" $action \
|
||||
$builder_verbose \
|
||||
$builder_debug \
|
||||
&& (
|
||||
if $_builder_debug; then
|
||||
echo "${COLOR_GREEN}## $scope$action$target completed successfully${COLOR_RESET}"
|
||||
fi
|
||||
) || (
|
||||
result=$?
|
||||
echo "${COLOR_RED}## $scope$action$target failed with exit code $result${COLOR_RESET}"
|
||||
exit $result
|
||||
)
|
||||
}
|
||||
|
||||
_builder_run_child_action() {
|
||||
local action="$1" target
|
||||
|
||||
if [[ $action =~ : ]]; then
|
||||
IFS=: read -r action target <<< $action
|
||||
target=:$target
|
||||
else
|
||||
target=':*'
|
||||
fi
|
||||
|
||||
if builder_has_action $action$target; then
|
||||
if [[ $target == ':*' ]]; then
|
||||
# run all children in order specified in builder_describe
|
||||
for target in "${_builder_targets[@]}"; do
|
||||
# We have to re-test the action because the user may not
|
||||
# have specified all targets in their invocation
|
||||
if builder_has_action $action$target; then
|
||||
if [ -f "$THIS_SCRIPT_PATH/${_builder_target_paths[$target]}/build.sh" ]; then
|
||||
_builder_execute_child $action $target
|
||||
fi
|
||||
fi
|
||||
done
|
||||
else
|
||||
# If specified explicitly, we assume existence of a child build script.
|
||||
_builder_execute_child $action $target
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# Executes the specified actions on all child targets, or on the specified
|
||||
# targets. A child target is any target which has a sub-folder of the same name
|
||||
# as the target. However, the actions will only be run if they have been
|
||||
# specified by the user on the command-line.
|
||||
#
|
||||
# ### Usage
|
||||
#
|
||||
# ```bash
|
||||
# builder_run_child_actions action1 [...]
|
||||
# ```
|
||||
#
|
||||
# ### Parameters
|
||||
#
|
||||
# 1...: action[:target] name of action:target to run
|
||||
#
|
||||
# ### Example
|
||||
#
|
||||
# ```bash
|
||||
# builder_run_child_actions configure build test install
|
||||
# ```
|
||||
#
|
||||
builder_run_child_actions() {
|
||||
while [[ $# -gt 0 ]]; do
|
||||
local action="$1"
|
||||
_builder_run_child_action "$action"
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
#
|
||||
# Builds the standardized `action:target` string for the specified action-target
|
||||
# pairing and also returns 0 if the user has asked to perform it on the command
|
||||
|
|
@ -256,9 +358,11 @@ _builder_cleanup_deps() {
|
|||
# if build_has_action action[:target]; then ...; fi
|
||||
# ````
|
||||
#
|
||||
# Parameters:
|
||||
# ### Parameters
|
||||
#
|
||||
# 1: action[:target] name of action:target
|
||||
# Example:
|
||||
#
|
||||
# ### Example
|
||||
#
|
||||
# ```bash
|
||||
# if builder_has_action build:app; then ...
|
||||
|
|
@ -462,9 +566,16 @@ _builder_expand_action_targets() {
|
|||
# default, append a `+` to the action name, e.g. `"test+ Test the project"`.
|
||||
# If there is no default specified, then it will be `build`.
|
||||
#
|
||||
# * **Target:** `":target [One line description]"`
|
||||
# * **Target:** `":target[=path] [One line description]"`
|
||||
#
|
||||
# A target always starts with colon, e.g. `:project`.
|
||||
# A target always starts with colon, e.g. `:project`. If a folder exists with
|
||||
# the same name as a target, then that automatically denotes the target as a
|
||||
# "child project". This can simplify parent-child style scripts, using the
|
||||
# [`builder_run_child_actions`] function.
|
||||
#
|
||||
# A child project with an alternate folder can also be specified by appending
|
||||
# `=path` to the target definition, for example `:app=src/app`. Where
|
||||
# possible, avoid differences in names of child projects and folders.
|
||||
#
|
||||
# * **Dependency:** "@/path/to/dependency [action][:target] ..."
|
||||
#
|
||||
|
|
@ -482,6 +593,8 @@ _builder_expand_action_targets() {
|
|||
# specified, space separated.
|
||||
#
|
||||
builder_describe() {
|
||||
_builder_record_function_call builder_describe
|
||||
|
||||
_builder_description="$1"
|
||||
_builder_actions=()
|
||||
_builder_targets=()
|
||||
|
|
@ -494,6 +607,7 @@ builder_describe() {
|
|||
declare -A -g _builder_dep_path # array of output files for action:target pairs
|
||||
declare -A -g _builder_dep_related_actions # array of action:targets associated with a given dependency
|
||||
declare -A -g _builder_internal_dep # array of internal action:targets dependency relationships
|
||||
declare -A -g _builder_target_paths # array of target child project paths
|
||||
shift
|
||||
# describe each target, action, and option possibility
|
||||
while [[ $# -gt 0 ]]; do
|
||||
|
|
@ -506,7 +620,25 @@ builder_describe() {
|
|||
|
||||
if [[ $value =~ ^: ]]; then
|
||||
# Parameter is a target
|
||||
local target_path=
|
||||
if [[ $value =~ = ]]; then
|
||||
# The target has a custom child project path
|
||||
target_path="$(echo "$value" | cut -d= -f 2 -)"
|
||||
value="$(echo "$value" | cut -d= -f 1 -)"
|
||||
if [[ ! -d "$THIS_SCRIPT_PATH/$target_path" ]]; then
|
||||
builder_die "Target path '$target_path' for $value does not exist."
|
||||
fi
|
||||
else
|
||||
# If the target name matches a folder name, implicitly
|
||||
# make it available as a child project
|
||||
if [[ -d "$THIS_SCRIPT_PATH/${value:1}" ]]; then
|
||||
target_path="${value:1}"
|
||||
fi
|
||||
fi
|
||||
_builder_targets+=($value)
|
||||
if [[ ! -z "$target_path" ]]; then
|
||||
_builder_target_paths[$value]="$target_path"
|
||||
fi
|
||||
elif [[ $value =~ ^@ ]]; then
|
||||
# Parameter is a dependency
|
||||
local dependency="${value:1}"
|
||||
|
|
@ -599,6 +731,8 @@ builder_describe() {
|
|||
# ```
|
||||
#
|
||||
function builder_describe_outputs() {
|
||||
_builder_record_function_call builder_describe_outputs
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
local key="$1" path="$2" action target
|
||||
path="`_builder_expand_relative_path "$path"`"
|
||||
|
|
@ -620,6 +754,11 @@ function builder_describe_outputs() {
|
|||
done
|
||||
|
||||
_builder_define_default_internal_dependencies
|
||||
|
||||
# We only want to define internal dependencies after both builder_parse and builder_describe_outputs have been called
|
||||
if _builder_has_function_been_called builder_parse; then
|
||||
_builder_add_chosen_action_target_dependencies
|
||||
fi
|
||||
}
|
||||
|
||||
_builder_get_default_description() {
|
||||
|
|
@ -652,16 +791,14 @@ _builder_parameter_error() {
|
|||
|
||||
}
|
||||
|
||||
# Pre-initializes the color setting based on the options specified to a
|
||||
# a build.sh script, parsing the command line to do so. This is only
|
||||
# needed if said script wishes to use this script's defined colors while
|
||||
# respecting the options provided by the script's caller.
|
||||
#
|
||||
# Usage:
|
||||
# builder_check_color "$@"
|
||||
# Pre-initializes the color setting based on the options specified to a
|
||||
# a build.sh script. This is called automatically during init.
|
||||
#
|
||||
# Parameters
|
||||
# 1: $@ all command-line arguments (as with builder_parse)
|
||||
builder_check_color() {
|
||||
# 1: "$@" all command-line arguments
|
||||
#
|
||||
_builder_check_color() {
|
||||
# Process command-line arguments
|
||||
while [[ $# -gt 0 ]] ; do
|
||||
local key="$1"
|
||||
|
|
@ -690,16 +827,18 @@ _builder_add_chosen_action_target_dependencies() {
|
|||
while (( $i < ${#_builder_chosen_action_targets[@]} )); do
|
||||
action_target=${_builder_chosen_action_targets[$i]}
|
||||
|
||||
# If we have an internal dependency for the chosen action:target pair, add
|
||||
# it to the list, but only if there is a defined output and that output is
|
||||
# missing
|
||||
# If we have an internal dependency for the chosen action:target pair
|
||||
if [[ ! -z ${_builder_internal_dep[$action_target]+x} ]]; then
|
||||
local dep_output=${_builder_internal_dep[$action_target]}
|
||||
if [[ ! -z ${_builder_dep_path[$dep_output]+x} ]] &&
|
||||
[[ ! -e "$KEYMAN_ROOT/${_builder_dep_path[$dep_output]}" ]]; then
|
||||
if ! _builder_item_in_array "$dep_output" "${_builder_chosen_action_targets[@]}"; then
|
||||
_builder_chosen_action_targets+=($dep_output)
|
||||
new_actions+=($dep_output)
|
||||
# If there is a defined output for this dependency
|
||||
if [[ ! -z ${_builder_dep_path[$dep_output]+x} ]]; then
|
||||
# If the output for the dependency is missing, or we have --force-deps
|
||||
if [[ ! -e "$KEYMAN_ROOT/${_builder_dep_path[$dep_output]}" ]] || builder_is_full_dep_build; then
|
||||
# Add the dependency to the chosen action:target list
|
||||
if ! _builder_item_in_array "$dep_output" "${_builder_chosen_action_targets[@]}"; then
|
||||
_builder_chosen_action_targets+=($dep_output)
|
||||
new_actions+=($dep_output)
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
|
@ -707,7 +846,11 @@ _builder_add_chosen_action_target_dependencies() {
|
|||
done
|
||||
|
||||
if [[ ${#new_actions[@]} -gt 0 ]]; then
|
||||
echo "Automatically running following required actions with missing outputs:"
|
||||
if builder_is_full_dep_build; then
|
||||
echo "Automatically running all dependency actions due to --force-deps:"
|
||||
else
|
||||
echo "Automatically running following required actions with missing outputs:"
|
||||
fi
|
||||
for e in "${new_actions[@]}"; do
|
||||
echo "* $e"
|
||||
done
|
||||
|
|
@ -752,6 +895,9 @@ _builder_define_default_internal_dep() {
|
|||
# Parameters
|
||||
# 1: $@ command-line arguments
|
||||
builder_parse() {
|
||||
|
||||
_builder_record_function_call builder_parse
|
||||
|
||||
_builder_build_deps=--deps
|
||||
builder_verbose=
|
||||
builder_debug=
|
||||
|
|
@ -876,7 +1022,10 @@ builder_parse() {
|
|||
done
|
||||
fi
|
||||
|
||||
_builder_add_chosen_action_target_dependencies
|
||||
# We only want to define internal dependencies after both builder_parse and builder_describe_outputs have been called
|
||||
if _builder_has_function_been_called builder_describe_outputs; then
|
||||
_builder_add_chosen_action_target_dependencies
|
||||
fi
|
||||
|
||||
if $_builder_debug; then
|
||||
echo "[DEBUG] Selected actions and targets:"
|
||||
|
|
@ -1118,7 +1267,7 @@ builder_is_dep_build() {
|
|||
# `--deps` parameter (which is the default).
|
||||
#
|
||||
builder_is_quick_dep_build() {
|
||||
if builder_is_dep_build && [[ $_builder_build_deps == --deps ]]; then
|
||||
if [[ $_builder_build_deps == --deps ]]; then
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
|
|
@ -1129,7 +1278,7 @@ builder_is_quick_dep_build() {
|
|||
# corresponds to the `--force-deps`` parameter.
|
||||
#
|
||||
builder_is_full_dep_build() {
|
||||
if builder_is_dep_build && [[ $_builder_build_deps == --force-deps ]]; then
|
||||
if [[ $_builder_build_deps == --force-deps ]]; then
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
|
|
@ -1246,7 +1395,33 @@ _builder_report_dependencies() {
|
|||
exit 0
|
||||
}
|
||||
|
||||
#
|
||||
# Track whether functions have already been called;
|
||||
# later we may use this to prevent multiple calls to, e.g.
|
||||
# builder_describe
|
||||
#
|
||||
|
||||
_builder_function_calls=()
|
||||
|
||||
_builder_record_function_call() {
|
||||
local func=$1
|
||||
if _builder_has_function_been_called $1; then
|
||||
# builder_die "ERROR: $func cannot be called more than once."
|
||||
return 0
|
||||
fi
|
||||
_builder_function_calls+=($1)
|
||||
}
|
||||
|
||||
_builder_has_function_been_called() {
|
||||
local func=$1
|
||||
if _builder_item_in_array $1 "${_builder_function_calls[@]}"; then
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
#
|
||||
# Initialize builder once all functions are declared
|
||||
#
|
||||
_builder_init
|
||||
_builder_check_color "$@"
|
||||
|
|
|
|||
17
web/build.sh
17
web/build.sh
|
|
@ -85,13 +85,6 @@ compilecmd="$compiler"
|
|||
PREDICTIVE_TEXT_SOURCE="../common/predictive-text/unit_tests/in_browser/resources/models/simple-trie.js"
|
||||
PREDICTIVE_TEXT_OUTPUT="src/test/manual/web/prediction-ui/simple-en-trie.js"
|
||||
|
||||
builder_check_color "$@"
|
||||
|
||||
DOC_WEB_PRODUCT="${BUILDER_TERM_START}:web${BUILDER_TERM_END} build product"
|
||||
DOC_TEST_WEB="${BUILDER_TERM_START}test:web${BUILDER_TERM_END}"
|
||||
DOC_BUILD_EMBED_WEB="${BUILDER_TERM_START}build:embed${BUILDER_TERM_END} and ${BUILDER_TERM_START}build:web${BUILDER_TERM_END}"
|
||||
DOC_TEST_SYMBOL="actions - ${BUILDER_TERM_START}test${BUILDER_TERM_END}"
|
||||
|
||||
builder_describe "Builds Keyman Engine for Web (KMW)." \
|
||||
"@../common/web/keyman-version build" \
|
||||
"@../common/web/input-processor build" \
|
||||
|
|
@ -99,18 +92,18 @@ builder_describe "Builds Keyman Engine for Web (KMW)." \
|
|||
"clean" \
|
||||
"configure" \
|
||||
"build" \
|
||||
"test Runs unit tests. Only ${DOC_TEST_WEB} is currently defined" \
|
||||
"test Runs unit tests. Only $(builder_term test:web) is currently defined" \
|
||||
":embed Builds the configuration of KMW used within the Keyman mobile apps" \
|
||||
":engine Builds all common code used by other targets" \
|
||||
":web Builds the website-oriented configuration of Keyman Engine for Web" \
|
||||
":ui Builds the desktop UI modules used by the ${DOC_WEB_PRODUCT}" \
|
||||
":ui Builds the desktop UI modules used by the $(builder_term :web) build product" \
|
||||
":samples Builds only sample & test pages found under src/samples and src/test" \
|
||||
":tools Builds related development + unit-test resources" \
|
||||
"--no-minify Skips any minification steps in the build" \
|
||||
"--all Sets action to run on KMW's submodules as well if appropriate ($DOC_TEST_SYMBOL)"
|
||||
"--no-minify Skips any minification steps in the build" \
|
||||
"--all Sets action to run on KMW's submodules as well if appropriate (actions - $(builder_term test))"
|
||||
|
||||
# Possible TODO?
|
||||
# "upload-symbols Uploads build product to Sentry for error report symbolification. Only defined for $DOC_BUILD_EMBED_WEB" \
|
||||
# "upload-symbols Uploads build product to Sentry for error report symbolification. Only defined for $(builder_term build:embed) and $(builder_term build:web)" \
|
||||
|
||||
builder_describe_outputs \
|
||||
configure ../node_modules \
|
||||
|
|
|
|||
|
|
@ -38,8 +38,8 @@
|
|||
"karma-teamcity-reporter": "^1.1.0",
|
||||
"mocha": "^10.0.0",
|
||||
"modernizr": "^3.11.7",
|
||||
"ts-node": "^9.1.1",
|
||||
"typescript": "^4.5.4"
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"scripts": {
|
||||
"tsc": "tsc",
|
||||
|
|
|
|||
|
|
@ -81,8 +81,6 @@ PATH="../../../node_modules/.bin:$PATH"
|
|||
compiler="npm run tsc --"
|
||||
compilecmd="$compiler"
|
||||
|
||||
builder_check_color "$@"
|
||||
|
||||
builder_describe "Builds engine modules for Keyman Engine for Web (KMW)." \
|
||||
"@../../../common/web/keyman-version build:main" \
|
||||
"@../../../common/web/input-processor build:main" \
|
||||
|
|
@ -97,10 +95,10 @@ builder_describe "Builds engine modules for Keyman Engine for Web (KMW)." \
|
|||
# "upload-symbols Uploads build product to Sentry for error report symbolification. Only defined for $DOC_BUILD_EMBED_WEB" \
|
||||
|
||||
builder_describe_outputs \
|
||||
configure ../node_modules \
|
||||
configure:device-detect ../node_modules \
|
||||
configure:element-wrappers ../node_modules \
|
||||
configure:main ../node_modules \
|
||||
configure ../../../node_modules \
|
||||
configure:device-detect ../../../node_modules \
|
||||
configure:element-wrappers ../../../node_modules \
|
||||
configure:main ../../../node_modules \
|
||||
build:device-detect $(output_path $DEVICEDETECT $OUTPUT_DIR)/index.js \
|
||||
build:element-wrappers $(output_path $ELEMENTWRAPPERS $OUTPUT_DIR)/index.js \
|
||||
build:main $(output_path $MAIN $OUTPUT_DIR)/keymanweb.js
|
||||
|
|
|
|||
|
|
@ -16,17 +16,15 @@ cd "$THIS_SCRIPT_PATH"
|
|||
|
||||
################################ Main script ################################
|
||||
|
||||
builder_check_color "$@"
|
||||
|
||||
builder_describe "Runs the Keyman Engine for Web unit-testing suites" \
|
||||
"@./src/tools/testing/recorder test:engine" \
|
||||
"@./src/engine" \
|
||||
"test+" \
|
||||
":engine Runs the top-level Keyman Engine for Web unit tests" \
|
||||
":libraries Runs all unit tests for KMW's submodules. Currently excludes predictive-text tests" \
|
||||
"--ci Set to utilize CI-based test configurations & reporting. May not be set with ${BUILDER_TERM_START}--debug${BUILDER_TERM_END}." \
|
||||
"--ci Set to utilize CI-based test configurations & reporting. May not be set with $(builder_term --debug)." \
|
||||
"--reporters=REPORTERS Set to override the 'reporters' used by the unit testing engines" \
|
||||
"--browsers=BROWSERS Set to override automatic browser selection for ${BUILDER_TERM_START}:engine${BUILDER_TERM_END} tests"
|
||||
"--browsers=BROWSERS Set to override automatic browser selection for $(builder_term :engine) tests"
|
||||
|
||||
builder_parse "$@"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,290 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<resources>
|
||||
<string name="S_LocaleAuthors" comment="/PlainText: ">www.ಸಿರಿಗನ್ನಡ.com (www.sirigannada.com)</string>
|
||||
<string name="SK_UIFontName" comment="/PlainText: ">Noto Sans Kannada</string>
|
||||
<string name="SK_UIFontSize" comment="/PlainText: ">10</string>
|
||||
<string name="S_ShortProductName" comment="/PlainText: ">Keyman</string>
|
||||
<string name="S_Yes" comment="/PlainText: ">ಹೌದು</string>
|
||||
<string name="S_No" comment="/PlainText: ">ಇಲ್ಲ</string>
|
||||
<string name="SKButtonYes" comment="/FormatString: ">&ಹೌದು</string>
|
||||
<string name="SKButtonNo" comment="/FormatString: ">&ಇಲ್ಲ</string>
|
||||
<string name="S_Button_OK" comment="/PlainText: ">ಸರಿ</string>
|
||||
<string name="S_Button_Cancel" comment="/PlainText: ">ರದ್ದುಮಾಡು</string>
|
||||
<string name="S_Button_Close" comment="/PlainText: ">ಮುಚ್ಚು</string>
|
||||
<string name="S_Button_Apply" comment="/PlainText: ">ಅನ್ವಯಿಸು</string>
|
||||
<string name="S_Button_RemindLater" comment="/PlainText: ">ನಂತರ ನನಗೆ ನೆನಪಿಸು</string>
|
||||
<string name="SKButtonOK" comment="/FormatString: ">ಸರಿ</string>
|
||||
<string name="SKButtonCancel" comment="/FormatString: ">ರದ್ದುಮಾಡಿ</string>
|
||||
<string name="SKBalloonClickToSelectKeyboard" comment="/FormatString: ">ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಈ ಚಿತ್ರ(ಐಕಾನ್) ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ</string>
|
||||
<string name="SKBalloonOSKClosed" comment="/FormatString: ">Keyman ಇನ್ನೂ ಚಾಲನೆಯಲ್ಲಿದೆ. ನಿಮ್ಮ ಭಾಷೆ ಕೀಲಿಮಣೆಯನ್ನು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಬಳಸಲು ಈ ಚಿತ್ರ(ಐಕಾನ್) ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ</string>
|
||||
<string name="S_ConfigurationTitle" comment="/PlainText: ">Keyman ಸಂರಚನೆ (ಕಾನ್ಫಿಗರೇಷನ್)</string>
|
||||
<string name="S_Caption_GettingStarted" comment="/PlainText: ">ಶುರುವಾಗುತ್ತಿದೆ</string>
|
||||
<string name="S_Caption_Help" comment="/PlainText: ">ಸಹಾಯ</string>
|
||||
<string name="S_Keyboards" comment="/PlainText: ">ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು</string>
|
||||
<string name="S_Keyboards_AccessChar" comment="/PlainText: ">ಕ</string>
|
||||
<string name="S_Options" comment="/PlainText: ">ಆಯ್ಕೆಗಳು</string>
|
||||
<string name="S_Options_AccessChar" comment="/PlainText: ">ಆ</string>
|
||||
<string name="S_Hotkeys" comment="/PlainText: ">ನೇರ ಕೀಲಿಗಳು (ಹಾಟ್ಕೀ/ಶಾರ್ಟ್ಕಟ್ಕೀ)</string>
|
||||
<string name="S_Hotkeys_AccessChar" comment="/PlainText: ">ನ</string>
|
||||
<string name="S_Support" comment="/PlainText: ">ಸಹಾಯ</string>
|
||||
<string name="S_Support_AccessChar" comment="/PlainText: ">ಸ</string>
|
||||
<string name="S_KeepInTouch" comment="/PlainText: ">ನಮ್ಮ ಸಂಪರ್ಕ</string>
|
||||
<string name="S_KeepInTouch_AccessChar" comment="/PlainText: ">ಪ</string>
|
||||
<string name="S_Caption_Filename" comment="/PlainText: ">ಕಡತದ ಹೆಸರು: </string>
|
||||
<string name="S_Caption_Version" comment="/PlainText: ">ಪ್ಯಾಕೇಜ್ ಆವೃತ್ತಿ: </string>
|
||||
<string name="S_Caption_KeyboardVersion" comment="/PlainText: ">ಕೀಲಿಮಣೆ ಆವೃತ್ತಿ: </string>
|
||||
<string name="S_Caption_Author" comment="/PlainText: ">ಲೇಖಕ: </string>
|
||||
<string name="S_Caption_Website" comment="/PlainText: ">ವೆಬ್ಸೈಟ್: </string>
|
||||
<string name="S_Caption_Package" comment="/PlainText: ">ಪ್ಯಾಕೇಜ್: </string>
|
||||
<string name="S_Caption_Fonts" comment="/PlainText: ">ಅಕ್ಷರ ಶೈಲಿಗಳು(ಫಾಂಟ್): </string>
|
||||
<string name="S_Caption_Keyboards" comment="/PlainText: ">ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸಗಳು: </string>
|
||||
<string name="S_Caption_Encodings" comment="/PlainText: ">ಎನ್ಕೋಡಿಂಗ್: </string>
|
||||
<string name="S_Caption_LayoutType" comment="/PlainText: ">ವಿನ್ಯಾಸ ಪ್ರಕಾರ: </string>
|
||||
<string name="S_LayoutType_Positional" comment="/PlainText: ">ಸ್ಥಿರ (ಸ್ಥಾನಿಕ)</string>
|
||||
<string name="S_LayoutType_Mnemonic" comment="/PlainText: ">ವಿಂಡೋಸ್ ಆವೃತ್ತಿಗೆ ಮ್ಯಾಪ್ ಮಾಡಲಾಗಿದೆ</string>
|
||||
<string name="S_Caption_Description" comment="/PlainText: ">ವಿವರಣೆ: </string>
|
||||
<string name="S_Caption_InstalledFor" comment="/PlainText: ">ಇದಕ್ಕಾಗಿ ಸ್ಥಾಪಿಸಲಾಗಿದೆ: </string>
|
||||
<string name="S_InstalledFor_AllUsers" comment="/PlainText: ">ಎಲ್ಲಾ ಬಳಕೆದಾರರು</string>
|
||||
<string name="S_InstalledFor_CurrentUser" comment="/PlainText: ">ಪ್ರಸ್ತುತ ಬಳಕೆದಾರ</string>
|
||||
<string name="S_Caption_Languages" comment="/PlainText: ">ಈ ಕೀಲಿಮಣೆ ಬಳಕೆಯ ಭಾಷೆಗಳು:</string>
|
||||
<string name="S_Languages_Uninstall" comment="/PlainText: ">X</string>
|
||||
<string name="S_Languages_Install" comment="/PlainText: ">ಬೇರೆ ಭಾಷೆಯನ್ನು ಈ ಕೀಲಿಮಣೆಗೆ ಸೇರಿಸು</string>
|
||||
<string name="S_Caption_OnScreenKeyboard" comment="/PlainText: ">ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ: </string>
|
||||
<string name="S_OnScreenKeyboard_Custom" comment="/PlainText: ">ಕಸ್ಟಮ್</string>
|
||||
<string name="S_OnScreenKeyboard_Installed" comment="/PlainText: ">ಸ್ಥಾಪಿಸಲಾಗಿದೆ</string>
|
||||
<string name="S_OnScreenKeyboard_NotInstalled" comment="/PlainText: ">ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ</string>
|
||||
<string name="S_Caption_Documentation" comment="/PlainText: ">ದಾಖಲೆ: </string>
|
||||
<string name="S_Documentation_Installed" comment="/PlainText: ">ಸ್ಥಾಪಿಸಲಾಗಿದೆ</string>
|
||||
<string name="S_Documentation_NotInstalled" comment="/PlainText: ">ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ</string>
|
||||
<string name="S_Caption_Message" comment="/PlainText: ">ಸಂದೇಶ: </string>
|
||||
<string name="S_Caption_Copyright" comment="/PlainText: ">ಕೃತಿಸ್ವಾಮ್ಯ: </string>
|
||||
<string name="S_Button_PackageOptions" comment="/PlainText: ">ಪ್ಯಾಕೇಜ್ ಆಯ್ಕೆಗಳು</string>
|
||||
<string name="S_Button_KeyboardOptions" comment="/PlainText: ">ಆಯ್ಕೆಗಳು</string>
|
||||
<string name="S_Button_InstallKeyboard" comment="/PlainText: ">ಕೀಲಿಮಣೆಯನ್ನು ಅನುಸ್ಥಾಪಿಸು</string>
|
||||
<string name="S_Button_DownloadKeyboard" comment="/PlainText: ">ಕೀಲಿಮಣೆ ಡೌನ್ಲೋಡ್ ಮಾಡಿ</string>
|
||||
<string name="S_Menu_Options" comment="/PlainText: ">ಕೀಲಿಯನ್ನು ಆಯ್ಕೆಗಳು</string>
|
||||
<string name="S_Menu_Uninstall" comment="/PlainText: ">ಅಸ್ಥಾಪಿಸು</string>
|
||||
<string name="S_Menu_UninstallPackage" comment="/PlainText: ">ಪ್ಯಾಕೇಜ್ಅನ್ನು ಅಸ್ಥಾಪಿಸು</string>
|
||||
<string name="S_Menu_ShowWelcome" comment="/PlainText: ">ಪರಿಚಯಾತ್ಮಕ ಸಹಾಯವನ್ನು ತೋರಿಸು</string>
|
||||
<string name="S_Menu_ChangeHotkey" comment="/PlainText: ">ನೇರ ಕೀಲಿಯನ್ನು ಬದಲಾಯಿಸು</string>
|
||||
<string name="S_Menu_SetHotkey" comment="/PlainText: ">ನೇರ ಕೀಲಿಗಳು ಹೊಂದಿಸು</string>
|
||||
<string name="S_Menu_UninstallOnScreenKeyboard" comment="/PlainText: ">ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆಯನ್ನು ಅಸ್ಥಾಪಿಸು</string>
|
||||
<string name="S_Menu_InstallOnScreenKeyboard" comment="/PlainText: ">ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ ಅನುಸ್ಥಾಪಿಸು</string>
|
||||
<string name="S_Keyboards_NoKeyboardsInstalled" comment="/PlainText: ">ನೀವು ಯಾವುದೇ ಕೀಲಿಮಣೆಯನ್ನು ಸ್ಥಾಪಿಸಿಲ್ಲ. ಕೀಮ್ಯಾನ್ ವೆಬ್ಸೈಟ್ನಿಂದ ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಸ್ಥಾಪಿಸಲು ಡೌನ್ಲೋಡ್ ಕೀಲಿಮಣೆ ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ.</string>
|
||||
<string name="SKUninstallRequireAdmin" comment="/PlainText: ">ನಿರ್ವಾಹಕರಾಗಿದ್ದರೆ(ಅಡ್ಮಿನಿಸ್ಟ್ರೇಟರ್) ಮಾತ್ರ ಕೀಲಿಮಣೆ '%0:s' ಅನ್ನು ಅಸ್ಥಾಪಿಸಬಹುದು</string>
|
||||
<string name="kogGeneral" comment="/FormatString: ">ಸಾಮಾನ್ಯ</string>
|
||||
<string name="kogStartup" comment="/FormatString: ">ಆರಂಭಿಕ</string>
|
||||
<string name="kogOSK" comment="/FormatString: ">ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ</string>
|
||||
<string name="kogAdvanced" comment="/FormatString: ">ಸುಧಾರಿತ(ಅಡ್ವಾನ್ಸ್ಡ್)</string>
|
||||
<string name="koKeyboardHotkeysAreToggle" comment="/FormatString: ">ನೇರಕೀಲಿಗಳು (ಹಾಟ್ಕೀ/ಶಾರ್ಟ್ಕಟ್ಕೀ), ಕೀಲಿಮಣೆ ಕ್ರಿಯಾತ್ಮಕತೆಯನ್ನು ಟಾಗಲ್ ಮಾಡಲಿ</string>
|
||||
<string name="koAltGrCtrlAlt" comment="/FormatString: ">AltGr ಅನ್ನು Ctrl+Alt ಆಗಿ ಅನುಕರಿಸು </string>
|
||||
<string name="koDeadkeyConversion" comment="/FormatString: ">ಹಾರ್ಡ್ವೇರ್ ಕೀಲಿಗಳನ್ನು ಸರಳ ಕೀಲಿಗಳಾಗಿ ಪರಿಗಣಿಸು</string>
|
||||
<string name="koShowHints" comment="/FormatString: ">ಸುಳಿವುಗಳನ್ನು ತೋರಿಸು</string>
|
||||
<string name="koStartWithWindows" comment="/FormatString: ">ಕೀಮ್ಯಾನ್ ಚಲನೆಯನ್ನು ವಿಂಡೋಸ್ ಪ್ರಾರಂಭವಾದಾಗ ಪ್ರಾರಂಭಿಸು</string>
|
||||
<string name="koShowStartup" comment="/FormatString: ">ಸ್ಪ್ಲಾಶ್ ಪರದೆಯನ್ನು ತೋರಿಸು</string>
|
||||
<string name="koShowWelcome" comment="/FormatString: ">ಸ್ವಾಗತ ಪರದೆಯನ್ನು ತೋರಿಸು</string>
|
||||
<string name="koCheckForUpdates" comment="/FormatString: ">ನವೀಕರಣಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ www.keyman.com ನಲ್ಲಿ ಸಾಪ್ತಾಹಿಕವಾಗಿ ಪರಿಶೀಲಿಸು</string>
|
||||
<string name="koTestKeymanFunctioning" comment="/FormatString: ">Keyman ಪ್ರಾರಂಭವಾದಾಗ ವೈಫಲ್ಯದ ಅನ್ವಯಗಳನ್ನು ಪರೀಕ್ಷಿಸು</string>
|
||||
<string name="koReleaseShiftKeysAfterKeyPress" comment="/FormatString: ">"ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ"ಯಲ್ಲಿ ಯಾವುದೆ ಕೀಲಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿದ ನಂತರ Shift/Ctrl/Alt ಅನ್ನು ಬಿಡುಗಡೆ ಮಾಡು</string>
|
||||
<string name="koAutoOpenOSK" comment="/FormatString: ">ಹೊಸ ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಾಗ ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆಯನ್ನು ತೋರಿಸು</string>
|
||||
<string name="koAutoSwitchOSKPages" comment="/FormatString: ">ಬೇರೆ ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಾಗ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಹಾಯ ಅಥವಾ ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆಯನ್ನು ಬದಲಿಸು</string>
|
||||
<string name="koDebugging" comment="/FormatString: ">ಡೀಬಗ್ ಮಾಡುವುದು</string>
|
||||
<string name="S_Button_UILanguage" comment="/PlainText: ">ಬಳಕೆದಾರ ಇಂಟರ್ಫೇಸ್ ಭಾಷೆ...</string>
|
||||
<string name="S_Button_BaseKeyboard" comment="/PlainText: ">ಮೂಲ(ಬೇಸ್) ಕೀಲಿಮಣೆ...</string>
|
||||
<string name="S_Hotkey_None" comment="/PlainText: ">(ಯಾವುದೂ ಇಲ್ಲ)</string>
|
||||
<string name="S_Hotkey_TurnKeymanOff" comment="/PlainText: ">Keyman ಸ್ಥಗಿತಗೊಳಿಸಲು</string>
|
||||
<string name="S_Hotkey_OpenKeyboardMenu" comment="/PlainText: ">ಕೀಲಿಮಣೆ ಆಯ್ಕೆ ಪಟ್ಟಿಯನ್ನು ತೆರೆಯಲು</string>
|
||||
<string name="S_Hotkey_ShowOnScreenKeyboard" comment="/PlainText: ">ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ ಫಲಕ ತೋರಿಸಲು</string>
|
||||
<string name="S_Hotkey_OpenConfiguration" comment="/PlainText: ">ಸಂರಚನೆ(ಕಾನ್ಫಿಗರೇಷನ್) ತೆರೆಯಲು</string>
|
||||
<string name="S_Hotkey_ShowFontHelper" comment="/PlainText: ">ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್) ಸಹಾಯಕ ಫಲಕವನ್ನು ತೋರಿಸಲು</string>
|
||||
<string name="S_Hotkey_ShowCharacterMap" comment="/PlainText: ">ಅಕ್ಷರ ನಕ್ಷೆ ಫಲಕವನ್ನು ತೋರಿಸಲು</string>
|
||||
<string name="S_Hotkey_OpenTextEditor" comment="/PlainText: ">ಪಠ್ಯ ಸಂಪಾದಕವನ್ನು ತೆರೆಯಲು</string>
|
||||
<string name="S_Hotkey_SwitchLanguage" comment="/PlainText: ">ಭಾಷಾ ಬದಲಾವಣೆ ಫಲಕವನ್ನು ತೋರಿಸಲು</string>
|
||||
<string name="S_Hotkey_Control_Title" comment="/PlainText: ">ಸಾಮಾನ್ಯ ನೇರ ಕೀಲಿಗಳು (ಹಾಟ್ಕೀ/ಶಾರ್ಟ್ಕಟ್ಕೀ)</string>
|
||||
<string name="S_Hotkey_Keyboard_Title" comment="/PlainText: ">ಕೀಲಿಮಣೆಗಳು</string>
|
||||
<string name="S_Languages_InstalledLanguage" comment="/PlainText: ">ಸ್ಥಾಪಿಸಲಾಗಿರುವ ಭಾಷೆಗಳು</string>
|
||||
<string name="S_Languages_WindowsLayout" comment="/PlainText: ">ವಿಂಡೋಸ್ ಲೇಔಟ್</string>
|
||||
<string name="S_Languages_KeymanKeyboard" comment="/PlainText: ">ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆ</string>
|
||||
<string name="S_Languages_UseWindowsLayout" comment="/PlainText: ">(ವಿಂಡೋಸ್ ಲೇಔಟ್ ಬಳಸಿ)</string>
|
||||
<string name="S_Button_UpgradeNow" comment="/PlainText: ">ಈಗ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು(ಅಪ್ಗ್ರೇಡ್) ಅನುಸ್ಥಾಪಿಸು!</string>
|
||||
<string name="S_Button_SendSupportRequest" comment="/PlainText: ">ಸಹಾಯ ವಿನಂತಿ ಕಳುಹಿಸು</string>
|
||||
<string name="S_Support_ContactHeading" comment="/PlainText: ">ಕೀಮ್ಯಾನ್ ಬೆಂಬಲವನ್ನು ಸಂಪರ್ಕಿಸು</string>
|
||||
<string name="S_Support_ContactInstructions_Free" comment="/PlainText: ">ಕೀಮ್ಯಾನ್ ಅನ್ನು ಬಳಸುವಾಗ ನಿಮಗೆ ಯಾವುದೇ ಸಮಸ್ಯೆಗಳು ಕಂಡು ಬಂದರೆ, ಕೀಮ್ಯಾನ್ ಸಮುದಾಯ ವೇದಿಕೆಯಲ್ಲಿ (Keyman Community Forum) ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳಿ.</string>
|
||||
<string name="S_Button_CommunitySupport" comment="/PlainText: ">ಕೀಮ್ಯಾನ್ ಸಮುದಾಯ ವೇದಿಕೆ ತೆರೆಯಿರಿ</string>
|
||||
<string name="S_Support_Copyright" comment="/PlainText: ">ಕೃತಿಸ್ವಾಮ್ಯ © ಎಸ್ಐಎಲ್ ಇಂಟರ್ನ್ಯಾಷನಲ್. ಎಲ್ಲ ಹಕ್ಕುಗಳನ್ನು ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ.</string>
|
||||
<string name="S_Support_Version" comment="/PlainText: ">ಆವೃತ್ತಿ</string>
|
||||
<string name="S_Support_EngineVersion" comment="/PlainText: ">ಇಂಗ್ಲೀಷ್ ಆವೃತ್ತಿ</string>
|
||||
<string name="S_Support_UsefulLinks" comment="/PlainText: ">ಉಪಯುಕ್ತ ಕೊಂಡಿಗಳು</string>
|
||||
<string name="S_Button_OnlineSupport" comment="/PlainText: ">ಆನ್ಲೈನ್ ಸಹಾಯ</string>
|
||||
<string name="S_Button_Diagnostics" comment="/PlainText: ">ಡಯಗ್ನೊಸ್ಟಿಕ್</string>
|
||||
<string name="S_Button_CheckForUpdates" comment="/PlainText: ">ನವೀಕರಣಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಿ</string>
|
||||
<string name="S_Button_ProxyConfig" comment="/PlainText: ">ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್ಗಳು...</string>
|
||||
<string name="S_Menu_Diagnostics_Diagnostics" comment="/PlainText: ">ಡಯಗ್ನೊಸ್ಟಿಕ್</string>
|
||||
<string name="S_Menu_Diagnostics_CheckLanguages" comment="/PlainText: ">ಭಾಷಾ ಸಂಯೋಜನೆಗಳನ್ನು (ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು) ಪರಿಶೀಲಿಸು</string>
|
||||
<string name="SKAllLanguageSettingsTestedOK" comment="/PlainText: ">ಮೈಕ್ರೋಸಾಫ್ಟ್ ವಿಂಡೋಸ್ ನಿಮ್ಮ ಭಾಷೆ(ಗಳು) ಗಾಗಿ ಸರಿಯಾಗಿ ಸಂಯೋಜನೆ ಮಾಡಲ್ಪಟ್ಟಿದೆ.</string>
|
||||
<string name="S_DownloadKeyboard_Title" comment="/PlainText: ">keyman.com ಯಿಂದ ಕೀಲಿಮಣೆ ಡೌನ್ಲೋಡ್ ಮಾಡಿ</string>
|
||||
<string name="S_DownloadKeyboard_DownloadOnlyCheckbox" comment="/PlainText: ">ಸ್ಥಾಪಿಸಬೇಡಿ, ಡೌನ್ಲೋಡ್ ಮಾಡಿ</string>
|
||||
<string name="S_InstallKeyboard_Title" comment="/PlainText: ">ಕೀಲಿಮಣೆ/ಪ್ಯಾಕೇಜ್ ಅನುಸ್ಥಾಪಿಸು</string>
|
||||
<string name="S_InstallKeyboard_Tab_Details" comment="/PlainText: ">ವಿವರಗಳು</string>
|
||||
<string name="S_InstallKeyboard_Tab_Readme" comment="/PlainText: ">ಸಂದೇಶವನ್ನು ಓದಿ</string>
|
||||
<string name="S_InstallKeyboard_Button_Install" comment="/PlainText: ">ಅನುಸ್ಥಾಪಿಸು</string>
|
||||
<string name="S_InstallKeyboard_Button_InstallAllUsers" comment="/PlainText: ">ಎಲ್ಲಾ ಬಳಕೆದಾರರಿಗೆ ಅನುಸ್ಥಾಪಿಸು</string>
|
||||
<string name="S_ProxyConfiguration_Title" comment="/PlainText: ">ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್ ಸಂರಚನೆ(ಕಾನ್ಫಿಗರೇಷನ್)</string>
|
||||
<string name="S_ProxyConfiguration_Server" comment="/PlainText: ">ಸರ್ವರ್(server):</string>
|
||||
<string name="S_ProxyConfiguration_Port" comment="/PlainText: ">ಪೊರ್ಟ್(port):</string>
|
||||
<string name="S_ProxyConfiguration_Username" comment="/PlainText: ">ಬಳಕೆದಾರರ ಹೆಸರು(username):</string>
|
||||
<string name="S_ProxyConfiguration_Password" comment="/PlainText: ">ಪ್ರವೇಶಪದ(password):</string>
|
||||
<string name="S_BaseKeyboard_Title" comment="/PlainText: ">ಮೂಲ(ಬೇಸ್) ಕೀಲಿಮಣೆ ಹೊಂದಿಸಿ</string>
|
||||
<string name="S_BaseKeyboard_Text" comment="/PlainText: ">ನೀವು ವಿಂಡೋಸ್ನಲ್ಲಿ ಬಳಸುವ ಮೂಲ(ಬೇಸ್) ಲ್ಯಾಟಿನ್(ಇಂಗೀಷ್) ಸ್ಕ್ರಿಪ್ಟ್ ಕೀಲಿಮಣೆ ಆಯ್ಕೆಮಾಡಿ. ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಯು ನಿಮ್ಮ ಆದ್ಯತೆಯ ವಿನ್ಯಾಸಕ್ಕೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹೊಂದಿಕೊಳ್ಳುತ್ತದೆ.</string>
|
||||
<string name="SKChangeHotkeyTitle" comment="/FormatString: ">ನೇರ ಕೀಲಿ ಬದಲಾಯಿಸು</string>
|
||||
<string name="SKButtonClearHotkey" comment="/FormatString: ">&ನೇರ ಕೀಲಿ ತೆರವುಗೊಳಿಸು</string>
|
||||
<string name="SKSetHotkey_Keyboard" comment="/FormatString: ">ಭಾಷೆ %0:s ಗಾಗಿ ಪ್ರಮಾಣಿತ ನೇರ ಕೀಲಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ ಅಥವಾ 'ಕಸ್ಟಮ್' ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು Ctrl, Shift ಮತ್ತು/ಅಥವಾ Alt ಅನ್ನು ಒತ್ತಿ ಮತ್ತು ನೀವು ಬಯಸಿದ ನೇರ ಕೀಲಿಯನ್ನು ಟೈಪ್ ಮಾಡಿ:</string>
|
||||
<string name="SKSetHotkey_Language" comment="/FormatString: ">ಭಾಷೆ %0:s ಗಾಗಿ ಪ್ರಮಾಣಿತ ಹಾಟ್ಕೀ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ ಅಥವಾ 'ಕಸ್ಟಮ್' ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು Ctrl, Shift ಮತ್ತು/ಅಥವಾ Alt ಅನ್ನು ಒತ್ತಿ ಮತ್ತು ನಿಮ್ಮ ಬಯಸಿದ ಹಾಟ್ ಕೀಲಿಯನ್ನು ಟೈಪ್ ಮಾಡಿ:</string>
|
||||
<string name="SKSetHotkey_Interface" comment="/FormatString: ">ಪ್ರಮಾಣಿತ ನೇರ ಕೀಲಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ ಅಥವಾ 'ಕಸ್ಟಮ್' ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು Ctrl, Shift ಮತ್ತು/ಅಥವಾ Alt ಅನ್ನು ಒತ್ತಿ ಮತ್ತು ನೀವು ಬಯಸಿದ ನೇರ ಕೀಲಿಯನ್ನು ಟೈಪ್ ಮಾಡಿ:</string>
|
||||
<string name="SKUnsafeHotkey" comment="/FormatString: ">ನೇರ ಕೀಲಿ %0:s ಸಾಮಾನ್ಯ ಕೀಲಿಮಣೆ ಬಳಕೆಗೆ ತೊಂದರೆ ಮಾಡುತ್ತದೆ. ನೀವು ಕನಿಷ್ಠ Ctrl ಅಥವಾ Alt ಅನ್ನು ಬಳಸಬೇಕು. ಈಗ ನೀವು ಇದನ್ನು ಬದಲಾಯಿಸಲು ಬಯಸುವಿರಾ?</string>
|
||||
<string name="SKHotkeyConflicts_Keyboard" comment="/FormatString: ">ನೇರ ಕೀಲಿ %0:s ಕೀಲಿಮಣೆ %1:s ಗಾಗಿ ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ. ನೀವು ಮುಂದುವರಿಸಿದರೆ, ಕೀಲಿಮಣೆ %1:s ಗಾಗಿ ನೇರ ಕೀಲಿಯನ್ನು ತೆರವುಗೊಳಿಸಲಾಗುತ್ತದೆ. ಮುಂದುವರಿಸಬೇಕೆ?</string>
|
||||
<string name="SKSelectKeyboardsTitle" comment="/FormatString: ">ಅನುಸ್ಥಾಪಿಸಲು ಕೀಲಿಮಣೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ</string>
|
||||
<string name="SKSelectKeyboardsBlurb" comment="/FormatString: ">ಈ ಪ್ಯಾಕೇಜ್ನಲ್ಲಿ ಎಲ್ಲಾ ಕೀಲಿಮಣೆಗಳನ್ನು ಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಗರಿಷ್ಟ %0:d ಹೆಚ್ಚುವರಿ ಕೀಲಿಮಣೆಗಳನ್ನು ಸ್ಥಾಪಿಸಬಹುದು. ದಯವಿಟ್ಟು ನೀವು ಈ ಪ್ಯಾಕೇಜ್ನಿಂದ ಸ್ಥಾಪಿಸಲು ಬಯಸುವ ಕೀಲಿಮಣೆಯನ್ನು ಮಾತ್ರ ಆಯ್ಕೆ ಮಾಡಿ.</string>
|
||||
<string name="S_Update_Title" comment="/PlainText: ">ನವೀಕರಿಸಲಾದ Keyman ಘಟಕಗಳು ಲಭ್ಯವಿದೆ</string>
|
||||
<string name="S_Update_NewVersionAvailable" comment="/PlainText: ">Keyman ಇದಕ್ಕಾಗಿ ಅಪ್ಡೇಟ್ಗಳು ಲಭ್ಯವಿದೆ</string>
|
||||
<string name="S_Update_NewVersionPrompt" comment="/PlainText: ">ದಯವಿಟ್ಟು ನೀವು ಸ್ಥಾಪಿಸಲು ಬಯಸುವ ನವೀಕರಣಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಿ:</string>
|
||||
<string name="S_Update_InstallQuery" comment="/PlainText: ">ಈ ಪ್ಯಾಚ್ ಅನ್ನು ಇದೀಗ ನೀವು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಮತ್ತು ಸ್ಥಾಪಿಸಲು ಬಯಸುವಿರಾ?</string>
|
||||
<string name="S_Update_DownloadFrom" comment="/PlainText: ">ನೀವು ಈ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಬಹುದು:</string>
|
||||
<string name="S_Update_DownloadQuery" comment="/PlainText: ">ನೀವು ಈಗ ವೆಬ್ಸೈಟ್ಗೆ ಭೇಟಿ ನೀಡಲು ಬಯಸುವಿರಾ?</string>
|
||||
<string name="S_Update_Button_InstallNow" comment="/PlainText: ">ಈಗ ಅನುಸ್ಥಾಪಿಸಿ</string>
|
||||
<string name="S_Update_Button_InstallLater" comment="/PlainText: ">ರದ್ದುಮಾಡಿ</string>
|
||||
<string name="S_Update_OldVersionHead" comment="/PlainText: ">ಹಳೆಯ ಆವೃತ್ತಿ</string>
|
||||
<string name="S_Update_ComponentHead" comment="/PlainText: ">ಅಪ್ಡೇಟ್ ಮಾಡಲಾದ ಘಟಕಗಳು</string>
|
||||
<string name="S_Update_SizeHead" comment="/PlainText: ">ಗಾತ್ರ</string>
|
||||
<string name="SKUpdate_KeymanText" comment="/FormatString: ">Keyman %0:s</string>
|
||||
<string name="SKUpdate_PackageText" comment="/FormatString: ">ಕೀಲಿಮಣೆ %0:s %1:s</string>
|
||||
<string name="SKUpdate_UnableToContact" comment="/FormatString: ">keyman.com ವೆಬ್ಸೈಟ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ - ದಯವಿಟ್ಟು ನೀವು ಸಕ್ರಿಯ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿದ್ದೀರ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಂಡು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</string>
|
||||
<string name="SKUpdate_UnableToContact_Error" comment="/FormatString: ">keyman.com ವೆಬ್ಸೈಟ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ - ದಯವಿಟ್ಟು ನೀವು ಸಕ್ರಿಯ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿರುವಿರಿ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ ಮತ್ತು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. ದೋಷ ಸ್ವೀಕರಿಸಲಾಗಿದೆ: %0:s</string>
|
||||
<string name="SKUpdate_IconTitle" comment="/FormatString: ">Keyman ನವೀಕರಣಗಳು ಲಭ್ಯವಿದೆ</string>
|
||||
<string name="SKUpdate_IconText" comment="/FormatString: ">ನವೀಕರಣಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಮತ್ತು ಅನುಸ್ಥಾಪಿಸಲು ಈ ಐಕಾನ್ ಕ್ಲಿಕ್ ಮಾಡಿ</string>
|
||||
<string name="SKUpdate_IconMenuText" comment="/FormatString: ">ವೀಕ್ಷಿಸಿ ಮತ್ತು ಅನುಸ್ಥಾಪನೆ Keyman ನವೀಕರಣಗಳು</string>
|
||||
<string name="SKUpdate_IconMenuExit" comment="/FormatString: ">ಆನ್ಲೈನ್ ಅಪ್ಡೇಟ್ ಪರಿಶೀಲನೆಗೆ ನಿರ್ಗಮನ</string>
|
||||
<string name="S_Splash_Title" comment="/PlainText: ">Keyman</string>
|
||||
<string name="S_Splash_Name" comment="/PlainText: ">Keyman</string>
|
||||
<string name="S_Splash_Start" comment="/PlainText: ">ಪ್ರಾರಂಭಿಸು</string>
|
||||
<string name="S_Splash_Exit" comment="/PlainText: ">ನಿರ್ಗಮಿಸು</string>
|
||||
<string name="S_Splash_OtherTasks" comment="/PlainText: ">ಇತರೆ ಕಾರ್ಯಗಳು</string>
|
||||
<string name="S_Splash_Configuration" comment="/PlainText: ">ಸಂರಚನೆ</string>
|
||||
<string name="S_Splash_ShowAtStartup" comment="/PlainText: ">ಆರಂಭದಲ್ಲಿ ಈ ಪರದೆಯನ್ನು ತೋರಿಸು</string>
|
||||
<string name="S_Splash_HideAtStartup" comment="/PlainText: ">ಆರಂಭದಲ್ಲಿ ಈ ಪರದೆಯನ್ನು ತೋರಿಸಬೇಡ</string>
|
||||
<string name="S_DisplayIn" comment="/PlainText: ">ಪ್ರದರ್ಶನ ಭಾಷೆ</string>
|
||||
<string name="S_MoreUILanguagesMenu" comment="/PlainText: ">ಇತರ ಪ್ರದರ್ಶನ ಭಾಷೆಗಳನ್ನು ಆನ್ಲೈನ್ನಲ್ಲಿ ಹುಡುಕಿ...</string>
|
||||
<string name="S_ContributeUILanguagesMenu" comment="/PlainText: ">ಪ್ರದರ್ಶನ ಭಾಷೆ ಭಾಷಾಂತರಿಸಲು ಸಹಾಯ ಮಾಡಿ</string>
|
||||
<string name="SKUILanguageName" comment="/FormatString: ">ಕನ್ನಡ</string>
|
||||
<string name="SKUILanguageNameWithEnglish" comment="/FormatString: ">ಕನ್ನಡ (Kannada)</string>
|
||||
<string name="SKLanguageCode" comment="/FormatString: ">kan</string>
|
||||
<string name="SKDefaultLanguageCode" comment="/FormatString: ">en</string>
|
||||
<string name="SKShortApplicationTitle" comment="/FormatString: ">Keyman</string>
|
||||
<string name="SKDialogSelectLanguage" comment="/FormatString: ">ಪ್ರದರ್ಶನ ಭಾಷೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ</string>
|
||||
<string name="SKUILanguageHelp" comment="/FormatString: ">ನೀವು ಬಯಸುವ ಪ್ರದರ್ಶನ ಭಾಷೆಯನ್ನು Keyman ಫಲಕದಲ್ಲಿ ಆಯ್ಕೆಮಾಡಿ.</string>
|
||||
<string name="SKButtonUILanguageDownload" comment="/FormatString: ">&ಆನ್ಲೈನ್ನಲ್ಲಿ ಇನ್ನಷ್ಟು ಭಾಷೆಗಳು...</string>
|
||||
<string name="SKDialogUILanguageCreateTranslation" comment="/FormatString: ">ಹೊಸ ಪ್ರದರ್ಶನ ಭಾಷೆಯನ್ನು ಆನ್ಲೈನ್ನಲ್ಲಿ ಭಾಷಾಂತರ ಮಾಡಿ</string>
|
||||
<string name="S_LangSetup_Title" comment="/PlainText: ">ಭಾಷಾ ಸಂರಚನೆ(ಕಾನ್ಫಿಗರೇಷನ್) ಕಾರ್ಯಗಳು</string>
|
||||
<string name="S_LangSetup_TitleInnerPrefix" comment="/PlainText: ">ಕೊನೆಯಲ್ಲಿ ಸೂಚಿಸಲಾದ ಭಾಷೆಯ ಜೊತೆಯಲ್ಲಿ ಕೆಲಸ ಮಾಡಲು, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಸಂರಚನೆ(ಕಾನ್ಫಿಗರ್) ಮಾಡಿ: </string>
|
||||
<string name="S_LangSetup_BlurbPrefix" comment="/PlainText: ">ಕೆಳಗಿನ ಸಂರಚನಾ ಕಾರ್ಯಗಳ ಸಲುವಾಗಿ ಪೂರ್ಣಗೊಳಿಸಬೇಕು Keyman ಎಂದು ಪತ್ತೆಹಚ್ಚಿದೆ </string>
|
||||
<string name="S_LangSetup_BlurbSuffix" comment="/PlainText: ">ಲಿಪಿ(ಗಳು), ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡಲು:</string>
|
||||
<string name="S_LangSetup_psrtMSOfficeLanguage" comment="/PlainText: ">ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ಭಾಷಾ ಬೆಂಬಲ</string>
|
||||
<string name="S_LangSetup_MoreInfo" comment="/PlainText: ">ಹೆಚ್ಚಿನ ಮಾಹಿತಿ...</string>
|
||||
<string name="S_LangSetup_Ask" comment="/PlainText: ">ಈ ಕಾರ್ಯಗಳನ್ನು Keyman ಈಗ ಪೂರ್ಣಗೊಳಿಸಲು ಬಯಸುತ್ತೀರಾ?</string>
|
||||
<string name="S_LangSetup_SaveDisabledItems" comment="/PlainText: ">ಇದನ್ನು ಮತ್ತೊಮ್ಮೆ ಕೇಳಬೇಡ</string>
|
||||
<string name="S_Button_ResetHints" comment="/PlainText: ">ಸುಳಿವುಗಳನ್ನು ಮರುಹೊಂದಿಸು</string>
|
||||
<string name="SKHintsReset" comment="/PlainText: ">ಎಲ್ಲಾ ಸುಳಿವು ಸಂದೇಶಗಳನ್ನು ಮರುಹೊಂದಿಸಲಾಗಿದೆ ಮತ್ತು ಮತ್ತೆ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ.</string>
|
||||
<string name="HintTitle_KH_EXITPRODUCT" comment="/HintTitle: ">ನಿರ್ಗಮನ Keyman?</string>
|
||||
<string name="Hint_KH_EXITPRODUCT" comment="/Hint: ">ನೀವು Keyman ನಿರ್ಗಮಸಲು ಬಯಸುತ್ತೀರಾ?
|
||||
ವಿಂಡೋಸ್ ಕೀಲಿಮಣೆಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ.
|
||||
ಆದರೆ ನೀವು Keyman ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸುವವರೆಗೆ ಕೀಮ್ಯಾನ್ ಕೀಲಿಮಣೆಗಳು ಕ್ರಿಯಾತ್ಮಕವಾಗಿರುವುದಿಲ್ಲ.</string>
|
||||
<string name="HintTitle_KH_CLOSEOSK" comment="/HintTitle: ">ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ ಮುಚ್ಚಲಾಗಿದೆ</string>
|
||||
<string name="Hint_KH_CLOSEOSK" comment="/Hint: ">ನೀವು "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ"ಅನ್ನು ಮುಚ್ಚಿದ್ದೀರಿ. Keyman ಇನ್ನೂ ಚಾಲನೆಯಲ್ಲಿದೆ. Keyman ಚಿತ್ರ(ಐಕಾನ್) ಮೇಲೆ ನೀವು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ಆಯ್ಕೆಮಾಡುವ ಮೂಲಕ; "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ"ಅನ್ನು ತೆರೆಯಬಹುದು.</string>
|
||||
<string name="S_HintDialog_DontShowHintAgain" comment="/PlainText: ">ಈ ಸುಳಿವನ್ನು ಮತ್ತೆ ತೋರಿಸಬೇಡ</string>
|
||||
<string name="S_HelpTitle" comment="/PlainText: ">Keyman ಸಹಾಯ</string>
|
||||
<string name="S_Help_Tutorial" comment="/PlainText: ">ಪ್ರಾರಂಭಿಸಿ</string>
|
||||
<string name="S_Help_Product" comment="/PlainText: ">ಸಹಾಯ ಪರಿವಿಡಿ</string>
|
||||
<string name="S_Help_Keyboard_Prefix" comment="/PlainText: ">"</string>
|
||||
<string name="S_Help_Keyboard_Suffix" comment="/PlainText: ">" ಕೀಲಿಮಣೆಗೆ ಸಹಾಯ</string>
|
||||
<string name="S_Toolbar_ViewOnScreenKeyboard" comment="/PlainText: ">"ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ತೆರೆ</string>
|
||||
<string name="S_Toolbar_ViewFontHelper" comment="/PlainText: ">ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್) ಸಹಾಯಕ ಫಲಕವನ್ನು ತೆರೆ</string>
|
||||
<string name="S_Toolbar_ViewCharacterMap" comment="/PlainText: ">ಅಕ್ಷರ ನಕ್ಷೆ ಫಲಕವನ್ನು ತೆರೆ</string>
|
||||
<string name="S_Menu_SwitchKeymanOff" comment="/PlainText: ">Keyman ಬೆಳಕನ್ನು ಮುಚ್ಚಿ</string>
|
||||
<string name="S_Toolbar_OpenConfiguration" comment="/PlainText: ">Keyman ಸಂರಚನೆ(ಕಾನ್ಫಿಗರೇಷನ್) ತೆರೆ</string>
|
||||
<string name="S_Toolbar_OpenHelp" comment="/PlainText: ">ಸಹಾಯ ತೆರೆ</string>
|
||||
<string name="S_Toolbar_CloseOnScreenKeyboard" comment="/PlainText: ">"ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ಮುಚ್ಷು</string>
|
||||
<string name="S_Menu_OnScreenKeyboard" comment="/PlainText: ">&ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ</string>
|
||||
<string name="S_Menu_Help" comment="/PlainText: ">&ಸಹಾಯ...</string>
|
||||
<string name="S_Menu_Exit" comment="/PlainText: ">&ನಿರ್ಗಮನ</string>
|
||||
<string name="SKMenu_NoKeyboardsInstalled" comment="/PlainText: ">ನೀವು ಯಾವುದೇ ಕೀಲಿಮಣೆಯನ್ನು ಅನುಸ್ಥಾಪಿಸಿಲ್ಲ. ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಸ್ಥಾಪಿಸಲು "ಸಂರಚನೆ"(ಕಾನ್ಫಿಗರೇಷನ್)ನಲ್ಲಿ "ಡೌನ್ಲೋಡ್ ಕೀಲಿಮಣೆ" ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ.</string>
|
||||
<string name="S_OSKContext_FadeWhenInactive" comment="/PlainText: ">ನಿಷ್ಕ್ರಿಯವಾಗಿದ್ದಾಗ ಫೇಡ್ ಮಾಡಿ</string>
|
||||
<string name="S_OSKContext_ShowToolbar" comment="/PlainText: ">ಉಪಕರಣ ಪಟ್ಟಿ(ಟೂಲ್ಬಾರ್) ತೋರಿಸು</string>
|
||||
<string name="S_OSKContext_SaveAsWebPage" comment="/PlainText: ">ವೆಬ್ ಪುಟದಂತೆ ಉಳಿಸು...</string>
|
||||
<string name="S_OSKContext_Print" comment="/PlainText: ">ಪ್ರಿಂಟ್...</string>
|
||||
<string name="SKApplicationTitle" comment="/FormatString: ">Keyman</string>
|
||||
<string name="SKSplashVersion" comment="/FormatString: ">ಆವೃತ್ತಿ %0:s</string>
|
||||
<string name="SKButtonHelp" comment="/FormatString: ">ಸಹಾಯ</string>
|
||||
<string name="SKButtonPrint" comment="/FormatString: ">&ಮುದ್ರಿಸು....</string>
|
||||
<string name="SKButtonDownload" comment="/FormatString: ">&ಡೌನ್ಲೋಡ್...</string>
|
||||
<string name="SKPackageAlreadyInstalled" comment="/FormatString: ">%0:s ಹೆಸರಿನ ಪ್ಯಾಕೇಜ್ಅನ್ನು ಈಗಾಗಲೇ ಸ್ಥಾಪಿಸಲಾಗಿದೆ. ನೀವು ಅದನ್ನು ಅಸ್ಥಾಪಿಸಲು ಹಾಗು ಹೊಸದನ್ನು ಅನುಸ್ಥಾಪಿಸಲು ಬಯಸುವಿರಾ?</string>
|
||||
<string name="SKKeyboardAlreadyInstalled" comment="/FormatString: ">%0:s ಹೆಸರಿನ ಕೀಲಿಮಣೆ ಈಗಾಗಲೇ ಅನುಸ್ಥಾಪಿಸಲಾಗಿದೆ. ನೀವು ಅದನ್ನು ಅಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ ಹಾಗು ಹೊಸ ಕೀಲಿಮಣೆಯನ್ನು ಸ್ಥಾಪಿಸಲಾಗುವುದು. ಮುಂದುವರಿಸಬೇಕೆ?</string>
|
||||
<string name="SKKeyboardPartOfPackage" comment="/FormatString: ">'%0:s' ಕೀಲಿಮಣೆ '%1:s' ಪ್ಯಾಕೇಜಿನ ಭಾಗವಾಗಿದೆ. ನೀವು ಸಂಪೂರ್ಣ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಅಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ. ಮುಂದುವರಿಸಬೇಕೇ?</string>
|
||||
<string name="SKInstallOnlyAsAdmin" comment="/FormatString: ">ನಿರ್ವಾಹಕರಾಗಿದ್ದರೆ(ಅಡ್ಮಿನಿಸ್ಟ್ರೇಟರ್) ಮಾತ್ರ ಕೀಲಿಮಣೆಗಳನ್ನು ಅನುಸ್ಥಾಪಿಸಿ ಅಥವಾ ಅಸ್ಥಾಪಿಸಬಹುದು. ಸಾಮಾನ್ಯ ಬಳಕೆದಾರನಾಗಿ ಬಳಸಲು ಭಾಷೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ನಿಯಂತ್ರಣ ಫಲಕವನ್ನು (control panel) ಬಳಸಿ.</string>
|
||||
<string name="SKSurrogatesRequiresRestart" comment="/FormatString: ">ಪರ್ಯಾಯ ಸಂಯೋಜನೆಗಳನ್ನು (ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು) ಬದಲಾಯಿಸಲು ವಿಂಡೋಸ್ ಅನ್ನು ಪುನರಾರಂಭಿಸಬೇಕಾಗಿದೆ. ನೀವು ಈಗ ವಿಂಡೋಸ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಲು ಬಯಸುವಿರಾ?</string>
|
||||
<string name="SKPackageDoesNotIncludeWelcome" comment="/FormatString: ">ಈ '%0:s' ಪ್ಯಾಕೇಜ್ ಅಥವಾ ಕೀಲಿಮಣೆ ಯಾವುದೇ ಪರಿಚಯಾತ್ಮಕ ಸಹಾಯವನ್ನು ಒಳಗೊಂಡಿಲ್ಲ.</string>
|
||||
<string name="SKOSNotSupported" comment="/FormatString: ">ಈ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ನಲ್ಲಿ ನಮ್ಮ ತಂತ್ರಾಂಶ ಕೆಲಸ ಮಾಡುವುದಿಲ್ಲ.</string>
|
||||
<string name="SKActivation_Success" comment="/FormatString: ">ನಿಮ್ಮ ಪರವಾನಗಿ ಯಶಸ್ವಿಯಾಗಿ ಸಕ್ರಿಯಗೊಂಡಿದೆ.</string>
|
||||
<string name="SKOnlineHelpFile" comment="/FormatString: ">KeymanDesktop.chm</string>
|
||||
<string name="SKCouldNotFindHelp" comment="/FormatString: ">ಸಹಾಯ ಕಡತ $(SKOnlineHelpFile) ಕಂಡುಬಂದಿಲ್ಲ.</string>
|
||||
<string name="SKDamagedKeyboard" comment="/FormatString: "><ಹಾನಿಗೊಳಗಾದ ಕೀಲಿಮಣೆ></string>
|
||||
<string name="SKANSIEncoding" comment="/FormatString: ">ಕೋಡ್ಪುಟ</string>
|
||||
<string name="SKUnicodeEncoding" comment="/FormatString: ">ಯೂನಿಕೋಡ್</string>
|
||||
<string name="SKDownloadProgress_Title" comment="/FormatString: ">ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ</string>
|
||||
<string name="SKUninstallOnScreenKeyboard" comment="/FormatString: ">%0:s ಕೀಲಿಮಣೆಯ "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ ಫಲಕ" ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</string>
|
||||
<string name="SKUninstallKeyboard" comment="/FormatString: ">%0:s ಕೀಲಿಮಣೆಯನ್ನು ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</string>
|
||||
<string name="SKUninstallPackage" comment="/FormatString: ">%0:s ಪ್ಯಾಕೇಜ್ಅನ್ನು ಹಾಗು %1:s ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳನ್ನು ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? </string>
|
||||
<string name="SKUninstallPackageFonts" comment="/FormatString: ">ಕೆಳಗಿನ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳನ್ನು ಸಹ ಅಸ್ಥಾಪಿಸಲ್ಪಡುತ್ತವೆ: %0:s.</string>
|
||||
<string name="SKActivation_OnlineNow" comment="/FormatString: ">ಪರವಾನಗಿ ಸಂಖ್ಯೆ %0:s ಯೊಂದಿಗೆ ಈಗ ನೀವು ಆನ್ಲೈನ್ನಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸಲು $(SKShortApplicationTitle) ಬಯಸುತ್ತೀರಾ? ನೀವು "ಇಲ್ಲ" ಅಥವಾ "ರದ್ದುಮಾಡಿ" ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡದಿದ್ದರೆ, ಪರ್ಯಾಯ ಸಕ್ರಿಯಗೊಳಿಸುವ ವಿಧಾನಗಳಿಂದ ನೀವು ಆಯ್ಕೆ ಮಾಡಬಹುದು.</string>
|
||||
<string name="SKUnicodeData_Build" comment="/FormatString: ">ಕ್ಯಾರೆಕ್ಟರ್ ಮ್ಯಾಪ್ ಅನ್ನು ಬಳಸಬಹುದಾದ ಮೊದಲು ನಿರ್ಮಿಸಬೇಕಾದ ಪಾತ್ರಗಳ ದತ್ತಾಂಶ ಹೊಂದಿದೆ. ಈಗ ನಿರ್ಮಿಸಲು ಬಯಸುವಿರಾ?</string>
|
||||
<string name="SKUnicodeData_DatabaseCouldNotBeDeleted" comment="/FormatString: ">ಪುನರ್ನಿರ್ಮಾಣಕ್ಕಾಗಿ ಯೂನಿಕೋಡ್ ಕ್ಯಾರೆಕ್ಟರ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಅಳಿಸಲಾಗಲಿಲ್ಲ. ದೋಷ ವಿವರಗಳು: %0:s</string>
|
||||
<string name="SKUnicodeData_CouldNotCreateDatabase" comment="/FormatString: ">ಯುನಿಕೋಡ್ ಕ್ಯಾರೆಕ್ಟರ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ ಮತ್ತು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ದೋಷ ವಿವರಗಳು: %0:s</string>
|
||||
<string name="SKUnicodeData_DatabaseLoadFailedRebuild" comment="/FormatString: ">ಯುನಿಕೋಡ್ ಪಾತ್ರ ಡೇಟಾಬೇಸ್ ಯಶಸ್ವಿಯಾಗಿ ಲೋಡ್ ಮಾಡಲಿಲ್ಲ (%0:s). ಇದೀಗ ಅದನ್ನು ಮರುನಿರ್ಮಾಣ ಮಾಡುವುದೇ?</string>
|
||||
<string name="SKErrorActivatingBrowser" comment="/FormatString: ">ಬ್ರೌಸರ್ ಅನ್ನು ಅಥವಾ ಈ URL ಗಾಗಿ ಇಮೇಲ್ ಪ್ರೋಗ್ರಾಂ ಸಕ್ರಿಯಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</string>
|
||||
<string name="SKCouldNotPrintKeyboard" comment="/FormatString: ">ಕೀಲಿಮಣೆ ಯಶಸ್ವಿಯಾಗಿ ಮುದ್ರಿಸಲಾಗಲಿಲ್ಲ. ವೆಬ್ ಪುಟಕ್ಕೆ ಉಳಿಸಲು ಮತ್ತು ಮುದ್ರಿಸಲು ದಯವಿಟ್ಟು ಬೇರೆ ಪ್ರಯತ್ನಿಸಿ.</string>
|
||||
<string name="SKCannotStartProduct" comment="/FormatString: ">Keyman ಪ್ರಾರಂಭಿಸಲು ವಿಫಲವಾಗಿದೆ. ಮುಂದುವರೆಯುವ ಮೊದಲು keyman.exe ಅನ್ನು ಆರಂಭಿಸಲು ಅನುಮತಿಸಲಾಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ದಯವಿಟ್ಟು ನಿಮ್ಮ ಭದ್ರತೆ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು(security settings) ಪರಿಶೀಲಿಸಿ. ಹಿಂದಿರುಗಿದ ದೋಷವೆಂದರೆ: "%0:s". ಈಗ ನೀವು ಪ್ರಯತ್ನಿಸಿ ಹಾಗೂ ಮತ್ತೆ Keyman ಪ್ರಾರಂಭಿಸಲು ಬಯಸುವಿರಾ?</string>
|
||||
<string name="SKDebuggingWarning" comment="/FormatString: ">Keyman ಡೀಬಗ್ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ ಡೆಸ್ಕ್ಟಾಪ್ನಲ್ಲಿ keymanlog\system.log ಕರೆಯಲಾಗುವ ಪಠ್ಯ ಫೈಲ್ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ. ಈ ಫೈಲ್ ಅನ್ನು ಓದುವ ಅಥವಾ ಅಳಿಸುವ ಮೊದಲು ನೀವು Keyman ನಿರ್ಗಮಿಸಬೇಕು. ಎಚ್ಚರಿಕೆ: ಈ ಫೈಲ್ ಬಹಳ ವೇಗವಾಗಿ ಬೆಳೆಯುತ್ತದೆ. ಡೀಬಗ್ ಮಾಡುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದರಿಂದ ನಿಮ್ಮ ಸಿಸ್ಟಮ್ ಅನ್ನು ನಿಧಾನಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ತಾಂತ್ರಿಕ ಬೆಂಬಲದಿಂದ ಸಲಹೆ ನೀಡಿದರೆ ಮಾತ್ರ ಮಾಡಬೇಕು. ಖಾಸಗಿ ಎಚ್ಚರಿಕೆ: ನೀವು ಟೈಪ್ ಮಾಡುವ ಎಲ್ಲಾ ಕೀಸ್ಟ್ರೋಕ್ಗಳನ್ನು ಡೀಬಗ್ ಲಾಗ್ಫೈಲ್ ದಾಖಲಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ. ಡೀಬಗ್ ಮಾಡುವಿಕೆ ಅಥವಾ ಡಯಗ್ನೊಸ್ಟಿಕ್ ಆಗುವ ಅವಧಿಯನ್ನು ನೀವು ಮಾತ್ರ ಡೀಬಗ್ ಲಾಗ್ಆನ್ ಮಾಡಬೇಕು, ಮತ್ತು ಸಾಧ್ಯವಾದಷ್ಟು ಬೇಗ [desktop]\keymanlog\system.log ಫೈಲ್ ಅಳಿಸಿ.</string>
|
||||
<string name="SKLangCheck_Office" comment="/FormatString: ">%1:s ಗೆ %0:s ಸಂಪಾದನೆ ಬೆಂಬಲವನ್ನು ಸೇರಿಸಿ</string>
|
||||
<string name="SKLangCheck_Office_Office2000" comment="/FormatString: ">ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ೨೦೦೦</string>
|
||||
<string name="SKLangCheck_Office_OfficeXP" comment="/FormatString: ">ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ಎಕ್ಸ್ ಪಿ</string>
|
||||
<string name="SKLangCheck_Office_Office2003" comment="/FormatString: ">ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ೨೦೦೩</string>
|
||||
<string name="SKLangCheck_Office_Office2007" comment="/FormatString: ">ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ೨೦೦೭</string>
|
||||
<string name="SKLangCheck_Office_Office2010" comment="/FormatString: ">ಮೈಕ್ರೋಸಾಫ್ಟ್ ಆಫೀಸ್ ೨೦೧೦</string>
|
||||
<string name="SKLangCheck_WindowsLanguage_Link" comment="/FormatString: ">ಭಾಷೆ %0:s ಅನ್ನು ಕೀಮನ್ ಕೀಲಿಮಣೆ %1:s ಗೆ ಸೇರಿಸು</string>
|
||||
<string name="SKLangCheck_WindowsLanguage_Install" comment="/FormatString: ">ಭಾಷೆ %0:s ಅನ್ನು ಸ್ಥಾಪಿಸಿ ಮತ್ತು ಕೀಮನ್ ಕೀಲಿಮಣೆ %1:s ಗೆ ಸೇರಿಸು</string>
|
||||
<string name="S_OSK_FontHelper_PleaseWait1" comment="/HTML: ">ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ, ನಿಮ್ಮ </string>
|
||||
<string name="S_OSK_FontHelper_PleaseWait2" comment="/HTML: "> ಕೀಲಿಮಣೆ ಜೊತೆ ಕೆಲಸ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳುನ್ನು Keyman ಹುಡುಕುತ್ತಿದೆ.</string>
|
||||
<string name="S_OSK_FontHelper_NonUnicode2" comment="/HTML: ">ಯುನಿಕೋಡ್ ಕೀಲಿಮಣೆ ಅಲ್ಲ. ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸ್ಥಾಪಿಸಲಾಗುವುದಿಲ್ಲ. ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳ ಮಾಹಿತಿಗಾಗಿ ದಯವಿಟ್ಟು ಕೀಲಿಮಣೆ ದಸ್ತಾವೇಜನ್ನು(documentation) ಪರಿಶೀಲಿಸಿ.</string>
|
||||
<string name="S_OSK_FontHelper_MatchedFonts1" comment="/HTML: ">ಕೆಳಗಿನ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ </string>
|
||||
<string name="S_OSK_FontHelper_MatchedFonts2" comment="/HTML: ">ಕೀಲಿಮಣೆ:</string>
|
||||
<string name="S_OSK_FontHelper_PossibleFonts" comment="/HTML: ">ಕೆಳಗಿನ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು ಸಹ ಕೆಲಸ ಮಾಡಬಹುದು:</string>
|
||||
<string name="S_OSK_FontHelper_PossibleFontsOnly1" comment="/HTML: ">ಕೆಳಗಿನ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು </string>
|
||||
<string name="S_OSK_FontHelper_PossibleFontsOnly2" comment="/HTML: "> ಕೀಲಿಮಣೆಯ ಜೊತೆ ಮಾಡಬಹುದು</string>
|
||||
<string name="S_OSK_FontHelper_NoFonts1a" comment="/HTML: ">ನಿಮ್ಮ ಸಿಸ್ಟಂನಲ್ಲಿ ಯಾವುದೇ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು </string>
|
||||
<string name="S_OSK_FontHelper_NoFonts1b" comment="/HTML: "> ಕೀಲಿಮಣೆಯ ಜೊತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆಯೆಂದು ಕಂಡುಬಂದಿಲ್ಲ. ಈ ಕೀಲಿಮಣೆಗಾಗಿ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳುನ್ನು ಹುಡುಕಲು, ದಯವಿಟ್ಟು ದಾಖಲೆಯನ್ನು ಪರಿಶೀಲಿಸಿ.</string>
|
||||
<string name="S_OSK_FontHelper_NoKeyboards" comment="/HTML: ">ನೀವು ಯಾವುದೇ ಕೀಲಿಮಣೆಯನ್ನು ಅನುಸ್ಥಾಪಿಸಿಲ್ಲ ಅಥವಾ ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ. ಕೀಲಿಮಣೆ ವಿನ್ಯಾಸವನ್ನು ಅನುಸ್ಥಾಪಿಸಲು Keyman "ಸಂರಚನೆ"(ಕಾನ್ಫಿಗರೇಷನ್)ನಲ್ಲಿ "ಡೌನ್ಲೋಡ್ ಕೀಲಿಮಣೆ" ಗುಂಡಿಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ.</string>
|
||||
<string name="S_OSK_FontHelper_ChooseKeyboard" comment="/HTML: ">ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳನ್ನು ಹುಡುಕಲು, ದಯವಿಟ್ಟು ಒಂದು Keyman ಕೀಲಿಮಣೆ ಆಯ್ಕೆಮಾಡಿ ಆಯ್ಕೆಮಾಡಿ.</string>
|
||||
<string name="S_OSK_Hint_Title" comment="/Plain Text: ">ಸುಳಿವು:</string>
|
||||
<string name="S_OSK_Hint1" comment="/Plain Text: ">ವಿಂಡೋ ಅಂಚಿನಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು ಎಳೆಯುವುದರ ಮೂಲಕ "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ಗಾತ್ರ ಬದಲಾಯಿಸಿ</string>
|
||||
<string name="S_OSK_Hint2" comment="/Plain Text: ">"Keyman" ಶೀರ್ಷಿಕೆ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು ಎಳೆಯುವ ಮೂಲಕ "ತೆರೆಯ ಮೇಲಿನ ಕೀಲಿಮಣೆ" ಅನ್ನು ಸರಿಸಿ.</string>
|
||||
<string name="S_OSK_Hint3a" comment="/Plain Text: ">ನಿಮ್ಮ ದಾಖಲೆಯಲ್ಲಿ ಯಾವುದೇ ಯೂನಿಕೋಡ್ ಅಕ್ಷರವನ್ನು ಸೇರಿಸಿ </string>
|
||||
<string name="S_OSK_Hint3b" comment="/Plain Text: ">ಅಕ್ಷರ ನಕ್ಷೆ ಉಪಕರಣ</string>
|
||||
<string name="S_OSK_Hint4a" comment="/Plain Text: ">ನಿಮ್ಮ ಭಾಷೆಗೆ ಯಾವ ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್)/ಗಳು ಕಾರ್ಯ ನಿರ್ವಹಿಸುವೆಂಬುದನ್ನು ಕಂಡುಹಿಡಿಯಲು</string>
|
||||
<string name="S_OSK_Hint4b" comment="/Plain Text: ">ಅಕ್ಷರ ಶೈಲಿ(ಫಾಂಟ್) ಸಹಾಯಕ ಉಪಕರಣ</string>
|
||||
<string name="S_OSK_Hint5a" comment="/Plain Text: ">ಕೀಲಿಮಣೆಯ ಇನ್ನಷ್ಟು ಸಹಾಯ ಪಡೆಯಲು, ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ</string>
|
||||
<string name="S_OSK_Hint5b" comment="/Plain Text: ">ಕೀಲಿಮಣೆ ಬಳಕೆ ಗುಂಡಿ</string>
|
||||
<string name="S_Menu_FontHelper" comment="/PlainText: ">ಅಕ್ಷ&ರ ಶೈಲಿ (ಫಾಂಟ್) ಸಹಾಯಕ</string>
|
||||
<string name="S_Menu_CharacterMap" comment="/PlainText: ">&ಅಕ್ಷರ ನಕ್ಷೆ</string>
|
||||
<string name="S_Menu_TextEditor" comment="/PlainText: ">&ಪಠ್ಯ ಸಂಪಾದಕ</string>
|
||||
<string name="S_Menu_Configuration" comment="/PlainText: ">ಸಂರಚನೆ (&ಕಾನ್ಫಿಗರೇಷನ್)</string>
|
||||
<string name="SKTextEditorCaption" comment="/FormatString: ">ಪಠ್ಯ ಸಂಪಾದಕ - Keyman</string>
|
||||
</resources>
|
||||
|
|
@ -46,6 +46,10 @@
|
|||
<string name="SKButtonCancel" comment="Cancel button in message boxes">Cancel</string>
|
||||
<!-- Context: Formatted Messages -->
|
||||
<!-- String Type: FormatString -->
|
||||
<!-- Introduced: 16.0.47 -->
|
||||
<string name="SKAddremove" comment="Add or Remove languages button opens a dialog window">Add/remove language...</string>
|
||||
<!-- Context: Formatted Messages -->
|
||||
<!-- String Type: FormatString -->
|
||||
<!-- Introduced: 8.0.330.0 -->
|
||||
<string name="SKBalloonClickToSelectKeyboard" comment="Balloon that shows when Keyman icon is first shown during the tutorial">Click this icon to select a keyboard</string>
|
||||
<!-- Context: Formatted Messages -->
|
||||
|
|
@ -64,6 +68,18 @@
|
|||
<!-- String Type: PlainText -->
|
||||
<!-- Introduced: 7.0.239.0 -->
|
||||
<string name="S_Caption_Help" comment="Configuration dialog link to Help">Help</string>
|
||||
<!-- Context: Configuration Dialog -->
|
||||
<!-- String Type: PlainText -->
|
||||
<!-- Introduced: 16.0.47.0 -->
|
||||
<string name="S_Caption_Uninstall" comment="Configuration dialog link to Uninstall Keyboard">Uninstall</string>
|
||||
<!-- Context: Configuration Dialog -->
|
||||
<!-- String Type: PlainText -->
|
||||
<!-- Introduced: 16.0.47.0 -->
|
||||
<string name="S_Caption_Enable" comment="Configuration dialog link to Enable Keyboard">Enable</string>
|
||||
<!-- Context: Configuration Dialog -->
|
||||
<!-- String Type: PlainText -->
|
||||
<!-- Introduced: 16.0.47.0 -->
|
||||
<string name="S_Caption_Disable" comment="Configuration dialog link to Disable Keyboard">Disable</string>
|
||||
<!-- Context: Configuration Dialog - Tab names -->
|
||||
<!-- String Type: PlainText -->
|
||||
<!-- Introduced: 7.0.230.0 -->
|
||||
|
|
@ -174,6 +190,10 @@
|
|||
<string name="S_Languages_Install" comment="Add language profile">Add language</string>
|
||||
<!-- Context: Configuration Dialog - Captions -->
|
||||
<!-- String Type: PlainText -->
|
||||
<!-- Introduced: 16.0.47 -->
|
||||
<string name="S_Languages_Addremove" comment="Title for dialog to add or remove languages for keyboard layout">Add/remove language</string>
|
||||
<!-- Context: Configuration Dialog - Captions -->
|
||||
<!-- String Type: PlainText -->
|
||||
<!-- Introduced: 7.0.230.0 -->
|
||||
<string name="S_Caption_OnScreenKeyboard" comment="Term for the On Screen Keyboard">On Screen Keyboard:</string>
|
||||
<!-- Context: Configuration Dialog - Captions -->
|
||||
|
|
@ -223,7 +243,7 @@
|
|||
<!-- Context: Configuration Dialog - Keyboard Layouts tab -->
|
||||
<!-- String Type: PlainText -->
|
||||
<!-- Introduced: 8.0.287.0 -->
|
||||
<string name="S_Menu_Options" comment="KL option button submenu - keyboard options">Keyboard options</string>
|
||||
<string name="S_Menu_Options" comment="KL option button submenu - keyboard options">Keyboard options...</string>
|
||||
<!-- Context: Configuration Dialog - Keyboard Layouts tab -->
|
||||
<!-- String Type: PlainText -->
|
||||
<!-- Introduced: 7.0.230.0 -->
|
||||
|
|
@ -341,7 +361,7 @@
|
|||
<!-- Context: Configuration Dialog - Hotkeys tab -->
|
||||
<!-- String Type: PlainText -->
|
||||
<!-- Introduced: 7.0.230.0 -->
|
||||
<string name="S_Hotkey_None" comment="Hotkey - text used when no hotkey set for an option">(none)</string>
|
||||
<string name="S_Hotkey_None" comment="Hotkey - text used when no hotkey set">(no hotkey)</string>
|
||||
<!-- Context: Configuration Dialog - Hotkeys tab -->
|
||||
<!-- String Type: PlainText -->
|
||||
<!-- Introduced: 7.0.230.0 -->
|
||||
|
|
@ -622,11 +642,11 @@ keyboard that you use in Windows. Keyman keyboards will adapt automatically to
|
|||
<!-- Context: _LanguageInfo -->
|
||||
<!-- String Type: FormatString -->
|
||||
<!-- Introduced: 7.0.230.0 -->
|
||||
<string name="SKUILanguageName" comment="User interface language name in the UI language">English</string>
|
||||
<string name="SKUILanguageName" comment="User interface language name in the UI language">Português do Brasil</string>
|
||||
<!-- Context: _LanguageInfo -->
|
||||
<!-- String Type: FormatString -->
|
||||
<!-- Introduced: 7.0.230.0 -->
|
||||
<string name="SKUILanguageNameWithEnglish" comment="UI language name in the UI language with the English name in parentheses (this message is used when the user gets stuck in a strange UI language)">English</string>
|
||||
<string name="SKUILanguageNameWithEnglish" comment="UI language name in the UI language with the English name in parentheses (this message is used when the user gets stuck in a strange UI language)">Português do Brasil (Brazilian Portuguese)</string>
|
||||
<!-- Context: _LanguageInfo -->
|
||||
<!-- String Type: FormatString -->
|
||||
<!-- Introduced: 7.0.230.0 -->
|
||||
|
|
|
|||
|
|
@ -150,7 +150,7 @@
|
|||
<xsl:with-param name="id">add_remove_<xsl:value-of select="id"/></xsl:with-param>
|
||||
<xsl:with-param name="className">kbd_button</xsl:with-param>
|
||||
<xsl:with-param name="caption"><xsl:value-of select="$locale/string[@name='SKAddremove']"/></xsl:with-param>
|
||||
<xsl:with-param name="command">javascript:showModifyLink('<xsl:value-of select="../../id" />')</xsl:with-param>
|
||||
<xsl:with-param name="command">javascript:showModifyLink('<xsl:value-of select="id" />')</xsl:with-param>
|
||||
<xsl:with-param name="disabled">
|
||||
<xsl:choose>
|
||||
<xsl:when test='loaded'>0</xsl:when>
|
||||
|
|
@ -382,10 +382,10 @@
|
|||
|
||||
|
||||
<div class='modify'>
|
||||
<xsl:attribute name='id'>modify-<xsl:value-of select="../../id" /></xsl:attribute>
|
||||
<xsl:attribute name='id'>modify-<xsl:value-of select="id" /></xsl:attribute>
|
||||
<xsl:attribute name="data-name"><xsl:value-of select="name"/></xsl:attribute>
|
||||
<div class='modify_back'>
|
||||
<xsl:attribute name="onclick">return hideModifyLink('<xsl:value-of select="../../id" />')</xsl:attribute>
|
||||
<xsl:attribute name="onclick">return hideModifyLink('<xsl:value-of select="id" />')</xsl:attribute>
|
||||
</div>
|
||||
<div class='modify_popup'>
|
||||
|
||||
|
|
@ -405,7 +405,7 @@
|
|||
<xsl:call-template name="button">
|
||||
<xsl:with-param name="className">kbd_button</xsl:with-param>
|
||||
<xsl:with-param name="caption"><xsl:value-of select="$locale/string[@name='S_Button_Close']"/></xsl:with-param>
|
||||
<xsl:with-param name="onclick">return hideModifyLink('<xsl:value-of select="../../id" />')</xsl:with-param>
|
||||
<xsl:with-param name="onclick">return hideModifyLink('<xsl:value-of select="id" />')</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
78
windows/src/desktop/setup/locale/kn/strings.xml
Normal file
78
windows/src/desktop/setup/locale/kn/strings.xml
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="ssLanguageName" comment="User interface language name in the UI language">ಕನ್ನಡ</string>
|
||||
<string name="ssApplicationTitle">$APPNAME $VERSION ಸೆಟ್ಅಪ್</string>
|
||||
<string name="ssTitle">$APPNAME $VERSION ಸ್ಥಾಪಿಸಿ</string>
|
||||
<string name="ssInstallSuccess">$APPNAME $VERSION ಯಶಸ್ವಿಯಾಗಿ ಸ್ಥಾಪಿಸಲಾಗಿದೆ.</string>
|
||||
<string name="ssCancelQuery">$APPNAME ಸ್ಥಾಪನೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</string>
|
||||
<string name="ssBootstrapExtractingBundle">ಕಡತಗಳನ್ನು ಹೊರತೆಗೆಯಲಾಗುತ್ತಿದೆ...</string>
|
||||
<string name="ssBootstrapCheckingPackages">ಪ್ಯಾಕೇಜ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ...</string>
|
||||
<string name="ssBootstrapCheckingForUpdates">ನವೀಕರಣಗಳಿಗಾಗಿ ಆನ್ಲೈನ್ನಲ್ಲಿ ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ...</string>
|
||||
<string name="ssBootstrapCheckingInstalledVersions">ಸ್ಥಾಪಿಸಲಾದ ಆವೃತ್ತಿಗಳನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ...</string>
|
||||
<string name="ssBootstrapReady">ಪೂರ್ಣಗೊಳಿಸುತ್ತಿದೆ...</string>
|
||||
<!-- Parameters: %0:s: version, %1:s: ssActionDownload -->
|
||||
<string name="ssActionInstallKeyman">$APPNAME %0:s %1:s</string>
|
||||
<!-- Parameters: %0:s: package name %1:s: version %2:s: ssActionDownload -->
|
||||
<string name="ssActionInstallPackage">• %0:s %1:s %2:s</string>
|
||||
<!-- Parameters: %0:s: package name %1:s: version %2:s: language %3:s: ssActionDownload -->
|
||||
<string name="ssActionInstallPackageLanguage">• %2:s ಗೆ %0:s %1:s %3:s</string>
|
||||
<string name="ssActionNothingToInstall">ಸ್ಥಾಪಿಸಲು ಏನೂ ಇಲ್ಲ.</string>
|
||||
<!-- Parameters: %0:s download size -->
|
||||
<string name="ssActionDownload">(ಡೌನ್ಲೋಡ್ %0:s)</string>
|
||||
<string name="ssActionInstall">ಸೆಟ್ಅಪ್ ಸ್ಥಾಪಿಸುತ್ತದೆ:</string>
|
||||
<string name="ssFreeCaption">$APPNAME $VERSION ಉಚಿತ ಮತ್ತು ಮುಕ್ತ ಸಂಪನ್ಮೂಲವಾಗಿದೆ</string>
|
||||
<string name="ssLicenseLink">&ಪರವಾನಗಿಯನ್ನು ಓದಿ</string>
|
||||
<string name="ssInstallOptionsLink">ಅನುಸ್ಥಾಪಿಸುವ & ಆಯ್ಕೆಗಳು</string>
|
||||
<string name="ssMessageBoxTitle">$APPNAME ಅನುಸ್ಥಾಪಿಸು</string>
|
||||
<string name="ssOkButton">ಸರಿ</string>
|
||||
<string name="ssInstallButton">&ಅನುಸ್ಥಾಪಿಸು</string>
|
||||
<string name="ssCancelButton">ರದ್ದುಮಾಡು</string>
|
||||
<string name="ssExitButton">ನಿರ್ಗಮನ&</string>
|
||||
<string name="ssStatusInstalling">$APPNAME ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ</string>
|
||||
<string name="ssStatusRemovingOlderVersions">ಹಳೆಯ ಆವೃತ್ತಿಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತಿದೆ</string>
|
||||
<string name="ssStatusComplete">ಅನುಸ್ಥಾಪನೆಯು ಪೂರ್ಣಗೊಂಡಿದೆ</string>
|
||||
<string name="ssQueryRestart">ಸೆಟ್ಅಪ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ನೀವು ವಿಂಡೋಸ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕು. ನೀವು ವಿಂಡೋಸ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದಾಗ, ಸೆಟ್ಅಪ್ ಮುಂದುವರಿಯುತ್ತದೆ.
|
||||
|
||||
ಈಗ ವಿಂಡೋಸ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬಹುದೇ?</string>
|
||||
<string name="ssErrorUnableToAutomaticallyRestart">ವಿಂಡೋಸ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನೀವು $APPNAME ಅನ್ನು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು, ವಿಂಡೋಸ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕು.</string>
|
||||
<string name="ssMustRestart">ಸೆಟ್ಅಪ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ನೀವು ವಿಂಡೋಸ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬೇಕು. ನೀವು ವಿಂಡೋಸ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದಾಗ, ಸೆಟ್ಅಪ್ ಮುಕ್ತಾಯಗೊಳ್ಳುತ್ತದೆ.</string>
|
||||
<string name="ssOldOsVersionInstallKeyboards">$APPNAME $VERSION ಸ್ಥಾಪಿಸಲು (Windows 7) ವಿಂಡೋಸ್ ೭ ಅಥವಾ ನಂತರದ ಅಗತ್ಯವಿದೆ. ಆದಾಗ್ಯೂ, ಕೀಮನ್ ಡೆಸ್ಕ್ಟಾಪ್ 7, 8 ಅಥವಾ 9 ಅನ್ನು ಪತ್ತೆಹಚ್ಚಲಾಗಿದೆ. ಈ ಸ್ಥಾಪಕದಲ್ಲಿ ಸೇರಿಸಲಾದ ಕೀಲಿಮಣೆಗಳನ್ನು ಸ್ಥಾಪಿಸಲಾದ ಕೀಮ್ಯಾನ್ ಡೆಸ್ಕ್ಟಾಪ್ ಆವೃತ್ತಿಗೆ ಸ್ಥಾಪಿಸಲು ನೀವು ಬಯಸುವಿರಾ?</string>
|
||||
<string name="ssOldOsVersionDownload">$APPNAME ನ ಈ ಆವೃತ್ತಿಯನ್ನು ಸ್ಥಾಪಿಸಲು (Windows 7) ವಿಂಡೋಸ್ ೭ ಅಥವಾ ನಂತರದ ಅಗತ್ಯವಿದೆ. ನೀವು ಕೀಮ್ಯಾನ್ ಡೆಸ್ಕ್ಟಾಪ್ ೮ ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಬಯಸುವಿರಾ?</string>
|
||||
<string name="ssOptionsTitle">ಸ್ಥಾಪಿಸುವ ಆಯ್ಕೆಗಳು</string>
|
||||
<string name="ssOptionsTitleInstallOptions">ಅನುಸ್ಥಾಪನೆಯ ಆಯ್ಕೆಗಳು</string>
|
||||
<string name="ssOptionsTitleDefaultKeymanSettings">ಪೂರ್ವನಿರ್ಧರಿತ $APPNAME ಸೆಟ್ಟಿಂಗ್ಗಳು</string>
|
||||
<string name="ssOptionsTitleSelectModulesToInstall">ಸ್ಥಾಪಿಸಲು ಅಥವ ನವೀಕರಿಸಲು ಇರುವ ಮಾಡ್ಯೂಲ್ಗಳು</string>
|
||||
<string name="ssOptionsTitleAssociatedKeyboardLanguage">ಕೀಲಿಮಣೆ ಸಂಬಂಧಿತ ಭಾಷೆಗಳು</string>
|
||||
<string name="ssOptionsTitleLocation">ಸ್ಥಾಪಿಸಲು ಆವೃತ್ತಿ</string>
|
||||
<string name="ssOptionsStartWithWindows">$APPNAME ಚಲನೆಯನ್ನು ವಿಂಡೋಸ್ ಪ್ರಾರಂಭವಾದಾಗ ಪ್ರಾರಂಭಿಸು</string>
|
||||
<string name="ssOptionsStartAfterInstall">ಸ್ಥಾಪನೆ ಪೂರ್ಣಗೊಂಡಾಗ $APPNAME ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ</string>
|
||||
<string name="ssOptionsCheckForUpdates">ನವೀಕರಣಗಳಿಗೆ ನಿಯತಕಾಲಿಕವಾಗಿ ಆನ್ಲೈನ್ನಲ್ಲಿ ಪರಿಶೀಲಿಸಿ</string>
|
||||
<string name="ssOptionsUpgradeKeyboards">ಹಳೆಯ ಆವೃತ್ತಿಗಳೊಂದಿಗೆ ಸ್ಥಾಪಿಸಲಾದ ಕೀಲಿಮಣೆಗಳನ್ನು $VERSION ಆವೃತ್ತಿಗೆ ನವೀಕರಿಸು</string>
|
||||
<string name="ssOptionsAutomaticallyReportUsage">keyman.com ಜೊತೆಗೆ ಅನಾಮಧೇಯ ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ</string>
|
||||
<!-- Parameters: %0:s: version of installer (may differ from Keyman version) -->
|
||||
<string name="ssInstallerVersion">ಸೆಟ್ಅಪ್ ಆವೃತ್ತಿ: %0:s</string>
|
||||
<string name="ssOptionsInstallKeyman">$APPNAME ಸ್ಥಾಪಿಸು</string>
|
||||
<string name="ssOptionsUpgradeKeyman">$APPNAME ನವೀಕರಿಸು</string>
|
||||
<!-- Parameters: %0:s: installed version -->
|
||||
<string name="ssOptionsKeymanAlreadyInstalled">$APPNAME %0:s ಈಗಾಗಲೇ ಸ್ಥಾಪಿಸಲಾಗಿದೆ.</string>
|
||||
<!-- Parameters: %0:s: version, %1:s: size -->
|
||||
<string name="ssOptionsDownloadKeymanVersion">ಡೌನ್ಲೋಡ್ ಆವೃತ್ತಿ %0:s (%1:s)</string>
|
||||
<!-- Parameters: %0:s: version -->
|
||||
<string name="ssOptionsInstallKeymanVersion">ಆವೃತ್ತಿ %0:s</string>
|
||||
<!-- Parameters: %0:s: package name %1:s -->
|
||||
<string name="ssOptionsInstallPackage">%0:s ಸ್ಥಾಪಿಸು</string>
|
||||
<!-- Parameters: %0:s: package version %1:s package size -->
|
||||
<string name="ssOptionsDownloadPackageVersion">ಡೌನ್ಲೋಡ್ ಆವೃತ್ತಿ %0:s (%1:s)</string>
|
||||
<!-- Parameters: %0:s: package version -->
|
||||
<string name="ssOptionsInstallPackageVersion">ಆವೃತ್ತಿ %0:s</string>
|
||||
<!-- Parameters: %0:s package name -->
|
||||
<string name="ssOptionsPackageLanguageAssociation">%0:s ಕೀಲಿಮಣೆಗೆ ಸಂಬಂಧಿತ ಭಾಷೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ</string>
|
||||
<string name="ssOptionsDefaultLanguage">ಪೂರ್ವನಿರ್ಧರಿತ ಭಾಷೆ</string>
|
||||
<!-- Parameters: %0:s: filename -->
|
||||
<string name="ssDownloadingTitle">%0:s ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ</string>
|
||||
<!-- Parameters: %0:s: filename -->
|
||||
<string name="ssDownloadingText">%0:s ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ</string>
|
||||
<string name="ssOffline">$APPNAME Setup could not connect to keyman.com to download additional resources.</string>
|
||||
<string name="ssOffline2">Please check that you are online, and give $APPNAME Setup permission to access the Internet in your firewall settings.</string>
|
||||
<string name="ssOffline3">Click Abort to exit Setup, Retry to try and download resources again, or Ignore to continue offline.</string>
|
||||
</resources>
|
||||
Loading…
Add table
Reference in a new issue