Compare commits
78 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d743073309 | ||
|
|
a636911612 | ||
|
|
7a62f91752 | ||
|
|
b551a54c8f | ||
|
|
26d86aa2fe | ||
|
|
6ee9246650 | ||
|
|
1cd96fbdbf | ||
|
|
a030a026b1 | ||
|
|
8bf9cd0bee | ||
|
|
13b1aad4b8 | ||
|
|
916d956ce2 | ||
|
|
87a7650d26 | ||
|
|
3484e187da | ||
|
|
0835f330e2 | ||
|
|
8064472477 | ||
|
|
2281012e33 | ||
|
|
83eaeab1ba | ||
|
|
6405764df3 | ||
|
|
253276a27b | ||
|
|
855a71ac56 | ||
|
|
96dc53977f | ||
|
|
31111e68eb | ||
|
|
ac0de29872 | ||
|
|
9e2b722491 | ||
|
|
59627e6fe2 | ||
|
|
cd0b5fb378 | ||
|
|
48a3c64c7c | ||
|
|
62da804518 | ||
|
|
439b99cc4a | ||
|
|
64f0efc2c0 | ||
|
|
f196bf5b76 | ||
|
|
790968be6a | ||
|
|
83f0f9537f | ||
|
|
68ebfec918 | ||
|
|
8be4dea081 | ||
|
|
cfdbba45c3 | ||
|
|
d408c9f4bf | ||
|
|
8f4c58c4c3 | ||
|
|
7e88e9648f | ||
|
|
4516d136a4 | ||
|
|
1b85dfbed1 | ||
|
|
807ffb419a | ||
|
|
e826f43aed | ||
|
|
d619f5fafc | ||
|
|
b3e2f9b7ff | ||
|
|
99a39c6f52 | ||
|
|
22991e8740 | ||
|
|
7646ecb6f7 | ||
|
|
204db674bb | ||
|
|
99fe6623de | ||
|
|
f1f78d2485 | ||
|
|
b2ae20b796 | ||
|
|
83bd4e9642 | ||
|
|
767349798a | ||
|
|
ae38f4709b | ||
|
|
fc7001a11a | ||
|
|
9924809bdb | ||
|
|
58a4ff94e4 | ||
|
|
29033e9b80 | ||
|
|
ea24daf37c | ||
|
|
ebc16583fb | ||
|
|
2a10b41781 | ||
|
|
d5946047a1 | ||
|
|
4ff46a4911 | ||
|
|
b587216b5e | ||
|
|
245fce167e | ||
|
|
de9b82ffd5 | ||
|
|
e570f402e4 | ||
|
|
9c761b13fa | ||
|
|
cc4b135d20 | ||
|
|
ec5395c787 | ||
|
|
6d60e54a7d | ||
|
|
28aa34c0b6 | ||
|
|
0701967bab | ||
|
|
a76b1eece4 | ||
|
|
8e791c680e | ||
|
|
fc9f2ccf25 | ||
|
|
d4682fb06e |
74
.github/workflows/build-lkm-local.yml
vendored
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
name: Build LKM for KernelSU Local
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
upload:
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
description: "Whether to upload to branch"
|
||||||
|
secrets:
|
||||||
|
# username:github_pat
|
||||||
|
TOKEN:
|
||||||
|
required: true
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
upload:
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
description: "Whether to upload to branch"
|
||||||
|
jobs:
|
||||||
|
build-lkm:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- version: "android12-5.10"
|
||||||
|
sub_level: 236
|
||||||
|
os_patch_level: 2025-05
|
||||||
|
- version: "android13-5.10"
|
||||||
|
sub_level: 234
|
||||||
|
os_patch_level: 2025-03
|
||||||
|
- version: "android13-5.15"
|
||||||
|
sub_level: 178
|
||||||
|
os_patch_level: 2025-03
|
||||||
|
- version: "android14-5.15"
|
||||||
|
sub_level: 178
|
||||||
|
os_patch_level: 2025-03
|
||||||
|
- version: "android14-6.1"
|
||||||
|
sub_level: 134
|
||||||
|
os_patch_level: 2025-05
|
||||||
|
- version: "android15-6.6"
|
||||||
|
sub_level: 87
|
||||||
|
os_patch_level: 2025-05
|
||||||
|
# uses: ./.github/workflows/gki-kernel-mock.yml when debugging
|
||||||
|
uses: ./.github/workflows/gki-kernel-local.yml
|
||||||
|
with:
|
||||||
|
version: ${{ matrix.version }}
|
||||||
|
version_name: ${{ matrix.version }}.${{ matrix.sub_level }}
|
||||||
|
tag: ${{ matrix.version }}-${{ matrix.os_patch_level }}
|
||||||
|
os_patch_level: ${{ matrix.os_patch_level }}
|
||||||
|
build_lkm: true
|
||||||
|
|
||||||
|
push-to-branch:
|
||||||
|
needs: [build-lkm]
|
||||||
|
runs-on: self-hosted
|
||||||
|
if: ${{ inputs.upload }}
|
||||||
|
steps:
|
||||||
|
- name: Download all workflow run artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
path: bin/
|
||||||
|
merge-multiple: true
|
||||||
|
- name: Push to branch LKM
|
||||||
|
run: |
|
||||||
|
cd bin
|
||||||
|
git config --global init.defaultBranch lkm
|
||||||
|
git init
|
||||||
|
git remote add origin https://${{ secrets.TOKEN }}@github.com/${{ github.repository }}
|
||||||
|
git config --local user.name "github-actions[bot]"
|
||||||
|
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||||
|
find . -type f
|
||||||
|
git add .
|
||||||
|
git commit -m "Upload LKM from ${{ github.sha }}" -m "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||||
|
git push --force --set-upstream origin lkm
|
||||||
12
.github/workflows/build-lkm.yml
vendored
@@ -24,8 +24,8 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- version: "android12-5.10"
|
- version: "android12-5.10"
|
||||||
sub_level: 233
|
sub_level: 236
|
||||||
os_patch_level: 2025-02
|
os_patch_level: 2025-05
|
||||||
- version: "android13-5.10"
|
- version: "android13-5.10"
|
||||||
sub_level: 234
|
sub_level: 234
|
||||||
os_patch_level: 2025-03
|
os_patch_level: 2025-03
|
||||||
@@ -36,11 +36,11 @@ jobs:
|
|||||||
sub_level: 178
|
sub_level: 178
|
||||||
os_patch_level: 2025-03
|
os_patch_level: 2025-03
|
||||||
- version: "android14-6.1"
|
- version: "android14-6.1"
|
||||||
sub_level: 129
|
sub_level: 134
|
||||||
os_patch_level: 2025-04
|
os_patch_level: 2025-05
|
||||||
- version: "android15-6.6"
|
- version: "android15-6.6"
|
||||||
sub_level: 82
|
sub_level: 87
|
||||||
os_patch_level: 2025-04
|
os_patch_level: 2025-05
|
||||||
# uses: ./.github/workflows/gki-kernel-mock.yml when debugging
|
# uses: ./.github/workflows/gki-kernel-mock.yml when debugging
|
||||||
uses: ./.github/workflows/gki-kernel.yml
|
uses: ./.github/workflows/gki-kernel.yml
|
||||||
with:
|
with:
|
||||||
|
|||||||
252
.github/workflows/build-manager-manual.yml
vendored
Normal file
@@ -0,0 +1,252 @@
|
|||||||
|
name: Build Manager Manual
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
build_lkm:
|
||||||
|
required: true
|
||||||
|
type: choice
|
||||||
|
default: "auto"
|
||||||
|
options:
|
||||||
|
- "true"
|
||||||
|
- "false"
|
||||||
|
- "auto"
|
||||||
|
description: "Whether to build lkm"
|
||||||
|
upload_lkm:
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
description: "Whether to upload lkm"
|
||||||
|
jobs:
|
||||||
|
check-build-lkm:
|
||||||
|
runs-on: self-hosted
|
||||||
|
outputs:
|
||||||
|
build_lkm: ${{ steps.check-build.outputs.build_lkm }}
|
||||||
|
upload_lkm: ${{ steps.check-build.outputs.upload_lkm }}
|
||||||
|
steps:
|
||||||
|
- name: check build
|
||||||
|
id: check-build
|
||||||
|
run: |
|
||||||
|
if [ "${{ github.event_name }}" == "workflow_dispatch" ] && [ "${{ inputs.build_lkm }}" != "auto" ]; then
|
||||||
|
kernel_changed="${{ inputs.build_lkm }}"
|
||||||
|
else
|
||||||
|
kernel_changed=true
|
||||||
|
mkdir tmp
|
||||||
|
cd tmp
|
||||||
|
git config --global init.defaultBranch bot
|
||||||
|
git config --global user.name 'Bot'
|
||||||
|
git config --global user.email 'bot@github.shirkneko.io'
|
||||||
|
git init .
|
||||||
|
git remote add origin https://github.com/${{ github.repository }}
|
||||||
|
CURRENT_COMMIT="${{ github.event.head_commit.id }}"
|
||||||
|
git fetch origin $CURRENT_COMMIT --depth=1
|
||||||
|
git fetch origin lkm --depth=1
|
||||||
|
LKM_COMMIT="$(git log --format=%B -n 1 origin/lkm | head -n 1)"
|
||||||
|
LKM_COMMIT="${LKM_COMMIT#Upload LKM from }"
|
||||||
|
LKM_COMMIT=$(echo "$LKM_COMMIT" | tr -d '[:space:]')
|
||||||
|
echo "LKM_COMMIT=$LKM_COMMIT"
|
||||||
|
git fetch origin "$LKM_COMMIT" --depth=1
|
||||||
|
git diff --quiet "$LKM_COMMIT" "$CURRENT_COMMIT" -- kernel :!kernel/setup.sh .github/workflows/build-lkm-local.yml .github/workflows/build-kernel-*.yml && kernel_changed=false
|
||||||
|
cd ..
|
||||||
|
rm -rf tmp
|
||||||
|
fi
|
||||||
|
if [ "${{ github.event_name }}" == "push" ] && [ "${{ github.ref }}" == 'refs/heads/main' ]; then
|
||||||
|
need_upload=true
|
||||||
|
elif [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
||||||
|
need_upload="${{ inputs.upload_lkm }}"
|
||||||
|
else
|
||||||
|
need_upload=false
|
||||||
|
fi
|
||||||
|
echo "kernel changed: $kernel_changed"
|
||||||
|
echo "need upload: $need_upload"
|
||||||
|
echo "build_lkm=$kernel_changed" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "upload_lkm=$need_upload" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
build-lkm:
|
||||||
|
needs: check-build-lkm
|
||||||
|
uses: ./.github/workflows/build-lkm-local.yml
|
||||||
|
if: ${{ needs.check-build-lkm.outputs.build_lkm == 'true' }}
|
||||||
|
with:
|
||||||
|
upload: ${{ needs.check-build-lkm.outputs.upload_lkm == 'true' }}
|
||||||
|
secrets: inherit
|
||||||
|
build-susfs:
|
||||||
|
if: ${{ always() }}
|
||||||
|
needs: [ check-build-lkm, build-lkm ]
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- target: aarch64-linux-android
|
||||||
|
os: ubuntu-latest
|
||||||
|
uses: ./.github/workflows/susfs.yml
|
||||||
|
with:
|
||||||
|
target: ${{ matrix.target }}
|
||||||
|
os: ${{ matrix.os }}
|
||||||
|
|
||||||
|
build-kpmmgr:
|
||||||
|
if: ${{ always() }}
|
||||||
|
needs: [ check-build-lkm, build-lkm ]
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- target: aarch64-linux-android
|
||||||
|
os: ubuntu-latest
|
||||||
|
uses: ./.github/workflows/kpmmgr.yml
|
||||||
|
with:
|
||||||
|
target: ${{ matrix.target }}
|
||||||
|
os: ${{ matrix.os }}
|
||||||
|
|
||||||
|
build-ksud:
|
||||||
|
if: ${{ always() }}
|
||||||
|
needs: [ check-build-lkm, build-lkm ]
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- target: aarch64-linux-android
|
||||||
|
os: ubuntu-latest
|
||||||
|
- target: x86_64-linux-android
|
||||||
|
os: ubuntu-latest
|
||||||
|
- target: armv7-linux-androideabi
|
||||||
|
os: ubuntu-latest
|
||||||
|
uses: ./.github/workflows/ksud.yml
|
||||||
|
with:
|
||||||
|
target: ${{ matrix.target }}
|
||||||
|
os: ${{ matrix.os }}
|
||||||
|
pack_lkm: true
|
||||||
|
pull_lkm: ${{ needs.check-build-lkm.outputs.build_lkm != 'true' }}
|
||||||
|
|
||||||
|
build-manager:
|
||||||
|
if: ${{ always() }}
|
||||||
|
needs: build-ksud
|
||||||
|
runs-on: self-hosted
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: ./manager
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup need_upload
|
||||||
|
id: need_upload
|
||||||
|
run: |
|
||||||
|
if [ ! -z "${{ secrets.BOT_TOKEN }}" ]; then
|
||||||
|
echo "UPLOAD=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "UPLOAD=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Write key
|
||||||
|
if: ${{ ( github.event_name != 'pull_request' && github.ref == 'refs/heads/main' ) || github.ref == 'refs/heads/susfs' || github.ref_type == 'tag' }}
|
||||||
|
run: |
|
||||||
|
if [ ! -z "${{ secrets.KEYSTORE }}" ]; then
|
||||||
|
{
|
||||||
|
echo KEYSTORE_PASSWORD='${{ secrets.KEYSTORE_PASSWORD }}'
|
||||||
|
echo KEY_ALIAS='${{ secrets.KEY_ALIAS }}'
|
||||||
|
echo KEY_PASSWORD='${{ secrets.KEY_PASSWORD }}'
|
||||||
|
echo KEYSTORE_FILE='key.jks'
|
||||||
|
} >> gradle.properties
|
||||||
|
echo "${{ secrets.KEYSTORE }}" | base64 -d > key.jks
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Download arm64 susfs
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: susfs-aarch64-linux-android
|
||||||
|
path: .
|
||||||
|
|
||||||
|
- name: Download arm64 kpmmgr
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: kpmmgr-aarch64-linux-android
|
||||||
|
path: .
|
||||||
|
|
||||||
|
- name: Download arm64 ksud
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ksud-aarch64-linux-android
|
||||||
|
path: .
|
||||||
|
|
||||||
|
- name: Download x86_64 ksud
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ksud-x86_64-linux-android
|
||||||
|
path: .
|
||||||
|
|
||||||
|
- name: Download arm ksud
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ksud-armv7-linux-androideabi
|
||||||
|
path: .
|
||||||
|
|
||||||
|
- name: Copy ksud to app jniLibs
|
||||||
|
run: |
|
||||||
|
mkdir -p app/src/main/jniLibs/arm64-v8a
|
||||||
|
mkdir -p app/src/main/jniLibs/x86_64
|
||||||
|
mkdir -p app/src/main/jniLibs/armeabi-v7a
|
||||||
|
cp -f ../aarch64-linux-android/release/zakozako ../manager/app/src/main/jniLibs/arm64-v8a/libzakozako.so
|
||||||
|
cp -f ../x86_64-linux-android/release/zakozako ../manager/app/src/main/jniLibs/x86_64/libzakozako.so
|
||||||
|
cp -f ../armv7-linux-androideabi/release/zakozako ../manager/app/src/main/jniLibs/armeabi-v7a/libzakozako.so
|
||||||
|
|
||||||
|
- name: Copy kpmmgr to app jniLibs
|
||||||
|
run: |
|
||||||
|
mkdir -p app/src/main/jniLibs/arm64-v8a
|
||||||
|
cp -f ../arm64-v8a/kpmmgr ../manager/app/src/main/jniLibs/arm64-v8a/libkpmmgr.so
|
||||||
|
|
||||||
|
- name: Copy susfs to app jniLibs
|
||||||
|
run: |
|
||||||
|
mkdir -p app/src/main/jniLibs/arm64-v8a
|
||||||
|
cp -f ../arm64-v8a/zakozakozako ../manager/app/src/main/jniLibs/arm64-v8a/libzakozakozako.so
|
||||||
|
|
||||||
|
- name: Build with Gradle
|
||||||
|
run: |
|
||||||
|
export ANDROID_HOME=/root/.android/sdk
|
||||||
|
export PATH=$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$PATH
|
||||||
|
{
|
||||||
|
echo 'org.gradle.parallel=true'
|
||||||
|
echo 'org.gradle.vfs.watch=true'
|
||||||
|
echo 'org.gradle.jvmargs=-Xmx2048m'
|
||||||
|
echo 'android.native.buildOutput=verbose'
|
||||||
|
} >> gradle.properties
|
||||||
|
sed -i 's/org.gradle.configuration-cache=true//g' gradle.properties
|
||||||
|
./gradlew clean assembleRelease
|
||||||
|
|
||||||
|
- name: Upload build artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: ${{ ( github.event_name != 'pull_request' && github.ref == 'refs/heads/main' ) || github.ref_type == 'tag' }}
|
||||||
|
with:
|
||||||
|
name: manager
|
||||||
|
path: manager/app/build/outputs/apk/release/*.apk
|
||||||
|
|
||||||
|
- name: Upload mappings
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: ${{ ( github.event_name != 'pull_request' && github.ref == 'refs/heads/main' ) || github.ref_type == 'tag' }}
|
||||||
|
with:
|
||||||
|
name: "mappings"
|
||||||
|
path: "manager/app/build/outputs/mapping/release/"
|
||||||
|
|
||||||
|
- name: Bot session cache
|
||||||
|
if: github.event_name != 'pull_request' && steps.need_upload.outputs.UPLOAD == 'true'
|
||||||
|
id: bot_session_cache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: scripts/ksubot.session
|
||||||
|
key: ${{ runner.os }}-bot-session
|
||||||
|
|
||||||
|
- name: Upload to telegram
|
||||||
|
if: github.event_name != 'pull_request' && steps.need_upload.outputs.UPLOAD == 'true'
|
||||||
|
env:
|
||||||
|
CHAT_ID: ${{ vars.CHAT_ID }}
|
||||||
|
BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
|
||||||
|
MESSAGE_THREAD_ID: ${{ vars.MESSAGE_THREAD_ID }}
|
||||||
|
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
||||||
|
COMMIT_URL: ${{ github.event.head_commit.url }}
|
||||||
|
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||||
|
TITLE: Manager
|
||||||
|
run: |
|
||||||
|
if [ ! -z "${{ secrets.BOT_TOKEN }}" ]; then
|
||||||
|
export VERSION=$(git rev-list --count HEAD)
|
||||||
|
APK=$(find ./app/build/outputs/apk/release -name "*.apk")
|
||||||
|
python3 $GITHUB_WORKSPACE/scripts/ksubot.py $APK
|
||||||
|
fi
|
||||||
38
.github/workflows/crowdin.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
name: Crowdin Action
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
paths:
|
||||||
|
- 'manager/app/src/main/res/**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
synchronize-with-crowdin:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: crowdin action
|
||||||
|
uses: crowdin/github-action@master
|
||||||
|
with:
|
||||||
|
upload_sources: true
|
||||||
|
upload_translations: true
|
||||||
|
download_translations: true
|
||||||
|
localization_branch_name: "Crowdin"
|
||||||
|
crowdin_branch_name: "main"
|
||||||
|
create_pull_request: true
|
||||||
|
pull_request_title: 'New Crowdin Translations'
|
||||||
|
pull_request_body: 'New Crowdin translations by [Crowdin GH Action](https://github.com/crowdin/github-action)'
|
||||||
|
pull_request_base_branch_name: 'main'
|
||||||
|
skip_untranslated_files: true
|
||||||
|
env:
|
||||||
|
# A classic GitHub Personal Access Token with the 'repo' scope selected (the user should have write access to the repository).
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||||
|
|
||||||
|
# A numeric ID, found at https://crowdin.com/project/<projectName>/tools/api
|
||||||
|
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||||
|
|
||||||
|
# Visit https://crowdin.com/settings#api-key to create this token
|
||||||
|
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||||
252
.github/workflows/gki-kernel-local.yml
vendored
Normal file
@@ -0,0 +1,252 @@
|
|||||||
|
name: GKI Kernel Build Local
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
description: >
|
||||||
|
Output directory of gki,
|
||||||
|
for example: android12-5.10
|
||||||
|
version_name:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
description: >
|
||||||
|
With SUBLEVEL of kernel,
|
||||||
|
for example: android12-5.10.66
|
||||||
|
tag:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
description: >
|
||||||
|
Part of branch name of common kernel manifest,
|
||||||
|
for example: android12-5.10-2021-11
|
||||||
|
os_patch_level:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
description: >
|
||||||
|
Patch level of common kernel manifest,
|
||||||
|
for example: 2021-11
|
||||||
|
default: 2022-05
|
||||||
|
patch_path:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
description: >
|
||||||
|
Directory name of .github/patches/<patch_path>
|
||||||
|
for example: 5.10
|
||||||
|
use_cache:
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
embed_ksud:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: ksud-aarch64-linux-android
|
||||||
|
description: >
|
||||||
|
Artifact name of prebuilt ksud to be embedded
|
||||||
|
for example: ksud-aarch64-linux-android
|
||||||
|
debug:
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
build_lkm:
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
secrets:
|
||||||
|
BOOT_SIGN_KEY:
|
||||||
|
required: false
|
||||||
|
CHAT_ID:
|
||||||
|
required: false
|
||||||
|
BOT_TOKEN:
|
||||||
|
required: false
|
||||||
|
MESSAGE_THREAD_ID:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build ${{ inputs.version_name }}
|
||||||
|
runs-on: self-hosted
|
||||||
|
env:
|
||||||
|
CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
|
||||||
|
CCACHE_NOHASHDIR: "true"
|
||||||
|
CCACHE_HARDLINK: "true"
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: KernelSU
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup need_upload
|
||||||
|
id: need_upload
|
||||||
|
run: |
|
||||||
|
if [ ! -z "${{ secrets.BOT_TOKEN }}" ]; then
|
||||||
|
echo "UPLOAD=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "UPLOAD=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Setup kernel source
|
||||||
|
run: |
|
||||||
|
echo "Free space:"
|
||||||
|
df -h
|
||||||
|
cd $GITHUB_WORKSPACE
|
||||||
|
sudo apt-get install repo -y
|
||||||
|
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
|
||||||
|
mkdir android-kernel && cd android-kernel
|
||||||
|
repo init --depth=1 --u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/kernel/manifest -b common-${{ inputs.tag }} --repo-rev=v2.35
|
||||||
|
REMOTE_BRANCH=$(git ls-remote https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/kernel/common ${{ inputs.tag }})
|
||||||
|
DEFAULT_MANIFEST_PATH=.repo/manifests/default.xml
|
||||||
|
if grep -q deprecated <<< $REMOTE_BRANCH; then
|
||||||
|
echo "Found deprecated branch: ${{ inputs.tag }}"
|
||||||
|
sed -i 's/"${{ inputs.tag }}"/"deprecated\/${{ inputs.tag }}"/g' $DEFAULT_MANIFEST_PATH
|
||||||
|
cat $DEFAULT_MANIFEST_PATH
|
||||||
|
fi
|
||||||
|
repo --version
|
||||||
|
repo --trace sync -c -j$(nproc --all) --no-tags
|
||||||
|
df -h
|
||||||
|
|
||||||
|
- name: Setup KernelSU
|
||||||
|
env:
|
||||||
|
PATCH_PATH: ${{ inputs.patch_path }}
|
||||||
|
IS_DEBUG_KERNEL: ${{ inputs.debug }}
|
||||||
|
run: |
|
||||||
|
cd $GITHUB_WORKSPACE/android-kernel
|
||||||
|
echo "[+] KernelSU setup"
|
||||||
|
GKI_ROOT=$(pwd)
|
||||||
|
echo "[+] GKI_ROOT: $GKI_ROOT"
|
||||||
|
echo "[+] Copy KernelSU driver to $GKI_ROOT/common/drivers"
|
||||||
|
ln -sf $GITHUB_WORKSPACE/KernelSU/kernel $GKI_ROOT/common/drivers/kernelsu
|
||||||
|
echo "[+] Add KernelSU driver to Makefile"
|
||||||
|
DRIVER_MAKEFILE=$GKI_ROOT/common/drivers/Makefile
|
||||||
|
DRIVER_KCONFIG=$GKI_ROOT/common/drivers/Kconfig
|
||||||
|
grep -q "kernelsu" "$DRIVER_MAKEFILE" || printf "\nobj-\$(CONFIG_KSU) += kernelsu/\n" >> "$DRIVER_MAKEFILE"
|
||||||
|
grep -q "kernelsu" "$DRIVER_KCONFIG" || sed -i "/endmenu/i\\source \"drivers/kernelsu/Kconfig\"" "$DRIVER_KCONFIG"
|
||||||
|
echo "[+] Apply Compilation Patches"
|
||||||
|
if [ ! -e build/build.sh ]; then
|
||||||
|
GLIBC_VERSION=$(ldd --version 2>/dev/null | head -n 1 | awk '{print $NF}')
|
||||||
|
echo "GLIBC_VERSION: $GLIBC_VERSION"
|
||||||
|
if [ "$(printf '%s\n' "2.38" "$GLIBC_VERSION" | sort -V | head -n1)" = "2.38" ]; then
|
||||||
|
echo "Patching resolve_btfids/Makefile"
|
||||||
|
cd $GKI_ROOT/common/ && sed -i '/\$(Q)\$(MAKE) -C \$(SUBCMD_SRC) OUTPUT=\$(abspath \$(dir \$@))\/ \$(abspath \$@)/s//$(Q)$(MAKE) -C $(SUBCMD_SRC) EXTRA_CFLAGS="$(CFLAGS)" OUTPUT=$(abspath $(dir $@))\/ $(abspath $@)/' tools/bpf/resolve_btfids/Makefile || echo "No patch needed."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$IS_DEBUG_KERNEL" = "true" ]; then
|
||||||
|
echo "[+] Enable debug features for kernel"
|
||||||
|
printf "\nccflags-y += -DCONFIG_KSU_DEBUG\n" >> $GITHUB_WORKSPACE/KernelSU/kernel/Makefile
|
||||||
|
fi
|
||||||
|
repo status
|
||||||
|
echo "[+] KernelSU setup done."
|
||||||
|
|
||||||
|
- name: Symbol magic
|
||||||
|
run: |
|
||||||
|
echo "[+] Export all symbol from abi_gki_aarch64.xml"
|
||||||
|
COMMON_ROOT=$GITHUB_WORKSPACE/android-kernel/common
|
||||||
|
KSU_ROOT=$GITHUB_WORKSPACE/KernelSU
|
||||||
|
ABI_XML=$COMMON_ROOT/android/abi_gki_aarch64.xml
|
||||||
|
SYMBOL_LIST=$COMMON_ROOT/android/abi_gki_aarch64
|
||||||
|
# python3 $KSU_ROOT/scripts/abi_gki_all.py $ABI_XML > $SYMBOL_LIST
|
||||||
|
echo "[+] Add KernelSU symbols"
|
||||||
|
cat $KSU_ROOT/kernel/export_symbol.txt | awk '{sub("[ \t]+","");print " "$0}' >> $SYMBOL_LIST
|
||||||
|
|
||||||
|
- name: Setup ccache
|
||||||
|
if: inputs.use_cache == true
|
||||||
|
uses: hendrikmuhs/ccache-action@v1
|
||||||
|
with:
|
||||||
|
key: gki-kernel-aarch64-${{ inputs.version_name }}
|
||||||
|
max-size: 2G
|
||||||
|
save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
||||||
|
|
||||||
|
- name: Setup for LKM
|
||||||
|
if: ${{ inputs.build_lkm == true }}
|
||||||
|
working-directory: android-kernel
|
||||||
|
run: |
|
||||||
|
pip install ast-grep-cli
|
||||||
|
sudo apt-get install llvm-15 -y
|
||||||
|
ast-grep -U -p '$$$ check_exports($$$) {$$$}' -r '' common/scripts/mod/modpost.c
|
||||||
|
ast-grep -U -p 'check_exports($$$);' -r '' common/scripts/mod/modpost.c
|
||||||
|
sed -i '/config KSU/,/help/{s/default y/default m/}' common/drivers/kernelsu/Kconfig
|
||||||
|
echo "drivers/kernelsu/kernelsu.ko" >> common/android/gki_aarch64_modules
|
||||||
|
|
||||||
|
# bazel build, android14-5.15, android14-6.1 use bazel
|
||||||
|
if [ ! -e build/build.sh ]; then
|
||||||
|
sed -i 's/needs unknown symbol/Dont abort when unknown symbol/g' build/kernel/*.sh || echo "No unknown symbol scripts found"
|
||||||
|
if [ -e common/modules.bzl ]; then
|
||||||
|
sed -i 's/_COMMON_GKI_MODULES_LIST = \[/_COMMON_GKI_MODULES_LIST = \[ "drivers\/kernelsu\/kernelsu.ko",/g' common/modules.bzl
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
TARGET_FILE="build/kernel/build.sh"
|
||||||
|
if [ ! -e "$TARGET_FILE" ]; then
|
||||||
|
TARGET_FILE="build/build.sh"
|
||||||
|
fi
|
||||||
|
sed -i 's/needs unknown symbol/Dont abort when unknown symbol/g' $TARGET_FILE || echo "No unknown symbol in $TARGET_FILE"
|
||||||
|
sed -i 's/if ! diff -u "\${KERNEL_DIR}\/\${MODULES_ORDER}" "\${OUT_DIR}\/modules\.order"; then/if false; then/g' $TARGET_FILE
|
||||||
|
sed -i 's@${ROOT_DIR}/build/abi/compare_to_symbol_list@echo@g' $TARGET_FILE
|
||||||
|
sed -i 's/needs unknown symbol/Dont abort when unknown symbol/g' build/kernel/*.sh || echo "No unknown symbol scripts found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Make working directory clean to avoid dirty
|
||||||
|
working-directory: android-kernel
|
||||||
|
run: |
|
||||||
|
if [ -e common/BUILD.bazel ]; then
|
||||||
|
sed -i '/^[[:space:]]*"protected_exports_list"[[:space:]]*:[[:space:]]*"android\/abi_gki_protected_exports_aarch64",$/d' common/BUILD.bazel
|
||||||
|
fi
|
||||||
|
rm common/android/abi_gki_protected_exports_* || echo "No protected exports!"
|
||||||
|
git config --global user.email "bot@kernelsu.org"
|
||||||
|
git config --global user.name "KernelSUBot"
|
||||||
|
cd common/ && git add -A && git commit -a -m "Add KernelSU"
|
||||||
|
repo status
|
||||||
|
|
||||||
|
- name: Build Kernel/LKM
|
||||||
|
working-directory: android-kernel
|
||||||
|
run: |
|
||||||
|
if [ ! -z ${{ vars.EXPECTED_SIZE }} ] && [ ! -z ${{ vars.EXPECTED_HASH }} ]; then
|
||||||
|
export KSU_EXPECTED_SIZE=${{ vars.EXPECTED_SIZE }}
|
||||||
|
export KSU_EXPECTED_HASH=${{ vars.EXPECTED_HASH }}
|
||||||
|
fi
|
||||||
|
if [ -e build/build.sh ]; then
|
||||||
|
LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh CC="/usr/bin/ccache clang"
|
||||||
|
else
|
||||||
|
tools/bazel run --disk_cache=/home/runner/.cache/bazel --config=fast --config=stamp --lto=thin //common:kernel_aarch64_dist -- --dist_dir=dist
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Prepare artifacts
|
||||||
|
id: prepareArtifacts
|
||||||
|
run: |
|
||||||
|
OUTDIR=android-kernel/out/${{ inputs.version }}/dist
|
||||||
|
if [ ! -e $OUTDIR ]; then
|
||||||
|
OUTDIR=android-kernel/dist
|
||||||
|
fi
|
||||||
|
mkdir output
|
||||||
|
if [ "${{ inputs.build_lkm}}" = "true" ]; then
|
||||||
|
llvm-strip-15 -d $OUTDIR/kernelsu.ko
|
||||||
|
mv $OUTDIR/kernelsu.ko ./output/${{ inputs.version }}_kernelsu.ko
|
||||||
|
else
|
||||||
|
cp $OUTDIR/Image ./output/
|
||||||
|
cp $OUTDIR/Image.lz4 ./output/
|
||||||
|
git clone https://github.com/Kernel-SU/AnyKernel3
|
||||||
|
rm -rf ./AnyKernel3/.git
|
||||||
|
cp $OUTDIR/Image ./AnyKernel3/
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Upload Image and Image.gz
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: ${{ inputs.build_lkm == false }}
|
||||||
|
with:
|
||||||
|
name: Image-${{ inputs.version_name }}_${{ inputs.os_patch_level }}
|
||||||
|
path: ./output/*
|
||||||
|
|
||||||
|
- name: Upload AnyKernel3
|
||||||
|
if: ${{ inputs.build_lkm == false }}
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: AnyKernel3-${{ inputs.version_name }}_${{ inputs.os_patch_level }}
|
||||||
|
path: ./AnyKernel3/*
|
||||||
|
|
||||||
|
- name: Upload LKM
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: ${{ inputs.build_lkm == true }}
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.version }}-lkm
|
||||||
|
path: ./output/*_kernelsu.ko
|
||||||
3
crowdin.yml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
files:
|
||||||
|
- source: /manager/app/src/main/res/values/strings.xml
|
||||||
|
translation: /manager/app/src/main/res/values-%two_letters_code%/strings.xml
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# SukiSU Ultra
|
# SukiSU Ultra
|
||||||
|
|
||||||
**English** | [简体中文](README.md) | [日本語](README-ja.md)
|
**English** | [简体中文](README.md) | [日本語](README-ja.md) | [Türkçe](README-tr.md)
|
||||||
|
|
||||||
Android device root solution based on [KernelSU](https://github.com/tiann/KernelSU)
|
Android device root solution based on [KernelSU](https://github.com/tiann/KernelSU)
|
||||||
|
|
||||||
@@ -12,14 +12,14 @@ Android device root solution based on [KernelSU](https://github.com/tiann/Kernel
|
|||||||
|
|
||||||
## How to add
|
## How to add
|
||||||
|
|
||||||
Using main branching (non-GKI device builds are not supported)
|
Using main branching (non-GKI device builds are not supported) (requires manual integration of susfs)
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/ShirkNeko/KernelSU/main/kernel/setup.sh" | bash -s main
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
||||||
```
|
```
|
||||||
|
|
||||||
Using branches that support non-GKI devices
|
Using branches that support non-GKI devices (requires manual integration of susfs)
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
||||||
```
|
```
|
||||||
|
|
||||||
## How to use integrated susfs
|
## How to use integrated susfs
|
||||||
@@ -27,7 +27,7 @@ curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/main/kernel/
|
|||||||
1. Use the susfs-dev branch directly without any patching
|
1. Use the susfs-dev branch directly without any patching
|
||||||
|
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/main/kernel/setup.sh" | bash -s susfs-dev
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s susfs-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
## KPM Support
|
## KPM Support
|
||||||
@@ -60,6 +60,8 @@ KPM templates: https://github.com/udochina/KPM-Build-Anywhere
|
|||||||
|
|
||||||
## More links
|
## More links
|
||||||
|
|
||||||
|
**If you need to submit a translation for the manager go to** https://crowdin.com/project/SukiSU-Ultra
|
||||||
|
|
||||||
Projects compiled based on Sukisu and susfs
|
Projects compiled based on Sukisu and susfs
|
||||||
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
||||||
- [OnePlus](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
- [OnePlus](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
||||||
@@ -111,7 +113,10 @@ Please **all** refer to https://kernelsu.org/zh_CN/guide/installation.html
|
|||||||
## License
|
## License
|
||||||
|
|
||||||
- The file in the “kernel” directory is under [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) license.
|
- The file in the “kernel” directory is under [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) license.
|
||||||
- All other parts except the “kernel” directory are under [GPL-3.0 or later](https://www.gnu.org/licenses/gpl-3.0.html) license.
|
|
||||||
|
- The images of the files `ic_launcher*` with anime character emoticons are copyrighted by [五十根大虾仁](https://space.bilibili.com/370927), the Brand Intellectual Property in the images is owned by [明风OuO](https://space.bilibili.com/274939213), and the vectorization is done by @MiRinChan. Before using these files, in addition to complying with [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.txt), you also need to comply with the authorization of the two authors to use these artistic contents.
|
||||||
|
|
||||||
|
- Except for the files or directories mentioned above, all other parts are under [GPL-3.0 or later](https://www.gnu.org/licenses/gpl-3.0.html) license.
|
||||||
|
|
||||||
## Sponsorship list
|
## Sponsorship list
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# SukiSU Ultra
|
# SukiSU Ultra
|
||||||
|
|
||||||
**日本語** | [简体中文](README.md) | [English](README-en.md)
|
**日本語** | [简体中文](README.md) | [English](README-en.md) | [Türkçe](README-tr.md)
|
||||||
|
|
||||||
[KernelSU](https://github.com/tiann/KernelSU) をベースとした Android デバイスの root ソリューション
|
[KernelSU](https://github.com/tiann/KernelSU) をベースとした Android デバイスの root ソリューション
|
||||||
|
|
||||||
@@ -13,21 +13,21 @@
|
|||||||
|
|
||||||
## 追加方法
|
## 追加方法
|
||||||
|
|
||||||
メイン分岐の使用(GKI デバイス以外のビルドはサポートされていません。)
|
メイン分岐の使用(GKI デバイス以外のビルドはサポートされていません。) (手動によるサスフ統合が必要)
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/ShirkNeko/KernelSU/main/kernel/setup.sh" | bash -s main
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
||||||
```
|
```
|
||||||
|
|
||||||
GKI以外のデバイスをサポートするブランチを使用する
|
GKI以外のデバイスをサポートするブランチを使用する (手動によるサスフ統合が必要)
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
||||||
```
|
```
|
||||||
|
|
||||||
## 統合された susfs の使い方
|
## 統合された susfs の使い方
|
||||||
|
|
||||||
1. パッチを当てずに susfs-dev ブランチを直接使用してください。
|
1. パッチを当てずに susfs-dev ブランチを直接使用してください。
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/main/kernel/setup.sh" | bash -s susfs-dev
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s susfs-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
## KPM に対応
|
## KPM に対応
|
||||||
@@ -60,7 +60,7 @@ KPM テンプレートのアドレス: https://github.com/udochina/KPM-Build-Any
|
|||||||
|
|
||||||
## その他のリンク
|
## その他のリンク
|
||||||
|
|
||||||
SukiSU と susfs をベースにコンパイルされたプロジェクトです。
|
**監督に翻訳を提出する必要がある場合は、https://crowdin.com/project/SukiSU-Ultra。
|
||||||
|
|
||||||
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
||||||
- [OnePlus](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
- [OnePlus](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
||||||
@@ -110,8 +110,9 @@ https://kernelsu.org/zh_CN/guide/installation.html をご参照ください。
|
|||||||
|
|
||||||
## ライセンス
|
## ライセンス
|
||||||
|
|
||||||
- “kernel” ディレクトリ内のファイルは [GPL-2.0](https://www.gnu.org/licenses/old-licenses/gpl-2.0.ja.html) のみライセンス下にあります。
|
- `kernel` ディレクトリ以下のファイルは[GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)です。
|
||||||
- “kernel” ディレクトリを除くその他すべての部分は [GPL-3.0 またはそれ以降](https://www.gnu.org/licenses/gpl-3.0.html) のライセンス下にあります。
|
- アニメキャラクターの絵文字を含むファイル `ic_launcher*` の画像は[五十根大虾仁](https://space.bilibili.com/370927)が著作権を所有しており、画像内のブランド知的財産権は[明风OuO](https://space.bilibili.com/274939213)が所有しています。ベクトル化は @MiRinChan が行っています。これらのファイルを使用する前に、[Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.txt)に準拠することに加えて、これらの芸術コンテンツを使用するには、2人の著者の許可にも従う必要があります。
|
||||||
|
- 上記のファイルまたはディレクトリを除き、その他のすべての部分は[GPL-3.0以降](https://www.gnu.org/licenses/gpl-3.0.html)です。
|
||||||
|
|
||||||
## スポンサーシップの一覧
|
## スポンサーシップの一覧
|
||||||
|
|
||||||
|
|||||||
151
docs/README-tr.md
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
# SukiSU Ultra
|
||||||
|
|
||||||
|
**Türkçe** | [简体中文](README.md) | [English](README-en.md) | [日本語](README-ja.md)
|
||||||
|
|
||||||
|
[KernelSU](https://github.com/tiann/KernelSU) tabanlı Android cihaz root çözümü
|
||||||
|
|
||||||
|
**Deneysel! Kullanım riski size aittir!**
|
||||||
|
|
||||||
|
> Bu resmi olmayan bir daldır, tüm hakları saklıdır [@tiann](https://github.com/tiann)
|
||||||
|
>
|
||||||
|
> Ancak, gelecekte ayrı bir KSU dalı olarak devam edeceğiz
|
||||||
|
|
||||||
|
## Nasıl Eklenir
|
||||||
|
|
||||||
|
Çekirdek kaynak kodunun kök dizininde aşağıdaki komutları çalıştırın:
|
||||||
|
|
||||||
|
Ana dalı kullanın (GKI olmayan cihazlar için desteklenmez)
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
||||||
|
```
|
||||||
|
|
||||||
|
GKI olmayan cihazları destekleyen dalı kullanın
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
||||||
|
```
|
||||||
|
|
||||||
|
## susfs Nasıl Entegre Edilir
|
||||||
|
|
||||||
|
1. Doğrudan susfs-stable veya susfs-dev dalını kullanın, susfs entegrasyonuna gerek yok
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s susfs-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
## Kanca Yöntemleri
|
||||||
|
|
||||||
|
- Bu bölüm [rsuntk\'nin kanca yöntemlerinden](https://github.com/rsuntk/KernelSU) alıntılanmıştır
|
||||||
|
|
||||||
|
1. **KPROBES Kancası:**
|
||||||
|
|
||||||
|
- Yüklenebilir çekirdek modülleri (LKM) için kullanılır
|
||||||
|
- GKI 2.0 çekirdeğinin varsayılan kanca yöntemi
|
||||||
|
- `CONFIG_KPROBES=y` gerektirir
|
||||||
|
|
||||||
|
2. **Manuel Kanca:**
|
||||||
|
- Standart KernelSU kancası: https://kernelsu.org/guide/how-to-integrate-for-non-gki.html#manually-modify-the-kernel-source
|
||||||
|
- backslashxx\'nin syscall manuel kancası: https://github.com/backslashxx/KernelSU/issues/5
|
||||||
|
- GKI olmayan çekirdeğin varsayılan kanca yöntemi
|
||||||
|
- `CONFIG_KSU_MANUAL_HOOK=y` gerektirir
|
||||||
|
|
||||||
|
## KPM Desteği
|
||||||
|
|
||||||
|
- KernelPatch tabanlı olarak KSU ile çakışan işlevleri kaldırdık ve yalnızca KPM desteğini koruduk
|
||||||
|
- APatch ile daha fazla uyumlu fonksiyon ekleyerek KPM işlevlerinin bütünlüğünü sağlayacağız
|
||||||
|
|
||||||
|
Kaynak kodu: https://github.com/ShirkNeko/SukiSU_KernelPatch_patch
|
||||||
|
|
||||||
|
KPM şablonu: https://github.com/udochina/KPM-Build-Anywhere
|
||||||
|
|
||||||
|
> [!Note]
|
||||||
|
>
|
||||||
|
> 1. `CONFIG_KPM=y` gerektirir
|
||||||
|
> 2. GKI olmayan cihazlar ayrıca `CONFIG_KALLSYMS=y` ve `CONFIG_KALLSYMS_ALL=y` gerektirir
|
||||||
|
> 3. Bazı çekirdek `4.19` altı kaynak kodları, `4.19`dan geri taşınan başlık dosyası `set_memory.h` gerektirir
|
||||||
|
|
||||||
|
## Sistem Güncellemesini Yaparak ROOT\'u Koruma
|
||||||
|
|
||||||
|
- OTA\'dan sonra hemen yeniden başlatmayın, yöneticiye girin ve çekirdek yazma/onarma arayüzüne gidin, `GKI/non_GKI yükleme` seçeneğini bulun ve Anykernel3 çekirdek sıkıştırma dosyasını seçin, şu anda sistemin çalıştığı yuva ile zıt yuvaya yazın ve yeniden başlatın, böylece GKI modu güncellemesini koruyabilirsiniz (şu anda tüm GKI olmayan cihazlar bu yöntemi desteklemiyor, lütfen kendiniz deneyin. GKI olmayan cihazlar için TWRP kullanmak en güvenlidir)
|
||||||
|
- Veya kullanılmayan yuvaya LKM modunu kullanarak yükleyin (OTA\'dan sonra)
|
||||||
|
|
||||||
|
## Uyumluluk Durumu
|
||||||
|
|
||||||
|
- KernelSU (v1.0.0 öncesi sürümler) resmi olarak Android GKI 2.0 cihazlarını destekler (çekirdek 5.10+)
|
||||||
|
|
||||||
|
- Eski çekirdekler (4.4+) de uyumludur, ancak çekirdeği manuel olarak oluşturmanız gerekir
|
||||||
|
|
||||||
|
- Daha fazla geri taşımayla KernelSU, 3.x çekirdeğini (3.4-3.18) destekleyebilir
|
||||||
|
|
||||||
|
- Şu anda `arm64-v8a`, `armeabi-v7a (bare)` ve bazı `X86_64` desteklenmektedir
|
||||||
|
|
||||||
|
## Daha Fazla Bağlantı
|
||||||
|
|
||||||
|
SukiSU ve susfs tabanlı derlenen projeler
|
||||||
|
|
||||||
|
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
||||||
|
- [OnePlus](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
||||||
|
|
||||||
|
## Kullanım Yöntemi
|
||||||
|
|
||||||
|
### Evrensel GKI
|
||||||
|
|
||||||
|
Lütfen **tümünü** https://kernelsu.org/zh_CN/guide/installation.html adresinden inceleyin
|
||||||
|
|
||||||
|
> [!Note]
|
||||||
|
>
|
||||||
|
> 1. Xiaomi, Redmi, Samsung gibi GKI 2.0 cihazlar için uygundur (Meizu, OnePlus, Realme ve Oppo gibi değiştirilmiş çekirdekli üreticiler hariç)
|
||||||
|
> 2. [Daha fazla bağlantı](#daha-fazla-bağlantı) bölümündeki GKI tabanlı projeleri bulun. Cihaz çekirdek sürümünü bulun. Ardından indirin ve TWRP veya çekirdek yazma aracı kullanarak AnyKernel3 soneki olan sıkıştırılmış paketi yazın
|
||||||
|
> 3. Genellikle sonek olmayan .zip sıkıştırılmış paketler sıkıştırılmamıştır, gz soneki olanlar ise Dimensity modelleri için kullanılan sıkıştırma yöntemidir
|
||||||
|
|
||||||
|
### OnePlus
|
||||||
|
|
||||||
|
1. Daha fazla bağlantı bölümündeki OnePlus projesini bulun ve kendiniz doldurun, ardından bulut derleme yapın ve AnyKernel3 soneki olan sıkıştırılmış paketi yazın
|
||||||
|
|
||||||
|
> [!Note]
|
||||||
|
>
|
||||||
|
> - Çekirdek sürümü için yalnızca ilk iki haneyi doldurmanız yeterlidir, örneğin 5.10, 5.15, 6.1, 6.6
|
||||||
|
> - İşlemci kod adını kendiniz arayın, genellikle tamamen İngilizce ve sayı içermeden oluşur
|
||||||
|
> - Dal ve yapılandırma dosyasını kendiniz OnePlus çekirdek kaynak kodundan doldurun
|
||||||
|
|
||||||
|
## Özellikler
|
||||||
|
|
||||||
|
1. Çekirdek tabanlı `su` ve root erişim yönetimi
|
||||||
|
2. 5ec1cff\'nin [Magic Mount](https://github.com/5ec1cff/KernelSU) tabanlı modül sistemi
|
||||||
|
3. [App Profile](https://kernelsu.org/guide/app-profile.html): root yetkilerini kafeste kilitleyin
|
||||||
|
4. GKI 2.0 olmayan çekirdekler için desteğin geri getirilmesi
|
||||||
|
5. Daha fazla özelleştirme özelliği
|
||||||
|
6. KPM çekirdek modülleri için destek
|
||||||
|
|
||||||
|
## Lisans
|
||||||
|
|
||||||
|
- `kernel` dizinindeki dosyalar [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) lisansı altındadır.
|
||||||
|
- Anime karakter ifadeleri içeren `ic_launcher*` dosyalarının görüntüleri [五十根大虾仁](https://space.bilibili.com/370927) tarafından telif hakkıyla korunmaktadır, görüntülerdeki Marka Fikri Mülkiyeti [明风 OuO](https://space.bilibili.com/274939213)'ye aittir ve vektörleştirme @MiRinChan tarafından yapılmıştır. Bu dosyaları kullanmadan önce, [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.txt) ile uyumlu olmanın yanı sıra, bu sanatsal içerikleri kullanmak için iki yazarın yetkilendirmesine de uymanız gerekir.
|
||||||
|
- Yukarıda belirtilen dosyalar veya dizinler hariç, diğer tüm parçalar [GPL-3.0 veya üzeri](https://www.gnu.org/licenses/gpl-3.0.html)'dir.
|
||||||
|
|
||||||
|
## Afdian Bağlantısı
|
||||||
|
|
||||||
|
- https://afdian.com/a/shirkneko
|
||||||
|
|
||||||
|
## Sponsor Listesi
|
||||||
|
|
||||||
|
- [Ktouls](https://github.com/Ktouls) Bana sağladığınız destek için çok teşekkür ederim
|
||||||
|
- [zaoqi123](https://github.com/zaoqi123) Bana sütlü çay ısmarlamanız da güzel
|
||||||
|
- [wswzgdg](https://github.com/wswzgdg) Bu projeye olan desteğiniz için çok teşekkür ederim
|
||||||
|
- [yspbwx2010](https://github.com/yspbwx2010) Çok teşekkür ederim
|
||||||
|
- [DARKWWEE](https://github.com/DARKWWEE) 100 USDT için teşekkürler
|
||||||
|
|
||||||
|
Eğer yukarıdaki listede adınız yoksa, zamanında güncelleyeceğim, herkese tekrar teşekkür ederim
|
||||||
|
|
||||||
|
## Katkıda Bulunanlar
|
||||||
|
|
||||||
|
- [KernelSU](https://github.com/tiann/KernelSU): Orijinal proje
|
||||||
|
- [MKSU](https://github.com/5ec1cff/KernelSU): Kullanılan proje
|
||||||
|
- [RKSU](https://github.com/rsuntk/KernelsU): GKI olmayan cihazlar için destek sağlayan proje
|
||||||
|
- [susfs4ksu](https://gitlab.com/simonpunk/susfs4ksu): Kullanılan susfs dosya sistemi
|
||||||
|
- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): KernelSU fikri
|
||||||
|
- [Magisk](https://github.com/topjohnwu/Magisk): Güçlü root aracı
|
||||||
|
- [genuine](https://github.com/brevent/genuine/): APK v2 imza doğrulama
|
||||||
|
- [Diamorphine](https://github.com/m0nad/Diamorphine): Bazı rootkit becerileri
|
||||||
|
- [KernelPatch](https://github.com/bmax121/KernelPatch): KernelPatch, APatch\'in çekirdek modüllerini uygulamak için kritik bir parçadır
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# SukiSU Ultra
|
# SukiSU Ultra
|
||||||
|
|
||||||
**简体中文** | [English](README-en.md) | [日本語](README-ja.md)
|
**简体中文** | [English](README-en.md) | [日本語](README-ja.md) | [Türkçe](README-tr.md)
|
||||||
|
|
||||||
基于 [KernelSU](https://github.com/tiann/KernelSU) 的安卓设备 root 解决方案
|
基于 [KernelSU](https://github.com/tiann/KernelSU) 的安卓设备 root 解决方案
|
||||||
|
|
||||||
@@ -14,14 +14,16 @@
|
|||||||
|
|
||||||
在内核源码的根目录下执行以下命令:
|
在内核源码的根目录下执行以下命令:
|
||||||
|
|
||||||
使用 main 分支 (不支持非GKI设备构建)
|
使用 main 分支 (不支持非 GKI 设备构建) (需要手动集成 susfs)
|
||||||
|
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
||||||
```
|
```
|
||||||
|
|
||||||
使用支持非 GKI 设备的分支
|
使用支持非 GKI 设备的分支 (需要手动集成 susfs)
|
||||||
|
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
||||||
```
|
```
|
||||||
|
|
||||||
## 如何集成 susfs
|
## 如何集成 susfs
|
||||||
@@ -29,7 +31,7 @@ curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/main/kernel/
|
|||||||
1. 直接使用 susfs-stable 或者 susfs-dev 分支,不需要再集成 susfs
|
1. 直接使用 susfs-stable 或者 susfs-dev 分支,不需要再集成 susfs
|
||||||
|
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/main/kernel/setup.sh" | bash -s susfs-dev
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s susfs-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
## 钩子方法
|
## 钩子方法
|
||||||
@@ -37,6 +39,7 @@ curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/main/kernel/
|
|||||||
- 此部分引用自 [rsuntk 的钩子方法](https://github.com/rsuntk/KernelSU)
|
- 此部分引用自 [rsuntk 的钩子方法](https://github.com/rsuntk/KernelSU)
|
||||||
|
|
||||||
1. **KPROBES 钩子:**
|
1. **KPROBES 钩子:**
|
||||||
|
|
||||||
- 用于可加载内核模块 (LKM)
|
- 用于可加载内核模块 (LKM)
|
||||||
- GKI 2.0 内核的默认钩子方法
|
- GKI 2.0 内核的默认钩子方法
|
||||||
- 需要 `CONFIG_KPROBES=y`
|
- 需要 `CONFIG_KPROBES=y`
|
||||||
@@ -57,16 +60,18 @@ curl -LSs "https://raw.githubusercontent.com/ShirkNeko/SukiSU-Ultra/main/kernel/
|
|||||||
KPM 模板地址: https://github.com/udochina/KPM-Build-Anywhere
|
KPM 模板地址: https://github.com/udochina/KPM-Build-Anywhere
|
||||||
|
|
||||||
> [!Note]
|
> [!Note]
|
||||||
|
>
|
||||||
> 1. 需要 `CONFIG_KPM=y`
|
> 1. 需要 `CONFIG_KPM=y`
|
||||||
> 2. 非GKI设备还需要 `CONFIG_KALLSYMS=y` 和 `CONFIG_KALLSYMS_ALL=y`
|
> 2. 非 GKI 设备还需要 `CONFIG_KALLSYMS=y` 和 `CONFIG_KALLSYMS_ALL=y`
|
||||||
> 3. 部分内核 `4.19` 以下源码还需要从 `4.19` 向后移植头文件 `set_memory.h`
|
> 3. 部分内核 `4.19` 以下源码还需要从 `4.19` 向后移植头文件 `set_memory.h`
|
||||||
|
|
||||||
|
## 如何进行系统更新保留 ROOT
|
||||||
|
|
||||||
## 如何进行系统更新保留ROOT
|
- OTA 后先不要重启,进入管理器刷写/修补内核界面,找到 `GKI/non_GKI安装` 选择需要刷写的 Anykernel3 内核压缩文件,选择与现在系统运行槽位相反的槽位进行刷写并重启即可保留 GKI 模式更新(暂不支持所有非 GKI 设备使用这种方法,请自行尝试。非 GKI 设备使用 TWRP 刷写是最稳妥的)
|
||||||
- OTA后先不要重启,进入管理器刷写/修补内核界面,找到 `GKI/non_GKI安装` 选择需要刷写的Anykernel3内核压缩文件,选择与现在系统运行槽位相反的槽位进行刷写并重启即可保留GKI模式更新(暂不支持所有非GKI设备使用这种方法,请自行尝试。非GKI设备使用TWRP刷写是最稳妥的)
|
- 或者使用 LKM 模式的安装到未使用的槽位(OTA 后)
|
||||||
- 或者使用LKM模式的安装到未使用的槽位(OTA后)
|
|
||||||
|
|
||||||
## 兼容状态
|
## 兼容状态
|
||||||
|
|
||||||
- KernelSU(v1.0.0 之前版本)正式支持 Android GKI 2.0 设备(内核 5.10+)
|
- KernelSU(v1.0.0 之前版本)正式支持 Android GKI 2.0 设备(内核 5.10+)
|
||||||
|
|
||||||
- 旧内核(4.4+)也兼容,但必须手动构建内核
|
- 旧内核(4.4+)也兼容,但必须手动构建内核
|
||||||
@@ -77,7 +82,10 @@ KPM 模板地址: https://github.com/udochina/KPM-Build-Anywhere
|
|||||||
|
|
||||||
## 更多链接
|
## 更多链接
|
||||||
|
|
||||||
|
**如果你需要为管理器提交翻译请前往** https://crowdin.com/project/SukiSU-Ultra
|
||||||
|
|
||||||
基于 SukiSU 和 susfs 编译的项目
|
基于 SukiSU 和 susfs 编译的项目
|
||||||
|
|
||||||
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
||||||
- [一加](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
- [一加](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
||||||
|
|
||||||
@@ -88,16 +96,17 @@ KPM 模板地址: https://github.com/udochina/KPM-Build-Anywhere
|
|||||||
请**全部**参考 https://kernelsu.org/zh_CN/guide/installation.html
|
请**全部**参考 https://kernelsu.org/zh_CN/guide/installation.html
|
||||||
|
|
||||||
> [!Note]
|
> [!Note]
|
||||||
|
>
|
||||||
> 1. 适用于如小米、红米、三星等的 GKI 2.0 的设备 (不包含魔改内核的厂商如魅族、一加、真我和 oppo)
|
> 1. 适用于如小米、红米、三星等的 GKI 2.0 的设备 (不包含魔改内核的厂商如魅族、一加、真我和 oppo)
|
||||||
> 2. 找到[更多链接](#%E6%9B%B4%E5%A4%9A%E9%93%BE%E6%8E%A5)里的 GKI 构建的项目。找到设备内核版本。然后下载下来,用TWRP或者内核刷写工具刷入带 AnyKernel3 后缀的压缩包即可
|
> 2. 找到[更多链接](#%E6%9B%B4%E5%A4%9A%E9%93%BE%E6%8E%A5)里的 GKI 构建的项目。找到设备内核版本。然后下载下来,用 TWRP 或者内核刷写工具刷入带 AnyKernel3 后缀的压缩包即可
|
||||||
> 3. 一般不带后缀的 .zip 压缩包是未压缩的,gz 后缀的为天玑机型所使用的压缩方式
|
> 3. 一般不带后缀的 .zip 压缩包是未压缩的,gz 后缀的为天玑机型所使用的压缩方式
|
||||||
|
|
||||||
|
|
||||||
### 一加
|
### 一加
|
||||||
|
|
||||||
1.找到更多链接里的一加项目进行自行填写,然后云编译构建,最后刷入带 AnyKernel3 后缀的压缩包即可
|
1.找到更多链接里的一加项目进行自行填写,然后云编译构建,最后刷入带 AnyKernel3 后缀的压缩包即可
|
||||||
|
|
||||||
> [!Note]
|
> [!Note]
|
||||||
|
>
|
||||||
> - 内核版本只需要填写前两位即可,如 5.10,5.15,6.1,6.6
|
> - 内核版本只需要填写前两位即可,如 5.10,5.15,6.1,6.6
|
||||||
> - 处理器代号请自行搜索,一般为全英文不带数字的代号
|
> - 处理器代号请自行搜索,一般为全英文不带数字的代号
|
||||||
> - 分支和配置文件请自行到一加内核开源地址进行填写
|
> - 分支和配置文件请自行到一加内核开源地址进行填写
|
||||||
@@ -114,7 +123,12 @@ KPM 模板地址: https://github.com/udochina/KPM-Build-Anywhere
|
|||||||
## 许可证
|
## 许可证
|
||||||
|
|
||||||
- `kernel` 目录下的文件是 [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)。
|
- `kernel` 目录下的文件是 [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)。
|
||||||
- 除 `kernel` 目录外,所有其他部分均为 [GPL-3.0 或更高版本](https://www.gnu.org/licenses/gpl-3.0.html)。
|
- 有动漫人物图片表情包的这些文件 `ic_launcher*` 的图像版权为[五十根大虾仁](https://space.bilibili.com/370927)所有,图像中的 Brand Intellectual Property 由[明风OuO](https://space.bilibili.com/274939213)所有,矢量化由 @MiRinChan 完成,在使用这些文件之前,除了必须遵守 [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.txt) 以外,还需要遵守向前两者索要使用这些艺术内容的授权。
|
||||||
|
- 除了以上所述的文件或目录外,所有其他部分均为 [GPL-3.0 或更高版本](https://www.gnu.org/licenses/gpl-3.0.html)。
|
||||||
|
|
||||||
|
## 爱发电链接
|
||||||
|
|
||||||
|
- https://afdian.com/a/shirkneko
|
||||||
|
|
||||||
## 赞助名单
|
## 赞助名单
|
||||||
|
|
||||||
@@ -130,7 +144,7 @@ KPM 模板地址: https://github.com/udochina/KPM-Build-Anywhere
|
|||||||
|
|
||||||
- [KernelSU](https://github.com/tiann/KernelSU):原始项目
|
- [KernelSU](https://github.com/tiann/KernelSU):原始项目
|
||||||
- [MKSU](https://github.com/5ec1cff/KernelSU):使用的项目
|
- [MKSU](https://github.com/5ec1cff/KernelSU):使用的项目
|
||||||
- [RKSU](https://github.com/rsuntk/KernelsU):使用该项目的 kernel 对非GKI设备重新进行支持
|
- [RKSU](https://github.com/rsuntk/KernelsU):使用该项目的 kernel 对非 GKI 设备重新进行支持
|
||||||
- [susfs4ksu](https://gitlab.com/simonpunk/susfs4ksu):使用的 susfs 文件系统
|
- [susfs4ksu](https://gitlab.com/simonpunk/susfs4ksu):使用的 susfs 文件系统
|
||||||
- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/):KernelSU 的构想
|
- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/):KernelSU 的构想
|
||||||
- [Magisk](https://github.com/topjohnwu/Magisk):强大的 root 工具
|
- [Magisk](https://github.com/topjohnwu/Magisk):强大的 root 工具
|
||||||
|
|||||||
@@ -16,20 +16,13 @@ config KSU_DEBUG
|
|||||||
help
|
help
|
||||||
Enable KernelSU debug mode.
|
Enable KernelSU debug mode.
|
||||||
|
|
||||||
config KSU_HOOK
|
|
||||||
bool "Enable KernelSU Hook"
|
|
||||||
default n
|
|
||||||
help
|
|
||||||
This option enables the KernelSU Hook feature. If enabled, it will
|
|
||||||
override the kernel version check and enable the hook functionality.
|
|
||||||
|
|
||||||
config KPM
|
config KPM
|
||||||
bool "Enable SukiSU KPM"
|
bool "Enable SukiSU KPM"
|
||||||
|
depends on KSU && 64BIT
|
||||||
default n
|
default n
|
||||||
help
|
help
|
||||||
Enabling this option will activate the KPM feature of SukiSU.
|
Enabling this option will activate the KPM feature of SukiSU.
|
||||||
This option is suitable for scenarios where you need to force KPM to be enabled.
|
This option is suitable for scenarios where you need to force KPM to be enabled.
|
||||||
but it may affect system stability.
|
but it may affect system stability.
|
||||||
|
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ int ksu_handle_rename(struct dentry *old_dentry, struct dentry *new_dentry)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_EXT4_FS
|
||||||
static void nuke_ext4_sysfs() {
|
static void nuke_ext4_sysfs() {
|
||||||
struct path path;
|
struct path path;
|
||||||
int err = kern_path("/data/adb/modules", 0, &path);
|
int err = kern_path("/data/adb/modules", 0, &path);
|
||||||
@@ -243,6 +244,9 @@ static void nuke_ext4_sysfs() {
|
|||||||
|
|
||||||
ext4_unregister_sysfs(sb);
|
ext4_unregister_sysfs(sb);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static inline void nuke_ext4_sysfs() { }
|
||||||
|
#endif
|
||||||
|
|
||||||
int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3,
|
int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3,
|
||||||
unsigned long arg4, unsigned long arg5)
|
unsigned long arg4, unsigned long arg5)
|
||||||
@@ -425,6 +429,13 @@ int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (arg2 == CMD_ENABLE_KPM) {
|
||||||
|
bool KPM_Enabled = IS_ENABLED(CONFIG_KPM);
|
||||||
|
if (copy_to_user((void __user *)arg3, &KPM_Enabled, sizeof(KPM_Enabled)))
|
||||||
|
pr_info("KPM: copy_to_user() failed\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// all other cmds are for 'root manager'
|
// all other cmds are for 'root manager'
|
||||||
if (!from_manager) {
|
if (!from_manager) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -167,7 +167,11 @@ DYNAMIC_STRUCT_BEGIN(task_struct)
|
|||||||
DEFINE_MEMBER(task_struct, group_leader)
|
DEFINE_MEMBER(task_struct, group_leader)
|
||||||
DEFINE_MEMBER(task_struct, mm)
|
DEFINE_MEMBER(task_struct, mm)
|
||||||
DEFINE_MEMBER(task_struct, active_mm)
|
DEFINE_MEMBER(task_struct, active_mm)
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 19, 0)
|
||||||
|
DEFINE_MEMBER(task_struct, pids[PIDTYPE_PID].pid)
|
||||||
|
#else
|
||||||
DEFINE_MEMBER(task_struct, thread_pid)
|
DEFINE_MEMBER(task_struct, thread_pid)
|
||||||
|
#endif
|
||||||
DEFINE_MEMBER(task_struct, files)
|
DEFINE_MEMBER(task_struct, files)
|
||||||
DEFINE_MEMBER(task_struct, seccomp)
|
DEFINE_MEMBER(task_struct, seccomp)
|
||||||
#ifdef CONFIG_THREAD_INFO_IN_TASK
|
#ifdef CONFIG_THREAD_INFO_IN_TASK
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#define CMD_UID_SHOULD_UMOUNT 13
|
#define CMD_UID_SHOULD_UMOUNT 13
|
||||||
#define CMD_IS_SU_ENABLED 14
|
#define CMD_IS_SU_ENABLED 14
|
||||||
#define CMD_ENABLE_SU 15
|
#define CMD_ENABLE_SU 15
|
||||||
|
#define CMD_ENABLE_KPM 100
|
||||||
|
|
||||||
#define EVENT_POST_FS_DATA 1
|
#define EVENT_POST_FS_DATA 1
|
||||||
#define EVENT_BOOT_COMPLETED 2
|
#define EVENT_BOOT_COMPLETED 2
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ setup_kernelsu() {
|
|||||||
echo "[+] Setting up KernelSU..."
|
echo "[+] Setting up KernelSU..."
|
||||||
# Clone the repository and rename it to KernelSU
|
# Clone the repository and rename it to KernelSU
|
||||||
if [ ! -d "$GKI_ROOT/KernelSU" ]; then
|
if [ ! -d "$GKI_ROOT/KernelSU" ]; then
|
||||||
git clone https://github.com/ShirkNeko/SukiSU-Ultra SukiSU-Ultra
|
git clone https://github.com/SukiSU-Ultra/SukiSU-Ultra SukiSU-Ultra
|
||||||
mv SukiSU-Ultra KernelSU
|
mv SukiSU-Ultra KernelSU
|
||||||
echo "[+] Repository cloned and renamed to KernelSU."
|
echo "[+] Repository cloned and renamed to KernelSU."
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
aidl = true
|
|
||||||
buildConfig = true
|
buildConfig = true
|
||||||
compose = true
|
compose = true
|
||||||
prefab = true
|
prefab = true
|
||||||
@@ -109,6 +108,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(libs.gson)
|
||||||
implementation(libs.androidx.activity.compose)
|
implementation(libs.androidx.activity.compose)
|
||||||
implementation(libs.androidx.navigation.compose)
|
implementation(libs.androidx.navigation.compose)
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
package com.sukisu.zako;
|
|
||||||
|
|
||||||
import android.content.pm.PackageInfo;
|
|
||||||
import rikka.parcelablelist.ParcelableListSlice;
|
|
||||||
|
|
||||||
interface IKsuInterface {
|
|
||||||
ParcelableListSlice<PackageInfo> getPackages(int flags);
|
|
||||||
}
|
|
||||||
@@ -306,3 +306,8 @@ JNIEXPORT jboolean JNICALL
|
|||||||
Java_com_sukisu_ultra_Natives_setSuEnabled(JNIEnv *env, jobject thiz, jboolean enabled) {
|
Java_com_sukisu_ultra_Natives_setSuEnabled(JNIEnv *env, jobject thiz, jboolean enabled) {
|
||||||
return set_su_enabled(enabled);
|
return set_su_enabled(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" JNIEXPORT jboolean JNICALL
|
||||||
|
Java_com_sukisu_ultra_Natives_isKPMEnabled(JNIEnv *env, jobject) {
|
||||||
|
return is_KPM_enable();
|
||||||
|
}
|
||||||
@@ -29,6 +29,7 @@
|
|||||||
#define CMD_IS_UID_SHOULD_UMOUNT 13
|
#define CMD_IS_UID_SHOULD_UMOUNT 13
|
||||||
#define CMD_IS_SU_ENABLED 14
|
#define CMD_IS_SU_ENABLED 14
|
||||||
#define CMD_ENABLE_SU 15
|
#define CMD_ENABLE_SU 15
|
||||||
|
#define CMD_ENABLE_KPM 100
|
||||||
|
|
||||||
static bool ksuctl(int cmd, void* arg1, void* arg2) {
|
static bool ksuctl(int cmd, void* arg1, void* arg2) {
|
||||||
int32_t result = 0;
|
int32_t result = 0;
|
||||||
@@ -97,3 +98,8 @@ bool is_su_enabled() {
|
|||||||
ksuctl(CMD_IS_SU_ENABLED, &enabled, nullptr);
|
ksuctl(CMD_IS_SU_ENABLED, &enabled, nullptr);
|
||||||
return enabled;
|
return enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool is_KPM_enable() {
|
||||||
|
bool enabled = false;
|
||||||
|
return ksuctl(CMD_ENABLE_KPM, &enabled, nullptr), enabled;
|
||||||
|
}
|
||||||
@@ -83,4 +83,6 @@ bool set_su_enabled(bool enabled);
|
|||||||
|
|
||||||
bool is_su_enabled();
|
bool is_su_enabled();
|
||||||
|
|
||||||
|
bool is_KPM_enable();
|
||||||
|
|
||||||
#endif //KERNELSU_KSU_H
|
#endif //KERNELSU_KSU_H
|
||||||
|
|||||||
BIN
manager/app/src/main/ic_launcher-playstore.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
@@ -8,24 +8,13 @@ import android.system.Os
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
data class KernelVersion(val major: Int, val patchLevel: Int, val subLevel: Int) {
|
data class KernelVersion(val major: Int, val patchLevel: Int, val subLevel: Int) {
|
||||||
override fun toString(): String {
|
override fun toString(): String = "$major.$patchLevel.$subLevel"
|
||||||
return "$major.$patchLevel.$subLevel"
|
fun isGKI(): Boolean = when {
|
||||||
}
|
major > 5 -> true
|
||||||
|
major == 5 && patchLevel >= 10 -> true
|
||||||
fun isGKI(): Boolean {
|
else -> false
|
||||||
|
|
||||||
// kernel 6.x
|
|
||||||
if (major > 5) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// kernel 5.10.x
|
|
||||||
if (major == 5) {
|
|
||||||
return patchLevel >= 10
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
fun isGKI1(): Boolean = (major == 4 && patchLevel >= 19) || (major == 5 && patchLevel < 10)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun parseKernelVersion(version: String): KernelVersion {
|
fun parseKernelVersion(version: String): KernelVersion {
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ object Natives {
|
|||||||
const val MINIMAL_SUPPORTED_SU_COMPAT = 12040
|
const val MINIMAL_SUPPORTED_SU_COMPAT = 12040
|
||||||
const val KERNEL_SU_DOMAIN = "u:r:su:s0"
|
const val KERNEL_SU_DOMAIN = "u:r:su:s0"
|
||||||
|
|
||||||
|
const val MINIMAL_SUPPORTED_KPM = 12800
|
||||||
|
|
||||||
const val ROOT_UID = 0
|
const val ROOT_UID = 0
|
||||||
const val ROOT_GID = 0
|
const val ROOT_GID = 0
|
||||||
|
|
||||||
@@ -66,6 +68,7 @@ object Natives {
|
|||||||
*/
|
*/
|
||||||
external fun isSuEnabled(): Boolean
|
external fun isSuEnabled(): Boolean
|
||||||
external fun setSuEnabled(enabled: Boolean): Boolean
|
external fun setSuEnabled(enabled: Boolean): Boolean
|
||||||
|
external fun isKPMEnabled(): Boolean
|
||||||
|
|
||||||
private const val NON_ROOT_DEFAULT_PROFILE_KEY = "$"
|
private const val NON_ROOT_DEFAULT_PROFILE_KEY = "$"
|
||||||
private const val NOBODY_UID = 9999
|
private const val NOBODY_UID = 9999
|
||||||
|
|||||||
@@ -27,6 +27,11 @@ import java.io.File
|
|||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
data class FlashState(
|
data class FlashState(
|
||||||
val isFlashing: Boolean = false,
|
val isFlashing: Boolean = false,
|
||||||
val isCompleted: Boolean = false,
|
val isCompleted: Boolean = false,
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import androidx.navigation.compose.rememberNavController
|
|||||||
import com.ramcosta.composedestinations.DestinationsNavHost
|
import com.ramcosta.composedestinations.DestinationsNavHost
|
||||||
import com.ramcosta.composedestinations.animations.NavHostAnimatedDestinationStyle
|
import com.ramcosta.composedestinations.animations.NavHostAnimatedDestinationStyle
|
||||||
import com.ramcosta.composedestinations.generated.NavGraphs
|
import com.ramcosta.composedestinations.generated.NavGraphs
|
||||||
|
import com.ramcosta.composedestinations.generated.destinations.ExecuteModuleActionScreenDestination
|
||||||
import com.ramcosta.composedestinations.spec.NavHostGraphSpec
|
import com.ramcosta.composedestinations.spec.NavHostGraphSpec
|
||||||
import com.ramcosta.composedestinations.spec.RouteOrDirection
|
import com.ramcosta.composedestinations.spec.RouteOrDirection
|
||||||
import com.ramcosta.composedestinations.utils.isRouteOnBackStackAsState
|
import com.ramcosta.composedestinations.utils.isRouteOnBackStackAsState
|
||||||
@@ -39,8 +40,19 @@ import androidx.core.content.edit
|
|||||||
import com.sukisu.ultra.ui.theme.CardConfig.cardElevation
|
import com.sukisu.ultra.ui.theme.CardConfig.cardElevation
|
||||||
import com.sukisu.ultra.ui.webui.initPlatform
|
import com.sukisu.ultra.ui.webui.initPlatform
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
|
import androidx.compose.animation.slideInVertically
|
||||||
|
import androidx.compose.animation.slideOutVertically
|
||||||
|
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import com.sukisu.ultra.ui.viewmodel.HomeViewModel
|
||||||
|
import com.sukisu.ultra.ui.viewmodel.SuperUserViewModel
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
private lateinit var superUserViewModel: SuperUserViewModel
|
||||||
|
private lateinit var homeViewModel: HomeViewModel
|
||||||
|
|
||||||
private inner class ThemeChangeContentObserver(
|
private inner class ThemeChangeContentObserver(
|
||||||
handler: Handler,
|
handler: Handler,
|
||||||
private val onThemeChanged: () -> Unit
|
private val onThemeChanged: () -> Unit
|
||||||
@@ -90,10 +102,12 @@ class MainActivity : ComponentActivity() {
|
|||||||
super.attachBaseContext(context)
|
super.attachBaseContext(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
// 确保应用正确的语言设置
|
// 确保应用正确的语言设置
|
||||||
applyLanguageSetting()
|
applyLanguageSetting()
|
||||||
|
|
||||||
|
// 应用自定义 DPI
|
||||||
applyCustomDpi()
|
applyCustomDpi()
|
||||||
|
|
||||||
// Enable edge to edge
|
// Enable edge to edge
|
||||||
@@ -105,6 +119,21 @@ class MainActivity : ComponentActivity() {
|
|||||||
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
// 初始化 SuperUserViewModel
|
||||||
|
superUserViewModel = SuperUserViewModel()
|
||||||
|
|
||||||
|
lifecycleScope.launch {
|
||||||
|
superUserViewModel.fetchAppList()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化 HomeViewModel
|
||||||
|
homeViewModel = HomeViewModel()
|
||||||
|
|
||||||
|
// 预加载数据
|
||||||
|
lifecycleScope.launch {
|
||||||
|
homeViewModel.initializeData()
|
||||||
|
}
|
||||||
|
|
||||||
val prefs = getSharedPreferences("settings", MODE_PRIVATE)
|
val prefs = getSharedPreferences("settings", MODE_PRIVATE)
|
||||||
val isFirstRun = prefs.getBoolean("is_first_run", true)
|
val isFirstRun = prefs.getBoolean("is_first_run", true)
|
||||||
|
|
||||||
@@ -152,6 +181,12 @@ class MainActivity : ComponentActivity() {
|
|||||||
KernelSUTheme {
|
KernelSUTheme {
|
||||||
val navController = rememberNavController()
|
val navController = rememberNavController()
|
||||||
val snackBarHostState = remember { SnackbarHostState() }
|
val snackBarHostState = remember { SnackbarHostState() }
|
||||||
|
val currentDestination = navController.currentBackStackEntryAsState().value?.destination
|
||||||
|
|
||||||
|
val showBottomBar = when (currentDestination?.route) {
|
||||||
|
ExecuteModuleActionScreenDestination.route -> false // Hide for ExecuteModuleActionScreen
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
|
|
||||||
// pre-init platform to faster start WebUI X activities
|
// pre-init platform to faster start WebUI X activities
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
@@ -159,7 +194,15 @@ class MainActivity : ComponentActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
bottomBar = { BottomBar(navController) },
|
bottomBar = {
|
||||||
|
AnimatedVisibility(
|
||||||
|
visible = showBottomBar,
|
||||||
|
enter = slideInVertically(initialOffsetY = { it }) + fadeIn(),
|
||||||
|
exit = slideOutVertically(targetOffsetY = { it }) + fadeOut()
|
||||||
|
) {
|
||||||
|
BottomBar(navController)
|
||||||
|
}
|
||||||
|
},
|
||||||
contentWindowInsets = WindowInsets(0, 0, 0, 0)
|
contentWindowInsets = WindowInsets(0, 0, 0, 0)
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
CompositionLocalProvider(
|
CompositionLocalProvider(
|
||||||
@@ -217,6 +260,14 @@ class MainActivity : ComponentActivity() {
|
|||||||
if (!ThemeConfig.backgroundImageLoaded && !ThemeConfig.preventBackgroundRefresh) {
|
if (!ThemeConfig.backgroundImageLoaded && !ThemeConfig.preventBackgroundRefresh) {
|
||||||
loadCustomBackground()
|
loadCustomBackground()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycleScope.launch {
|
||||||
|
superUserViewModel.fetchAppList()
|
||||||
|
}
|
||||||
|
|
||||||
|
lifecycleScope.launch {
|
||||||
|
homeViewModel.initializeData()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val destroyListeners = mutableListOf<() -> Unit>()
|
private val destroyListeners = mutableListOf<() -> Unit>()
|
||||||
@@ -239,8 +290,7 @@ private fun BottomBar(navController: NavHostController) {
|
|||||||
val isManager = Natives.becomeManager(ksuApp.packageName)
|
val isManager = Natives.becomeManager(ksuApp.packageName)
|
||||||
val fullFeatured = isManager && !Natives.requireNewKernel() && rootAvailable()
|
val fullFeatured = isManager && !Natives.requireNewKernel() && rootAvailable()
|
||||||
val kpmVersion = getKpmVersion()
|
val kpmVersion = getKpmVersion()
|
||||||
val containerColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainer
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
|
||||||
|
|
||||||
// 检查是否显示KPM
|
// 检查是否显示KPM
|
||||||
val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
@@ -252,19 +302,21 @@ private fun BottomBar(navController: NavHostController) {
|
|||||||
),
|
),
|
||||||
containerColor = TopAppBarDefaults.topAppBarColors(
|
containerColor = TopAppBarDefaults.topAppBarColors(
|
||||||
containerColor = cardColor.copy(alpha = cardAlpha),
|
containerColor = cardColor.copy(alpha = cardAlpha),
|
||||||
scrolledContainerColor = containerColor.copy(alpha = cardAlpha)
|
scrolledContainerColor = cardColor.copy(alpha = cardAlpha)
|
||||||
).containerColor,
|
).containerColor,
|
||||||
tonalElevation = cardElevation
|
tonalElevation = cardElevation
|
||||||
) {
|
) {
|
||||||
BottomBarDestination.entries.forEach { destination ->
|
BottomBarDestination.entries.forEach { destination ->
|
||||||
if (destination == BottomBarDestination.Kpm) {
|
if (destination == BottomBarDestination.Kpm) {
|
||||||
if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error") && showKpmInfo) {
|
if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error") && showKpmInfo && Natives.version >= Natives.MINIMAL_SUPPORTED_KPM) {
|
||||||
if (!fullFeatured && destination.rootRequired) return@forEach
|
if (!fullFeatured && destination.rootRequired) return@forEach
|
||||||
val isCurrentDestOnBackStack by navController.isRouteOnBackStackAsState(destination.direction)
|
val isCurrentDestOnBackStack by navController.isRouteOnBackStackAsState(destination.direction)
|
||||||
NavigationBarItem(
|
NavigationBarItem(
|
||||||
selected = isCurrentDestOnBackStack,
|
selected = isCurrentDestOnBackStack,
|
||||||
onClick = {
|
onClick = {
|
||||||
if (!isCurrentDestOnBackStack) {
|
if (!isCurrentDestOnBackStack) {
|
||||||
|
navigator.popBackStack(destination.direction, false)
|
||||||
|
}
|
||||||
navigator.navigate(destination.direction) {
|
navigator.navigate(destination.direction) {
|
||||||
popUpTo(NavGraphs.root as RouteOrDirection) {
|
popUpTo(NavGraphs.root as RouteOrDirection) {
|
||||||
saveState = true
|
saveState = true
|
||||||
@@ -272,25 +324,16 @@ private fun BottomBar(navController: NavHostController) {
|
|||||||
launchSingleTop = true
|
launchSingleTop = true
|
||||||
restoreState = true
|
restoreState = true
|
||||||
}
|
}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
icon = {
|
icon = {
|
||||||
Icon(
|
if (isCurrentDestOnBackStack) {
|
||||||
imageVector = if (isCurrentDestOnBackStack) {
|
Icon(destination.iconSelected, stringResource(destination.label))
|
||||||
destination.iconSelected
|
|
||||||
} else {
|
} else {
|
||||||
destination.iconNotSelected
|
Icon(destination.iconNotSelected, stringResource(destination.label))
|
||||||
},
|
|
||||||
contentDescription = stringResource(destination.label),
|
|
||||||
tint = if (isCurrentDestOnBackStack) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant
|
|
||||||
)
|
|
||||||
},
|
|
||||||
label = {
|
|
||||||
Text(
|
|
||||||
text = stringResource(destination.label),
|
|
||||||
style = MaterialTheme.typography.labelMedium
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
label = { Text(stringResource(destination.label),style = MaterialTheme.typography.labelMedium) },
|
||||||
|
alwaysShowLabel = false
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -299,33 +342,26 @@ private fun BottomBar(navController: NavHostController) {
|
|||||||
NavigationBarItem(
|
NavigationBarItem(
|
||||||
selected = isCurrentDestOnBackStack,
|
selected = isCurrentDestOnBackStack,
|
||||||
onClick = {
|
onClick = {
|
||||||
if (!isCurrentDestOnBackStack) {
|
if (isCurrentDestOnBackStack) {
|
||||||
|
navigator.popBackStack(destination.direction, false)
|
||||||
|
}
|
||||||
navigator.navigate(destination.direction) {
|
navigator.navigate(destination.direction) {
|
||||||
popUpTo(NavGraphs.root as RouteOrDirection) {
|
popUpTo(NavGraphs.root) {
|
||||||
saveState = true
|
saveState = true
|
||||||
}
|
}
|
||||||
launchSingleTop = true
|
launchSingleTop = true
|
||||||
restoreState = true
|
restoreState = true
|
||||||
}
|
}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
icon = {
|
icon = {
|
||||||
Icon(
|
if (isCurrentDestOnBackStack) {
|
||||||
imageVector = if (isCurrentDestOnBackStack) {
|
Icon(destination.iconSelected, stringResource(destination.label))
|
||||||
destination.iconSelected
|
|
||||||
} else {
|
} else {
|
||||||
destination.iconNotSelected
|
Icon(destination.iconNotSelected, stringResource(destination.label))
|
||||||
},
|
|
||||||
contentDescription = stringResource(destination.label),
|
|
||||||
tint = if (isCurrentDestOnBackStack) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant
|
|
||||||
)
|
|
||||||
},
|
|
||||||
label = {
|
|
||||||
Text(
|
|
||||||
text = stringResource(destination.label),
|
|
||||||
style = MaterialTheme.typography.labelMedium
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
label = { Text(stringResource(destination.label),style = MaterialTheme.typography.labelMedium) },
|
||||||
|
alwaysShowLabel = false
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ fun SearchAppBar(
|
|||||||
var onSearch by remember { mutableStateOf(false) }
|
var onSearch by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
// 获取卡片颜色和透明度
|
// 获取卡片颜色和透明度
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = CardConfig.cardAlpha
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
if (onSearch) {
|
if (onSearch) {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import androidx.compose.foundation.selection.toggleable
|
|||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.ListItem
|
import androidx.compose.material3.ListItem
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.RadioButton
|
|
||||||
import androidx.compose.material3.Switch
|
import androidx.compose.material3.Switch
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
@@ -86,19 +85,3 @@ fun SwitchItem(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun RadioItem(
|
|
||||||
title: String,
|
|
||||||
selected: Boolean,
|
|
||||||
onClick: () -> Unit,
|
|
||||||
) {
|
|
||||||
ListItem(
|
|
||||||
headlineContent = {
|
|
||||||
Text(title)
|
|
||||||
},
|
|
||||||
leadingContent = {
|
|
||||||
RadioButton(selected = selected, onClick = onClick)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
@@ -206,6 +206,13 @@ fun GroupsPanel(selected: List<Groups>, closeSelection: (selection: Set<Groups>)
|
|||||||
}
|
}
|
||||||
|
|
||||||
val selection = HashSet(selected)
|
val selection = HashSet(selected)
|
||||||
|
val backgroundColor = MaterialTheme.colorScheme.surfaceContainerHighest
|
||||||
|
|
||||||
|
MaterialTheme(
|
||||||
|
colorScheme = MaterialTheme.colorScheme.copy(
|
||||||
|
surface = backgroundColor
|
||||||
|
)
|
||||||
|
) {
|
||||||
ListDialog(
|
ListDialog(
|
||||||
state = rememberUseCaseState(visible = true, onFinishedRequest = {
|
state = rememberUseCaseState(visible = true, onFinishedRequest = {
|
||||||
closeSelection(selection)
|
closeSelection(selection)
|
||||||
@@ -229,6 +236,7 @@ fun GroupsPanel(selected: List<Groups>, closeSelection: (selection: Set<Groups>)
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
OutlinedCard(
|
OutlinedCard(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
@@ -278,6 +286,13 @@ fun CapsPanel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val selection = HashSet(selected)
|
val selection = HashSet(selected)
|
||||||
|
val backgroundColor = MaterialTheme.colorScheme.surfaceContainerHighest
|
||||||
|
|
||||||
|
MaterialTheme(
|
||||||
|
colorScheme = MaterialTheme.colorScheme.copy(
|
||||||
|
surface = backgroundColor
|
||||||
|
)
|
||||||
|
) {
|
||||||
ListDialog(
|
ListDialog(
|
||||||
state = rememberUseCaseState(visible = true, onFinishedRequest = {
|
state = rememberUseCaseState(visible = true, onFinishedRequest = {
|
||||||
closeSelection(selection)
|
closeSelection(selection)
|
||||||
@@ -300,6 +315,7 @@ fun CapsPanel(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
OutlinedCard(
|
OutlinedCard(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
@@ -425,8 +441,16 @@ private fun SELinuxPanel(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val backgroundColor = MaterialTheme.colorScheme.surfaceContainerHighest
|
||||||
|
|
||||||
|
MaterialTheme(
|
||||||
|
colorScheme = MaterialTheme.colorScheme.copy(
|
||||||
|
surface = backgroundColor
|
||||||
|
)
|
||||||
|
) {
|
||||||
InputDialog(
|
InputDialog(
|
||||||
state = rememberUseCaseState(visible = true,
|
state = rememberUseCaseState(
|
||||||
|
visible = true,
|
||||||
onFinishedRequest = {
|
onFinishedRequest = {
|
||||||
onSELinuxChange(domain, rules)
|
onSELinuxChange(domain, rules)
|
||||||
},
|
},
|
||||||
@@ -444,6 +468,7 @@ private fun SELinuxPanel(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ListItem(headlineContent = {
|
ListItem(headlineContent = {
|
||||||
OutlinedTextField(
|
OutlinedTextField(
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ fun AppProfileScreen(
|
|||||||
mutableStateOf(initialProfile)
|
mutableStateOf(initialProfile)
|
||||||
}
|
}
|
||||||
|
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = CardConfig.cardAlpha
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.sukisu.ultra.ui.screen
|
|||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.*
|
import androidx.compose.material.icons.filled.*
|
||||||
|
import androidx.compose.material.icons.filled.Archive
|
||||||
import androidx.compose.material.icons.outlined.*
|
import androidx.compose.material.icons.outlined.*
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import com.ramcosta.composedestinations.generated.destinations.HomeScreenDestination
|
import com.ramcosta.composedestinations.generated.destinations.HomeScreenDestination
|
||||||
@@ -21,8 +22,8 @@ enum class BottomBarDestination(
|
|||||||
val rootRequired: Boolean,
|
val rootRequired: Boolean,
|
||||||
) {
|
) {
|
||||||
Home(HomeScreenDestination, R.string.home, Icons.Filled.Home, Icons.Outlined.Home, false),
|
Home(HomeScreenDestination, R.string.home, Icons.Filled.Home, Icons.Outlined.Home, false),
|
||||||
Kpm(KpmScreenDestination, R.string.kpm_title, Icons.Filled.Build, Icons.Outlined.Build, true),
|
Kpm(KpmScreenDestination, R.string.kpm_title, Icons.Filled.Archive, Icons.Outlined.Archive, true),
|
||||||
SuperUser(SuperUserScreenDestination, R.string.superuser, Icons.Filled.Security, Icons.Outlined.Security, true),
|
SuperUser(SuperUserScreenDestination, R.string.superuser, Icons.Filled.AdminPanelSettings, Icons.Outlined.AdminPanelSettings, true),
|
||||||
Module(ModuleScreenDestination, R.string.module, Icons.Filled.Apps, Icons.Outlined.Apps, true),
|
Module(ModuleScreenDestination, R.string.module, Icons.Filled.Extension, Icons.Outlined.Extension, true),
|
||||||
Settings(SettingScreenDestination, R.string.settings, Icons.Filled.Settings, Icons.Outlined.Settings, false),
|
Settings(SettingScreenDestination, R.string.settings, Icons.Filled.Settings, Icons.Outlined.Settings, false),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,22 @@
|
|||||||
package com.sukisu.ultra.ui.screen
|
package com.sukisu.ultra.ui.screen
|
||||||
|
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
|
import androidx.activity.compose.BackHandler
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
|
import androidx.compose.foundation.layout.WindowInsets
|
||||||
|
import androidx.compose.foundation.layout.WindowInsetsSides
|
||||||
|
import androidx.compose.foundation.layout.defaultMinSize
|
||||||
|
import androidx.compose.foundation.layout.safeDrawing
|
||||||
|
import androidx.compose.foundation.layout.only
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
import androidx.compose.material.icons.filled.Close
|
||||||
import androidx.compose.material.icons.filled.Save
|
import androidx.compose.material.icons.filled.Save
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
|
import androidx.compose.material3.ExtendedFloatingActionButton
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
@@ -30,7 +37,6 @@ import androidx.compose.ui.input.key.key
|
|||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.font.FontFamily
|
import androidx.compose.ui.text.font.FontFamily
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.compose.dropUnlessResumed
|
|
||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.annotation.RootGraph
|
import com.ramcosta.composedestinations.annotation.RootGraph
|
||||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
@@ -55,7 +61,11 @@ fun ExecuteModuleActionScreen(navigator: DestinationsNavigator, moduleId: String
|
|||||||
val snackBarHost = LocalSnackbarHost.current
|
val snackBarHost = LocalSnackbarHost.current
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
val scrollState = rememberScrollState()
|
val scrollState = rememberScrollState()
|
||||||
var actionResult: Boolean
|
var isActionRunning by rememberSaveable { mutableStateOf(true) }
|
||||||
|
|
||||||
|
BackHandler(enabled = isActionRunning) {
|
||||||
|
// Disable back button if action is running
|
||||||
|
}
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
if (text.isNotEmpty()) {
|
if (text.isNotEmpty()) {
|
||||||
@@ -76,20 +86,17 @@ fun ExecuteModuleActionScreen(navigator: DestinationsNavigator, moduleId: String
|
|||||||
onStderr = {
|
onStderr = {
|
||||||
logContent.append(it).append("\n")
|
logContent.append(it).append("\n")
|
||||||
}
|
}
|
||||||
).let {
|
)
|
||||||
actionResult = it
|
|
||||||
}
|
}
|
||||||
}
|
isActionRunning = false
|
||||||
if (actionResult) navigator.popBackStack()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
TopBar(
|
TopBar(
|
||||||
onBack = dropUnlessResumed {
|
isActionRunning = isActionRunning,
|
||||||
navigator.popBackStack()
|
|
||||||
},
|
|
||||||
onSave = {
|
onSave = {
|
||||||
|
if (!isActionRunning) {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
val format = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.getDefault())
|
val format = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.getDefault())
|
||||||
val date = format.format(Date())
|
val date = format.format(Date())
|
||||||
@@ -101,8 +108,21 @@ fun ExecuteModuleActionScreen(navigator: DestinationsNavigator, moduleId: String
|
|||||||
snackBarHost.showSnackbar("Log saved to ${file.absolutePath}")
|
snackBarHost.showSnackbar("Log saved to ${file.absolutePath}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
floatingActionButton = {
|
||||||
|
if (!isActionRunning) {
|
||||||
|
ExtendedFloatingActionButton(
|
||||||
|
text = { Text(text = stringResource(R.string.close)) },
|
||||||
|
icon = { Icon(Icons.Filled.Close, contentDescription = null) },
|
||||||
|
onClick = {
|
||||||
|
navigator.popBackStack()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
contentWindowInsets = WindowInsets.safeDrawing,
|
||||||
snackbarHost = { SnackbarHost(snackBarHost) }
|
snackbarHost = { SnackbarHost(snackBarHost) }
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
KeyEventBlocker {
|
KeyEventBlocker {
|
||||||
@@ -130,16 +150,14 @@ fun ExecuteModuleActionScreen(navigator: DestinationsNavigator, moduleId: String
|
|||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
private fun TopBar(onBack: () -> Unit = {}, onSave: () -> Unit = {}) {
|
private fun TopBar(isActionRunning: Boolean, onSave: () -> Unit = {}) {
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
title = { Text(stringResource(R.string.action)) },
|
title = { Text(stringResource(R.string.action)) },
|
||||||
navigationIcon = {
|
|
||||||
IconButton(
|
|
||||||
onClick = onBack
|
|
||||||
) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null) }
|
|
||||||
},
|
|
||||||
actions = {
|
actions = {
|
||||||
IconButton(onClick = onSave) {
|
IconButton(
|
||||||
|
onClick = onSave,
|
||||||
|
enabled = !isActionRunning
|
||||||
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.Save,
|
imageVector = Icons.Filled.Save,
|
||||||
contentDescription = stringResource(id = R.string.save_log),
|
contentDescription = stringResource(id = R.string.save_log),
|
||||||
|
|||||||
@@ -3,27 +3,40 @@ package com.sukisu.ultra.ui.screen
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
|
import androidx.activity.compose.BackHandler
|
||||||
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
|
import androidx.compose.animation.core.animateFloatAsState
|
||||||
|
import androidx.compose.animation.expandVertically
|
||||||
|
import androidx.compose.animation.fadeIn
|
||||||
|
import androidx.compose.animation.fadeOut
|
||||||
|
import androidx.compose.animation.shrinkVertically
|
||||||
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||||
|
import androidx.compose.material.icons.filled.Error
|
||||||
import androidx.compose.material.icons.filled.Refresh
|
import androidx.compose.material.icons.filled.Refresh
|
||||||
import androidx.compose.material.icons.filled.Save
|
import androidx.compose.material.icons.filled.Save
|
||||||
import androidx.compose.material3.*
|
import androidx.compose.material3.*
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.input.key.Key
|
import androidx.compose.ui.input.key.Key
|
||||||
import androidx.compose.ui.input.key.key
|
import androidx.compose.ui.input.key.key
|
||||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.font.FontFamily
|
import androidx.compose.ui.text.font.FontFamily
|
||||||
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.compose.dropUnlessResumed
|
|
||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.annotation.RootGraph
|
import com.ramcosta.composedestinations.annotation.RootGraph
|
||||||
|
import com.ramcosta.composedestinations.generated.destinations.FlashScreenDestination
|
||||||
|
import com.ramcosta.composedestinations.generated.destinations.ModuleScreenDestination
|
||||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
|
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -33,10 +46,17 @@ import kotlinx.parcelize.Parcelize
|
|||||||
import com.sukisu.ultra.ui.component.KeyEventBlocker
|
import com.sukisu.ultra.ui.component.KeyEventBlocker
|
||||||
import com.sukisu.ultra.ui.util.*
|
import com.sukisu.ultra.ui.util.*
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
|
import com.sukisu.ultra.ui.theme.CardConfig
|
||||||
|
import com.sukisu.ultra.ui.viewmodel.ModuleViewModel
|
||||||
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
enum class FlashingStatus {
|
enum class FlashingStatus {
|
||||||
FLASHING,
|
FLASHING,
|
||||||
SUCCESS,
|
SUCCESS,
|
||||||
@@ -45,14 +65,47 @@ enum class FlashingStatus {
|
|||||||
|
|
||||||
private var currentFlashingStatus = mutableStateOf(FlashingStatus.FLASHING)
|
private var currentFlashingStatus = mutableStateOf(FlashingStatus.FLASHING)
|
||||||
|
|
||||||
|
// 添加模块安装状态跟踪
|
||||||
|
data class ModuleInstallStatus(
|
||||||
|
val totalModules: Int = 0,
|
||||||
|
val currentModule: Int = 0,
|
||||||
|
val currentModuleName: String = "",
|
||||||
|
val failedModules: MutableList<String> = mutableListOf()
|
||||||
|
)
|
||||||
|
|
||||||
|
private var moduleInstallStatus = mutableStateOf(ModuleInstallStatus())
|
||||||
|
|
||||||
fun setFlashingStatus(status: FlashingStatus) {
|
fun setFlashingStatus(status: FlashingStatus) {
|
||||||
currentFlashingStatus.value = status
|
currentFlashingStatus.value = status
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun updateModuleInstallStatus(
|
||||||
|
totalModules: Int? = null,
|
||||||
|
currentModule: Int? = null,
|
||||||
|
currentModuleName: String? = null,
|
||||||
|
failedModule: String? = null
|
||||||
|
) {
|
||||||
|
val current = moduleInstallStatus.value
|
||||||
|
moduleInstallStatus.value = current.copy(
|
||||||
|
totalModules = totalModules ?: current.totalModules,
|
||||||
|
currentModule = currentModule ?: current.currentModule,
|
||||||
|
currentModuleName = currentModuleName ?: current.currentModuleName
|
||||||
|
)
|
||||||
|
|
||||||
|
if (failedModule != null) {
|
||||||
|
val updatedFailedModules = current.failedModules.toMutableList()
|
||||||
|
updatedFailedModules.add(failedModule)
|
||||||
|
moduleInstallStatus.value = moduleInstallStatus.value.copy(
|
||||||
|
failedModules = updatedFailedModules
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
@Destination<RootGraph>
|
@Destination<RootGraph>
|
||||||
fun FlashScreen(navigator: DestinationsNavigator, flashIt: FlashIt) {
|
fun FlashScreen(navigator: DestinationsNavigator, flashIt: FlashIt) {
|
||||||
|
val context = LocalContext.current
|
||||||
var text by rememberSaveable { mutableStateOf("") }
|
var text by rememberSaveable { mutableStateOf("") }
|
||||||
var tempText: String
|
var tempText: String
|
||||||
val logContent = rememberSaveable { StringBuilder() }
|
val logContent = rememberSaveable { StringBuilder() }
|
||||||
@@ -62,6 +115,25 @@ fun FlashScreen(navigator: DestinationsNavigator, flashIt: FlashIt) {
|
|||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
val scrollState = rememberScrollState()
|
val scrollState = rememberScrollState()
|
||||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||||
|
val viewModel: ModuleViewModel = viewModel()
|
||||||
|
|
||||||
|
val errorCodeString = stringResource(R.string.error_code)
|
||||||
|
val checkLogString = stringResource(R.string.check_log)
|
||||||
|
val logSavedString = stringResource(R.string.log_saved)
|
||||||
|
val installingModuleString = stringResource(R.string.installing_module)
|
||||||
|
|
||||||
|
// 当前模块安装状态
|
||||||
|
val currentStatus = moduleInstallStatus.value
|
||||||
|
|
||||||
|
// 重置状态
|
||||||
|
LaunchedEffect(flashIt) {
|
||||||
|
if (flashIt is FlashIt.FlashModules && flashIt.currentIndex == 0) {
|
||||||
|
moduleInstallStatus.value = ModuleInstallStatus(
|
||||||
|
totalModules = flashIt.uris.size,
|
||||||
|
currentModule = 1
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
if (text.isNotEmpty()) {
|
if (text.isNotEmpty()) {
|
||||||
@@ -69,17 +141,50 @@ fun FlashScreen(navigator: DestinationsNavigator, flashIt: FlashIt) {
|
|||||||
}
|
}
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
setFlashingStatus(FlashingStatus.FLASHING)
|
setFlashingStatus(FlashingStatus.FLASHING)
|
||||||
flashIt(flashIt, onFinish = { showReboot, code ->
|
|
||||||
|
if (flashIt is FlashIt.FlashModules) {
|
||||||
|
try {
|
||||||
|
val currentUri = flashIt.uris[flashIt.currentIndex]
|
||||||
|
val moduleName = getModuleNameFromUri(context, currentUri)
|
||||||
|
updateModuleInstallStatus(
|
||||||
|
currentModuleName = moduleName
|
||||||
|
)
|
||||||
|
text = installingModuleString.format(flashIt.currentIndex + 1, flashIt.uris.size, moduleName)
|
||||||
|
logContent.append(text).append("\n")
|
||||||
|
} catch (_: Exception) {
|
||||||
|
text = installingModuleString.format(flashIt.currentIndex + 1, flashIt.uris.size, "Module")
|
||||||
|
logContent.append(text).append("\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
flashIt(context, flashIt, onFinish = { showReboot, code ->
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
text += "Error: exit code = $code.\nPlease save and check the log.\n"
|
text += "$errorCodeString $code.\n$checkLogString\n"
|
||||||
setFlashingStatus(FlashingStatus.FAILED)
|
setFlashingStatus(FlashingStatus.FAILED)
|
||||||
|
|
||||||
|
if (flashIt is FlashIt.FlashModules) {
|
||||||
|
updateModuleInstallStatus(
|
||||||
|
failedModule = moduleInstallStatus.value.currentModuleName
|
||||||
|
)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
setFlashingStatus(FlashingStatus.SUCCESS)
|
setFlashingStatus(FlashingStatus.SUCCESS)
|
||||||
|
viewModel.markNeedRefresh()
|
||||||
}
|
}
|
||||||
if (showReboot) {
|
if (showReboot) {
|
||||||
text += "\n\n\n"
|
text += "\n\n\n"
|
||||||
showFloatAction = true
|
showFloatAction = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (flashIt is FlashIt.FlashModules && flashIt.currentIndex < flashIt.uris.size - 1) {
|
||||||
|
val nextFlashIt = flashIt.copy(
|
||||||
|
currentIndex = flashIt.currentIndex + 1
|
||||||
|
)
|
||||||
|
scope.launch {
|
||||||
|
kotlinx.coroutines.delay(500)
|
||||||
|
navigator.navigate(FlashScreenDestination(nextFlashIt))
|
||||||
|
}
|
||||||
|
}
|
||||||
}, onStdout = {
|
}, onStdout = {
|
||||||
tempText = "$it\n"
|
tempText = "$it\n"
|
||||||
if (tempText.startsWith("[H[J")) { // clear command
|
if (tempText.startsWith("[H[J")) { // clear command
|
||||||
@@ -94,13 +199,31 @@ fun FlashScreen(navigator: DestinationsNavigator, flashIt: FlashIt) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val onBack: () -> Unit = {
|
||||||
|
if (currentFlashingStatus.value != FlashingStatus.FLASHING) {
|
||||||
|
if (flashIt is FlashIt.FlashBoot) {
|
||||||
|
navigator.popBackStack()
|
||||||
|
} else {
|
||||||
|
viewModel.markNeedRefresh()
|
||||||
|
viewModel.fetchModuleList()
|
||||||
|
navigator.navigate(ModuleScreenDestination) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BackHandler(enabled = true) {
|
||||||
|
onBack()
|
||||||
|
}
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
TopBar(
|
TopBar(
|
||||||
currentFlashingStatus.value,
|
currentFlashingStatus.value,
|
||||||
onBack = dropUnlessResumed {
|
currentStatus,
|
||||||
navigator.popBackStack()
|
navigator = navigator,
|
||||||
},
|
flashIt = flashIt,
|
||||||
|
onBack = onBack,
|
||||||
onSave = {
|
onSave = {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
val format = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.getDefault())
|
val format = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.getDefault())
|
||||||
@@ -110,7 +233,7 @@ fun FlashScreen(navigator: DestinationsNavigator, flashIt: FlashIt) {
|
|||||||
"KernelSU_install_log_${date}.log"
|
"KernelSU_install_log_${date}.log"
|
||||||
)
|
)
|
||||||
file.writeText(logContent.toString())
|
file.writeText(logContent.toString())
|
||||||
snackBarHost.showSnackbar("Log saved to ${file.absolutePath}")
|
snackBarHost.showSnackbar(logSavedString.format(file.absolutePath))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
scrollBehavior = scrollBehavior
|
scrollBehavior = scrollBehavior
|
||||||
@@ -118,8 +241,6 @@ fun FlashScreen(navigator: DestinationsNavigator, flashIt: FlashIt) {
|
|||||||
},
|
},
|
||||||
floatingActionButton = {
|
floatingActionButton = {
|
||||||
if (showFloatAction) {
|
if (showFloatAction) {
|
||||||
val cardColor = MaterialTheme.colorScheme.secondaryContainer
|
|
||||||
val reboot = stringResource(id = R.string.reboot)
|
|
||||||
ExtendedFloatingActionButton(
|
ExtendedFloatingActionButton(
|
||||||
onClick = {
|
onClick = {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
@@ -128,49 +249,283 @@ fun FlashScreen(navigator: DestinationsNavigator, flashIt: FlashIt) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
icon = { Icon(Icons.Filled.Refresh, reboot) },
|
icon = {
|
||||||
text = { Text(text = reboot) },
|
Icon(
|
||||||
containerColor = cardColor.copy(alpha = 1f),
|
Icons.Filled.Refresh,
|
||||||
contentColor = MaterialTheme.colorScheme.onSecondaryContainer
|
contentDescription = stringResource(id = R.string.reboot)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
text = {
|
||||||
|
Text(text = stringResource(id = R.string.reboot))
|
||||||
|
},
|
||||||
|
containerColor = MaterialTheme.colorScheme.secondaryContainer,
|
||||||
|
contentColor = MaterialTheme.colorScheme.onSecondaryContainer,
|
||||||
|
expanded = true
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
snackbarHost = { SnackbarHost(hostState = snackBarHost) },
|
snackbarHost = { SnackbarHost(hostState = snackBarHost) },
|
||||||
contentWindowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal)
|
contentWindowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal),
|
||||||
|
containerColor = MaterialTheme.colorScheme.background
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
KeyEventBlocker {
|
KeyEventBlocker {
|
||||||
it.key == Key.VolumeDown || it.key == Key.VolumeUp
|
it.key == Key.VolumeDown || it.key == Key.VolumeUp
|
||||||
}
|
}
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize(1f)
|
.fillMaxSize(1f)
|
||||||
.padding(innerPadding)
|
.padding(innerPadding)
|
||||||
.nestedScroll(scrollBehavior.nestedScrollConnection)
|
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||||
.verticalScroll(scrollState),
|
) {
|
||||||
|
if (flashIt is FlashIt.FlashModules) {
|
||||||
|
ModuleInstallProgressBar(
|
||||||
|
currentIndex = flashIt.currentIndex + 1,
|
||||||
|
totalCount = flashIt.uris.size,
|
||||||
|
currentModuleName = currentStatus.currentModuleName,
|
||||||
|
status = currentFlashingStatus.value,
|
||||||
|
failedModules = currentStatus.failedModules
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
}
|
||||||
|
|
||||||
|
Box(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.weight(1f)
|
||||||
|
.verticalScroll(scrollState)
|
||||||
) {
|
) {
|
||||||
LaunchedEffect(text) {
|
LaunchedEffect(text) {
|
||||||
scrollState.animateScrollTo(scrollState.maxValue)
|
scrollState.animateScrollTo(scrollState.maxValue)
|
||||||
}
|
}
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.padding(8.dp),
|
modifier = Modifier.padding(16.dp),
|
||||||
text = text,
|
text = text,
|
||||||
fontSize = MaterialTheme.typography.bodySmall.fontSize,
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
fontFamily = FontFamily.Monospace,
|
fontFamily = FontFamily.Monospace,
|
||||||
lineHeight = MaterialTheme.typography.bodySmall.lineHeight,
|
color = MaterialTheme.colorScheme.onSurface
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显示模块安装进度条和状态
|
||||||
|
@Composable
|
||||||
|
fun ModuleInstallProgressBar(
|
||||||
|
currentIndex: Int,
|
||||||
|
totalCount: Int,
|
||||||
|
currentModuleName: String,
|
||||||
|
status: FlashingStatus,
|
||||||
|
failedModules: List<String>
|
||||||
|
) {
|
||||||
|
val progressColor = when(status) {
|
||||||
|
FlashingStatus.FLASHING -> MaterialTheme.colorScheme.primary
|
||||||
|
FlashingStatus.SUCCESS -> MaterialTheme.colorScheme.tertiary
|
||||||
|
FlashingStatus.FAILED -> MaterialTheme.colorScheme.error
|
||||||
|
}
|
||||||
|
|
||||||
|
val progress = animateFloatAsState(
|
||||||
|
targetValue = currentIndex.toFloat() / totalCount.toFloat(),
|
||||||
|
label = "InstallProgress"
|
||||||
|
)
|
||||||
|
|
||||||
|
Card(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(16.dp),
|
||||||
|
colors = CardDefaults.cardColors(
|
||||||
|
containerColor = MaterialTheme.colorScheme.surfaceVariant
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(16.dp)
|
||||||
|
) {
|
||||||
|
// 模块名称和进度
|
||||||
|
Row(
|
||||||
|
modifier = Modifier.fillMaxWidth(),
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
horizontalArrangement = Arrangement.SpaceBetween
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = if (currentModuleName.isNotEmpty()) currentModuleName else stringResource(R.string.module),
|
||||||
|
style = MaterialTheme.typography.titleMedium,
|
||||||
|
fontWeight = FontWeight.Bold
|
||||||
|
)
|
||||||
|
|
||||||
|
Text(
|
||||||
|
text = "$currentIndex/$totalCount",
|
||||||
|
style = MaterialTheme.typography.titleMedium
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
// 进度条
|
||||||
|
LinearProgressIndicator(
|
||||||
|
progress = { progress.value },
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.height(8.dp),
|
||||||
|
color = progressColor,
|
||||||
|
trackColor = MaterialTheme.colorScheme.surfaceVariant
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
// 失败模块列表
|
||||||
|
AnimatedVisibility(
|
||||||
|
visible = failedModules.isNotEmpty(),
|
||||||
|
enter = fadeIn() + expandVertically(),
|
||||||
|
exit = fadeOut() + shrinkVertically()
|
||||||
|
) {
|
||||||
|
Column {
|
||||||
|
Row(
|
||||||
|
verticalAlignment = Alignment.CenterVertically
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.Error,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.error,
|
||||||
|
modifier = Modifier.size(16.dp)
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.width(4.dp))
|
||||||
|
|
||||||
|
Text(
|
||||||
|
text = stringResource(R.string.module_failed_count, failedModules.size),
|
||||||
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
color = MaterialTheme.colorScheme.error
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(4.dp))
|
||||||
|
|
||||||
|
// 失败模块列表
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.background(
|
||||||
|
MaterialTheme.colorScheme.errorContainer.copy(alpha = 0.3f),
|
||||||
|
shape = MaterialTheme.shapes.small
|
||||||
|
)
|
||||||
|
.padding(8.dp)
|
||||||
|
) {
|
||||||
|
failedModules.forEach { moduleName ->
|
||||||
|
Text(
|
||||||
|
text = "• $moduleName",
|
||||||
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
color = MaterialTheme.colorScheme.onErrorContainer
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
@Composable
|
||||||
|
private fun TopBar(
|
||||||
|
status: FlashingStatus,
|
||||||
|
moduleStatus: ModuleInstallStatus = ModuleInstallStatus(),
|
||||||
|
navigator: DestinationsNavigator,
|
||||||
|
flashIt: FlashIt,
|
||||||
|
onBack: () -> Unit,
|
||||||
|
onSave: () -> Unit = {},
|
||||||
|
scrollBehavior: TopAppBarScrollBehavior? = null
|
||||||
|
) {
|
||||||
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
|
val statusColor = when(status) {
|
||||||
|
FlashingStatus.FLASHING -> MaterialTheme.colorScheme.primary
|
||||||
|
FlashingStatus.SUCCESS -> MaterialTheme.colorScheme.tertiary
|
||||||
|
FlashingStatus.FAILED -> MaterialTheme.colorScheme.error
|
||||||
|
}
|
||||||
|
|
||||||
|
TopAppBar(
|
||||||
|
title = {
|
||||||
|
Column {
|
||||||
|
Text(
|
||||||
|
text = stringResource(
|
||||||
|
when (status) {
|
||||||
|
FlashingStatus.FLASHING -> R.string.flashing
|
||||||
|
FlashingStatus.SUCCESS -> R.string.flash_success
|
||||||
|
FlashingStatus.FAILED -> R.string.flash_failed
|
||||||
|
}
|
||||||
|
),
|
||||||
|
style = MaterialTheme.typography.titleLarge,
|
||||||
|
color = statusColor
|
||||||
|
)
|
||||||
|
|
||||||
|
if (moduleStatus.failedModules.isNotEmpty()) {
|
||||||
|
Text(
|
||||||
|
text = stringResource(R.string.module_failed_count, moduleStatus.failedModules.size),
|
||||||
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
color = MaterialTheme.colorScheme.error
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
navigationIcon = {
|
||||||
|
IconButton(onClick = onBack) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.onSurface
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
colors = TopAppBarDefaults.topAppBarColors(
|
||||||
|
containerColor = cardColor.copy(alpha = cardAlpha),
|
||||||
|
scrolledContainerColor = cardColor.copy(alpha = cardAlpha)
|
||||||
|
),
|
||||||
|
actions = {
|
||||||
|
IconButton(onClick = onSave) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Filled.Save,
|
||||||
|
contentDescription = stringResource(id = R.string.save_log),
|
||||||
|
tint = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
windowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal),
|
||||||
|
scrollBehavior = scrollBehavior
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun getModuleNameFromUri(context: android.content.Context, uri: Uri): String {
|
||||||
|
return withContext(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
if (uri == Uri.EMPTY) {
|
||||||
|
return@withContext context.getString(R.string.unknown_module)
|
||||||
|
}
|
||||||
|
if (!ModuleUtils.isUriAccessible(context, uri)) {
|
||||||
|
return@withContext context.getString(R.string.unknown_module)
|
||||||
|
}
|
||||||
|
ModuleUtils.extractModuleName(context, uri)
|
||||||
|
} catch (_: Exception) {
|
||||||
|
context.getString(R.string.unknown_module)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
sealed class FlashIt : Parcelable {
|
sealed class FlashIt : Parcelable {
|
||||||
data class FlashBoot(val boot: Uri? = null, val lkm: LkmSelection, val ota: Boolean) : FlashIt()
|
data class FlashBoot(val boot: Uri? = null, val lkm: LkmSelection, val ota: Boolean) : FlashIt()
|
||||||
data class FlashModule(val uri: Uri) : FlashIt()
|
data class FlashModule(val uri: Uri) : FlashIt()
|
||||||
|
data class FlashModules(val uris: List<Uri>, val currentIndex: Int = 0) : FlashIt()
|
||||||
data object FlashRestore : FlashIt()
|
data object FlashRestore : FlashIt()
|
||||||
data object FlashUninstall : FlashIt()
|
data object FlashUninstall : FlashIt()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun flashIt(
|
fun flashIt(
|
||||||
|
context: android.content.Context,
|
||||||
flashIt: FlashIt,
|
flashIt: FlashIt,
|
||||||
onFinish: (Boolean, Int) -> Unit,
|
onFinish: (Boolean, Int) -> Unit,
|
||||||
onStdout: (String) -> Unit,
|
onStdout: (String) -> Unit,
|
||||||
@@ -186,49 +541,22 @@ fun flashIt(
|
|||||||
onStderr
|
onStderr
|
||||||
)
|
)
|
||||||
is FlashIt.FlashModule -> flashModule(flashIt.uri, onFinish, onStdout, onStderr)
|
is FlashIt.FlashModule -> flashModule(flashIt.uri, onFinish, onStdout, onStderr)
|
||||||
|
is FlashIt.FlashModules -> {
|
||||||
|
if (flashIt.uris.isEmpty() || flashIt.currentIndex >= flashIt.uris.size) {
|
||||||
|
onFinish(false, 0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val currentUri = flashIt.uris[flashIt.currentIndex]
|
||||||
|
onStdout("\n")
|
||||||
|
|
||||||
|
flashModule(currentUri, onFinish, onStdout, onStderr)
|
||||||
|
}
|
||||||
FlashIt.FlashRestore -> restoreBoot(onFinish, onStdout, onStderr)
|
FlashIt.FlashRestore -> restoreBoot(onFinish, onStdout, onStderr)
|
||||||
FlashIt.FlashUninstall -> uninstallPermanently(onFinish, onStdout, onStderr)
|
FlashIt.FlashUninstall -> uninstallPermanently(onFinish, onStdout, onStderr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
|
||||||
@Composable
|
|
||||||
private fun TopBar(
|
|
||||||
status: FlashingStatus,
|
|
||||||
onBack: () -> Unit = {},
|
|
||||||
onSave: () -> Unit = {},
|
|
||||||
scrollBehavior: TopAppBarScrollBehavior? = null
|
|
||||||
) {
|
|
||||||
TopAppBar(
|
|
||||||
title = {
|
|
||||||
Text(
|
|
||||||
stringResource(
|
|
||||||
when (status) {
|
|
||||||
FlashingStatus.FLASHING -> R.string.flashing
|
|
||||||
FlashingStatus.SUCCESS -> R.string.flash_success
|
|
||||||
FlashingStatus.FAILED -> R.string.flash_failed
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
},
|
|
||||||
navigationIcon = {
|
|
||||||
IconButton(
|
|
||||||
onClick = onBack
|
|
||||||
) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null) }
|
|
||||||
},
|
|
||||||
actions = {
|
|
||||||
IconButton(onClick = onSave) {
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Filled.Save,
|
|
||||||
contentDescription = "Localized description"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
windowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal),
|
|
||||||
scrollBehavior = scrollBehavior
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Preview
|
@Preview
|
||||||
@Composable
|
@Composable
|
||||||
fun FlashScreenPreview() {
|
fun FlashScreenPreview() {
|
||||||
|
|||||||
@@ -15,11 +15,13 @@ import androidx.compose.animation.fadeOut
|
|||||||
import androidx.compose.animation.shrinkVertically
|
import androidx.compose.animation.shrinkVertically
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.WindowInsets
|
import androidx.compose.foundation.layout.WindowInsets
|
||||||
import androidx.compose.foundation.layout.WindowInsetsSides
|
import androidx.compose.foundation.layout.WindowInsetsSides
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.only
|
import androidx.compose.foundation.layout.only
|
||||||
@@ -29,23 +31,24 @@ import androidx.compose.foundation.layout.size
|
|||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.layout.wrapContentHeight
|
import androidx.compose.foundation.layout.wrapContentHeight
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
|
import androidx.compose.material.ExperimentalMaterialApi
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Android
|
import androidx.compose.material.icons.filled.Android
|
||||||
import androidx.compose.material.icons.filled.Archive
|
import androidx.compose.material.icons.filled.Archive
|
||||||
import androidx.compose.material.icons.filled.Code
|
|
||||||
import androidx.compose.material.icons.filled.Info
|
import androidx.compose.material.icons.filled.Info
|
||||||
import androidx.compose.material.icons.filled.Memory
|
import androidx.compose.material.icons.filled.Memory
|
||||||
import androidx.compose.material.icons.filled.PhoneAndroid
|
import androidx.compose.material.icons.filled.PhoneAndroid
|
||||||
import androidx.compose.material.icons.filled.Refresh
|
import androidx.compose.material.icons.filled.Refresh
|
||||||
import androidx.compose.material.icons.filled.Security
|
import androidx.compose.material.icons.filled.Security
|
||||||
import androidx.compose.material.icons.filled.Settings
|
import androidx.compose.material.icons.filled.SettingsSuggest
|
||||||
import androidx.compose.material.icons.filled.Storage
|
import androidx.compose.material.icons.filled.Storage
|
||||||
import androidx.compose.material.icons.filled.Warning
|
|
||||||
import androidx.compose.material.icons.outlined.Block
|
import androidx.compose.material.icons.outlined.Block
|
||||||
import androidx.compose.material.icons.outlined.CheckCircle
|
import androidx.compose.material.icons.outlined.TaskAlt
|
||||||
import androidx.compose.material.icons.outlined.Info
|
|
||||||
import androidx.compose.material.icons.outlined.Warning
|
import androidx.compose.material.icons.outlined.Warning
|
||||||
|
import androidx.compose.material.pullrefresh.pullRefresh
|
||||||
|
import androidx.compose.material.pullrefresh.rememberPullRefreshState
|
||||||
import androidx.compose.material3.CardDefaults
|
import androidx.compose.material3.CardDefaults
|
||||||
import androidx.compose.material3.DropdownMenu
|
import androidx.compose.material3.DropdownMenu
|
||||||
import androidx.compose.material3.DropdownMenuItem
|
import androidx.compose.material3.DropdownMenuItem
|
||||||
@@ -55,22 +58,21 @@ import androidx.compose.material3.Icon
|
|||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
|
import androidx.compose.material3.Surface
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TopAppBar
|
import androidx.compose.material3.TopAppBar
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
import androidx.compose.material3.TopAppBarScrollBehavior
|
import androidx.compose.material3.TopAppBarScrollBehavior
|
||||||
|
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
|
||||||
import androidx.compose.material3.rememberTopAppBarState
|
import androidx.compose.material3.rememberTopAppBarState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableIntStateOf
|
|
||||||
import androidx.compose.runtime.mutableLongStateOf
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.produceState
|
import androidx.compose.runtime.produceState
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.runtime.snapshotFlow
|
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.composed
|
import androidx.compose.ui.composed
|
||||||
@@ -84,8 +86,8 @@ import androidx.compose.ui.platform.LocalUriHandler
|
|||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.core.content.edit
|
|
||||||
import androidx.core.content.pm.PackageInfoCompat
|
import androidx.core.content.pm.PackageInfoCompat
|
||||||
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.annotation.RootGraph
|
import com.ramcosta.composedestinations.annotation.RootGraph
|
||||||
import com.ramcosta.composedestinations.generated.destinations.InstallScreenDestination
|
import com.ramcosta.composedestinations.generated.destinations.InstallScreenDestination
|
||||||
@@ -93,8 +95,6 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
|||||||
import com.sukisu.ultra.KernelVersion
|
import com.sukisu.ultra.KernelVersion
|
||||||
import com.sukisu.ultra.Natives
|
import com.sukisu.ultra.Natives
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
import com.sukisu.ultra.getKernelVersion
|
|
||||||
import com.sukisu.ultra.ksuApp
|
|
||||||
import com.sukisu.ultra.ui.component.KsuIsValid
|
import com.sukisu.ultra.ui.component.KsuIsValid
|
||||||
import com.sukisu.ultra.ui.component.rememberConfirmDialog
|
import com.sukisu.ultra.ui.component.rememberConfirmDialog
|
||||||
import com.sukisu.ultra.ui.theme.CardConfig
|
import com.sukisu.ultra.ui.theme.CardConfig
|
||||||
@@ -104,87 +104,46 @@ import com.sukisu.ultra.ui.util.checkNewVersion
|
|||||||
import com.sukisu.ultra.ui.util.getKpmModuleCount
|
import com.sukisu.ultra.ui.util.getKpmModuleCount
|
||||||
import com.sukisu.ultra.ui.util.getKpmVersion
|
import com.sukisu.ultra.ui.util.getKpmVersion
|
||||||
import com.sukisu.ultra.ui.util.getModuleCount
|
import com.sukisu.ultra.ui.util.getModuleCount
|
||||||
import com.sukisu.ultra.ui.util.getSELinuxStatus
|
|
||||||
import com.sukisu.ultra.ui.util.getSuSFS
|
|
||||||
import com.sukisu.ultra.ui.util.getSuSFSFeatures
|
|
||||||
import com.sukisu.ultra.ui.util.getSuSFSVariant
|
|
||||||
import com.sukisu.ultra.ui.util.getSuSFSVersion
|
|
||||||
import com.sukisu.ultra.ui.util.getSuperuserCount
|
import com.sukisu.ultra.ui.util.getSuperuserCount
|
||||||
import com.sukisu.ultra.ui.util.module.LatestVersionInfo
|
import com.sukisu.ultra.ui.util.module.LatestVersionInfo
|
||||||
import com.sukisu.ultra.ui.util.reboot
|
import com.sukisu.ultra.ui.util.reboot
|
||||||
import com.sukisu.ultra.ui.util.rootAvailable
|
import com.sukisu.ultra.ui.viewmodel.HomeViewModel
|
||||||
import com.sukisu.ultra.ui.util.susfsSUS_SU_Mode
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.FlowPreview
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.flow.debounce
|
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import java.io.BufferedReader
|
|
||||||
import java.io.InputStreamReader
|
|
||||||
import java.util.zip.GZIPInputStream
|
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class, FlowPreview::class)
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterialApi::class)
|
||||||
@Destination<RootGraph>(start = true)
|
@Destination<RootGraph>(start = true)
|
||||||
@Composable
|
@Composable
|
||||||
fun HomeScreen(navigator: DestinationsNavigator) {
|
fun HomeScreen(navigator: DestinationsNavigator) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
var isSimpleMode by rememberSaveable { mutableStateOf(false) }
|
val viewModel = viewModel<HomeViewModel>()
|
||||||
var isHideVersion by rememberSaveable { mutableStateOf(false) }
|
val coroutineScope = rememberCoroutineScope()
|
||||||
var isHideOtherInfo by rememberSaveable { mutableStateOf(false) }
|
|
||||||
var isHideSusfsStatus by rememberSaveable { mutableStateOf(false) }
|
LaunchedEffect(key1 = navigator) {
|
||||||
var isHideLinkCard by rememberSaveable { mutableStateOf(false) }
|
coroutineScope.launch {
|
||||||
var showKpmInfo by rememberSaveable { mutableStateOf(true) }
|
viewModel.refreshAllData(context)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 从 SharedPreferences 加载简洁模式状态
|
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
isSimpleMode = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
viewModel.loadUserSettings(context)
|
||||||
.getBoolean("is_simple_mode", false)
|
viewModel.initializeData()
|
||||||
|
viewModel.checkForUpdates(context)
|
||||||
isHideVersion = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_version", false)
|
|
||||||
|
|
||||||
isHideOtherInfo = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_other_info", false)
|
|
||||||
|
|
||||||
isHideSusfsStatus = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_susfs_status", false)
|
|
||||||
|
|
||||||
isHideLinkCard = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_link_card", false)
|
|
||||||
|
|
||||||
showKpmInfo = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("show_kpm_info", true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val kernelVersion = getKernelVersion()
|
|
||||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||||
|
|
||||||
val isManager = Natives.becomeManager(ksuApp.packageName)
|
|
||||||
val deviceModel = getDeviceModel()
|
|
||||||
val ksuVersion = if (isManager) Natives.version else null
|
|
||||||
val zako = "一.*加.*A.*c.*e.*5.*P.*r.*o".toRegex().matches(deviceModel)
|
|
||||||
val isVersion = ksuVersion == 12777
|
|
||||||
val shouldTriggerRestart = zako && kernelVersion.isGKI() && (isVersion)
|
|
||||||
|
|
||||||
LaunchedEffect(shouldTriggerRestart) {
|
|
||||||
if (shouldTriggerRestart) {
|
|
||||||
val random = Random.nextInt(0, 100)
|
|
||||||
if (random <= 95) {
|
|
||||||
reboot()
|
|
||||||
} else {
|
|
||||||
""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val scrollState = rememberScrollState()
|
val scrollState = rememberScrollState()
|
||||||
val debounceTime = 100L
|
|
||||||
var lastScrollTime by remember { mutableLongStateOf(0L) }
|
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
TopBar(
|
TopBar(
|
||||||
kernelVersion,
|
kernelVersion = viewModel.systemStatus.kernelVersion,
|
||||||
onInstallClick = { navigator.navigate(InstallScreenDestination) },
|
onInstallClick = { navigator.navigate(InstallScreenDestination) },
|
||||||
scrollBehavior = scrollBehavior
|
scrollBehavior = scrollBehavior
|
||||||
)
|
)
|
||||||
@@ -193,100 +152,68 @@ fun HomeScreen(navigator: DestinationsNavigator) {
|
|||||||
WindowInsetsSides.Top + WindowInsetsSides.Horizontal
|
WindowInsetsSides.Top + WindowInsetsSides.Horizontal
|
||||||
)
|
)
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
Column(
|
val pullRefreshState = rememberPullRefreshState(
|
||||||
|
refreshing = false,
|
||||||
|
onRefresh = {
|
||||||
|
coroutineScope.launch {
|
||||||
|
viewModel.refreshAllData(context)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(innerPadding)
|
.padding(innerPadding)
|
||||||
.disableOverscroll()
|
.fillMaxSize()
|
||||||
.nestedScroll(scrollBehavior.nestedScrollConnection)
|
.pullRefresh(pullRefreshState)
|
||||||
|
) {
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
.verticalScroll(scrollState)
|
.verticalScroll(scrollState)
|
||||||
.padding(top = 12.dp)
|
.padding(top = 12.dp, start = 16.dp, end = 16.dp),
|
||||||
.padding(horizontal = 16.dp),
|
|
||||||
verticalArrangement = Arrangement.spacedBy(12.dp)
|
verticalArrangement = Arrangement.spacedBy(12.dp)
|
||||||
) {
|
) {
|
||||||
if (shouldTriggerRestart) {
|
StatusCard(
|
||||||
WarningCard(message = "zakozako")
|
systemStatus = viewModel.systemStatus,
|
||||||
return@Column
|
onClickInstall = {
|
||||||
}
|
|
||||||
val isManager = Natives.becomeManager(ksuApp.packageName)
|
|
||||||
val ksuVersion = if (isManager) Natives.version else null
|
|
||||||
val lkmMode = ksuVersion?.let {
|
|
||||||
if (it >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && kernelVersion.isGKI()) Natives.isLkmMode else null
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusCard(kernelVersion, ksuVersion, lkmMode) {
|
|
||||||
navigator.navigate(InstallScreenDestination)
|
navigator.navigate(InstallScreenDestination)
|
||||||
}
|
}
|
||||||
|
)
|
||||||
|
|
||||||
if (isManager && Natives.requireNewKernel()) {
|
if (viewModel.systemStatus.requireNewKernel) {
|
||||||
WarningCard(
|
WarningCard(
|
||||||
stringResource(id = R.string.require_kernel_version).format(
|
stringResource(id = R.string.require_kernel_version).format(
|
||||||
ksuVersion, Natives.MINIMAL_SUPPORTED_KERNEL
|
viewModel.systemStatus.ksuVersion,
|
||||||
|
Natives.MINIMAL_SUPPORTED_KERNEL
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ksuVersion != null && !rootAvailable()) {
|
if (viewModel.systemStatus.ksuVersion != null && !viewModel.systemStatus.isRootAvailable) {
|
||||||
WarningCard(
|
WarningCard(
|
||||||
stringResource(id = R.string.grant_root_failed)
|
stringResource(id = R.string.grant_root_failed)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val checkUpdate =
|
val checkUpdate = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("check_update", true)
|
.getBoolean("check_update", true)
|
||||||
if (checkUpdate) {
|
if (checkUpdate) {
|
||||||
UpdateCard()
|
UpdateCard()
|
||||||
}
|
}
|
||||||
|
|
||||||
val prefs = remember { context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE) }
|
InfoCard(
|
||||||
var clickCount by rememberSaveable { mutableIntStateOf(prefs.getInt("click_count", 0)) }
|
systemInfo = viewModel.systemInfo,
|
||||||
|
isSimpleMode = viewModel.isSimpleMode,
|
||||||
if (!isSimpleMode && clickCount < 3) {
|
isHideVersion = viewModel.isHideVersion,
|
||||||
AnimatedVisibility(
|
isHideOtherInfo = viewModel.isHideOtherInfo,
|
||||||
visible = clickCount < 3,
|
isHideSusfsStatus = viewModel.isHideSusfsStatus,
|
||||||
enter = fadeIn() + expandVertically(),
|
showKpmInfo = viewModel.showKpmInfo,
|
||||||
exit = shrinkVertically() + fadeOut()
|
lkmMode = viewModel.systemStatus.lkmMode,
|
||||||
) {
|
|
||||||
ElevatedCard(
|
|
||||||
colors = getCardColors(MaterialTheme.colorScheme.secondaryContainer),
|
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
|
||||||
modifier = Modifier
|
|
||||||
.clip(MaterialTheme.shapes.medium)
|
|
||||||
.shadow(
|
|
||||||
elevation = cardElevation,
|
|
||||||
shape = MaterialTheme.shapes.medium,
|
|
||||||
spotColor = MaterialTheme.colorScheme.primary.copy(alpha = 0.1f)
|
|
||||||
)
|
)
|
||||||
) {
|
|
||||||
Row(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.clickable {
|
|
||||||
clickCount++
|
|
||||||
prefs.edit { putInt("click_count", clickCount) }
|
|
||||||
}
|
|
||||||
.padding(16.dp),
|
|
||||||
verticalAlignment = Alignment.CenterVertically
|
|
||||||
) {
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Outlined.Info,
|
|
||||||
contentDescription = null,
|
|
||||||
modifier = Modifier.padding(end = 12.dp)
|
|
||||||
)
|
|
||||||
Text(
|
|
||||||
text = stringResource(R.string.using_mksu_manager),
|
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
|
||||||
color = MaterialTheme.colorScheme.onSurface
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
InfoCard()
|
if (!viewModel.isSimpleMode) {
|
||||||
|
if (!viewModel.isHideLinkCard) {
|
||||||
if (!isSimpleMode) {
|
|
||||||
if (!isHideLinkCard) {
|
|
||||||
ContributionCard()
|
ContributionCard()
|
||||||
DonateCard()
|
DonateCard()
|
||||||
LearnMoreCard()
|
LearnMoreCard()
|
||||||
@@ -295,18 +222,6 @@ fun HomeScreen(navigator: DestinationsNavigator) {
|
|||||||
Spacer(Modifier.height(16.dp))
|
Spacer(Modifier.height(16.dp))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LaunchedEffect(scrollState) {
|
|
||||||
snapshotFlow { scrollState.isScrollInProgress }
|
|
||||||
.debounce(debounceTime)
|
|
||||||
.collect { isScrolling ->
|
|
||||||
if (isScrolling) {
|
|
||||||
val currentTime = System.currentTimeMillis()
|
|
||||||
if (currentTime - lastScrollTime > debounceTime) {
|
|
||||||
lastScrollTime = currentTime
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,7 +257,7 @@ fun UpdateCard() {
|
|||||||
val updateDialog = rememberConfirmDialog(onConfirm = { uriHandler.openUri(newVersionUrl) })
|
val updateDialog = rememberConfirmDialog(onConfirm = { uriHandler.openUri(newVersionUrl) })
|
||||||
WarningCard(
|
WarningCard(
|
||||||
message = stringResource(id = R.string.new_version_available).format(newVersionCode),
|
message = stringResource(id = R.string.new_version_available).format(newVersionCode),
|
||||||
color = MaterialTheme.colorScheme.tertiaryContainer,
|
color = MaterialTheme.colorScheme.surfaceVariant,
|
||||||
onClick = {
|
onClick = {
|
||||||
if (changelog.isEmpty()) {
|
if (changelog.isEmpty()) {
|
||||||
uriHandler.openUri(newVersionUrl)
|
uriHandler.openUri(newVersionUrl)
|
||||||
@@ -380,7 +295,7 @@ private fun TopBar(
|
|||||||
onInstallClick: () -> Unit,
|
onInstallClick: () -> Unit,
|
||||||
scrollBehavior: TopAppBarScrollBehavior? = null
|
scrollBehavior: TopAppBarScrollBehavior? = null
|
||||||
) {
|
) {
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = CardConfig.cardAlpha
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
@@ -395,15 +310,6 @@ private fun TopBar(
|
|||||||
scrolledContainerColor = cardColor.copy(alpha = cardAlpha)
|
scrolledContainerColor = cardColor.copy(alpha = cardAlpha)
|
||||||
),
|
),
|
||||||
actions = {
|
actions = {
|
||||||
if (rootAvailable() || kernelVersion.isGKI()) {
|
|
||||||
IconButton(onClick = onInstallClick) {
|
|
||||||
Icon(
|
|
||||||
Icons.Filled.Archive,
|
|
||||||
contentDescription = stringResource(R.string.install),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var showDropdown by remember { mutableStateOf(false) }
|
var showDropdown by remember { mutableStateOf(false) }
|
||||||
KsuIsValid {
|
KsuIsValid {
|
||||||
IconButton(onClick = {
|
IconButton(onClick = {
|
||||||
@@ -439,13 +345,11 @@ private fun TopBar(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun StatusCard(
|
private fun StatusCard(
|
||||||
kernelVersion: KernelVersion,
|
systemStatus: HomeViewModel.SystemStatus,
|
||||||
ksuVersion: Int?,
|
|
||||||
lkmMode: Boolean?,
|
|
||||||
onClickInstall: () -> Unit = {}
|
onClickInstall: () -> Unit = {}
|
||||||
) {
|
) {
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
colors = getCardColors(MaterialTheme.colorScheme.surfaceVariant),
|
colors = getCardColors(MaterialTheme.colorScheme.secondaryContainer),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -460,7 +364,7 @@ private fun StatusCard(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.clickable {
|
.clickable {
|
||||||
if (rootAvailable() || kernelVersion.isGKI()) {
|
if (systemStatus.isRootAvailable || systemStatus.kernelVersion.isGKI()) {
|
||||||
onClickInstall()
|
onClickInstall()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -468,19 +372,71 @@ private fun StatusCard(
|
|||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
when {
|
when {
|
||||||
ksuVersion != null -> {
|
systemStatus.ksuVersion != null -> {
|
||||||
val safeMode = when {
|
|
||||||
Natives.isSafeMode -> " [${stringResource(id = R.string.safe_mode)}]"
|
val workingModeText = when {
|
||||||
else -> ""
|
systemStatus.lkmMode == true -> "LKM"
|
||||||
|
systemStatus.lkmMode == null && systemStatus.kernelVersion.isGKI1() -> "GKI-1.0"
|
||||||
|
systemStatus.lkmMode == false || systemStatus.kernelVersion.isGKI() -> "GKI-2.0"
|
||||||
|
else -> "N-GKI"
|
||||||
}
|
}
|
||||||
|
|
||||||
val workingMode = when (lkmMode) {
|
Icon(
|
||||||
null -> " <Non-GKI>"
|
Icons.Outlined.TaskAlt,
|
||||||
true -> " <LKM>"
|
contentDescription = stringResource(R.string.home_working),
|
||||||
else -> " <GKI>"
|
tint = MaterialTheme.colorScheme.primary,
|
||||||
|
modifier = Modifier.size(24.dp)
|
||||||
|
)
|
||||||
|
|
||||||
|
Column(Modifier.padding(start = 20.dp)) {
|
||||||
|
Row(
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = stringResource(id = R.string.home_working),
|
||||||
|
style = MaterialTheme.typography.titleMedium,
|
||||||
|
color = MaterialTheme.colorScheme.onSurface
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(Modifier.width(8.dp))
|
||||||
|
|
||||||
|
// 工作模式标签
|
||||||
|
Surface(
|
||||||
|
shape = RoundedCornerShape(4.dp),
|
||||||
|
color = MaterialTheme.colorScheme.primary,
|
||||||
|
modifier = Modifier
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = workingModeText,
|
||||||
|
style = MaterialTheme.typography.labelMedium,
|
||||||
|
color = MaterialTheme.colorScheme.onSecondary,
|
||||||
|
modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val workingText = "${stringResource(id = R.string.home_working)}$workingMode$safeMode"
|
Spacer(Modifier.width(6.dp))
|
||||||
|
|
||||||
|
// 机器架构标签或者安全模式标签
|
||||||
|
val labelText = if (Natives.isSafeMode) {
|
||||||
|
stringResource(id = R.string.safe_mode)
|
||||||
|
} else {
|
||||||
|
Os.uname().machine
|
||||||
|
}
|
||||||
|
|
||||||
|
Surface(
|
||||||
|
shape = RoundedCornerShape(4.dp),
|
||||||
|
color = MaterialTheme.colorScheme.primary,
|
||||||
|
modifier = Modifier
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = labelText,
|
||||||
|
style = MaterialTheme.typography.labelMedium,
|
||||||
|
color = MaterialTheme.colorScheme.onSecondary,
|
||||||
|
modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val isHideVersion = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
val isHideVersion = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
.getBoolean("is_hide_version", false)
|
.getBoolean("is_hide_version", false)
|
||||||
@@ -488,30 +444,13 @@ private fun StatusCard(
|
|||||||
val isHideOtherInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
val isHideOtherInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
.getBoolean("is_hide_other_info", false)
|
.getBoolean("is_hide_other_info", false)
|
||||||
|
|
||||||
val isHideSusfsStatus = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_susfs_status", false)
|
|
||||||
|
|
||||||
val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
.getBoolean("show_kpm_info", true)
|
.getBoolean("show_kpm_info", true)
|
||||||
|
|
||||||
Icon(
|
|
||||||
Icons.Outlined.CheckCircle,
|
|
||||||
contentDescription = stringResource(R.string.home_working),
|
|
||||||
tint = MaterialTheme.colorScheme.primary,
|
|
||||||
modifier = Modifier.size(24.dp)
|
|
||||||
)
|
|
||||||
|
|
||||||
Column(Modifier.padding(start = 20.dp)) {
|
|
||||||
Text(
|
|
||||||
text = workingText,
|
|
||||||
style = MaterialTheme.typography.titleMedium,
|
|
||||||
color = MaterialTheme.colorScheme.onSurface
|
|
||||||
)
|
|
||||||
|
|
||||||
if (!isHideVersion) {
|
if (!isHideVersion) {
|
||||||
Spacer(Modifier.height(4.dp))
|
Spacer(Modifier.height(4.dp))
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(R.string.home_working_version, ksuVersion),
|
text = stringResource(R.string.home_working_version, systemStatus.ksuVersion),
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
)
|
)
|
||||||
@@ -533,7 +472,7 @@ private fun StatusCard(
|
|||||||
)
|
)
|
||||||
|
|
||||||
val kpmVersion = getKpmVersion()
|
val kpmVersion = getKpmVersion()
|
||||||
if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error") && showKpmInfo) {
|
if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error") && showKpmInfo && Natives.version >= Natives.MINIMAL_SUPPORTED_KPM) {
|
||||||
Spacer(Modifier.height(4.dp))
|
Spacer(Modifier.height(4.dp))
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(R.string.home_kpm_module, getKpmModuleCount()),
|
text = stringResource(R.string.home_kpm_module, getKpmModuleCount()),
|
||||||
@@ -542,29 +481,10 @@ private fun StatusCard(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isHideSusfsStatus) {
|
|
||||||
Spacer(modifier = Modifier.height(4.dp))
|
|
||||||
|
|
||||||
val suSFS = getSuSFS()
|
|
||||||
if (lkmMode != true) {
|
|
||||||
val translatedStatus = when (suSFS) {
|
|
||||||
"Supported" -> stringResource(R.string.status_supported)
|
|
||||||
"Not Supported" -> stringResource(R.string.status_not_supported)
|
|
||||||
else -> stringResource(R.string.status_unknown)
|
|
||||||
}
|
|
||||||
|
|
||||||
Text(
|
|
||||||
text = stringResource(R.string.home_susfs, translatedStatus),
|
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
kernelVersion.isGKI() -> {
|
systemStatus.kernelVersion.isGKI() -> {
|
||||||
Icon(
|
Icon(
|
||||||
Icons.Outlined.Warning,
|
Icons.Outlined.Warning,
|
||||||
contentDescription = stringResource(R.string.home_not_installed),
|
contentDescription = stringResource(R.string.home_not_installed),
|
||||||
@@ -619,7 +539,7 @@ private fun StatusCard(
|
|||||||
@Composable
|
@Composable
|
||||||
fun WarningCard(
|
fun WarningCard(
|
||||||
message: String,
|
message: String,
|
||||||
color: Color = MaterialTheme.colorScheme.errorContainer,
|
color: Color = MaterialTheme.colorScheme.error,
|
||||||
onClick: (() -> Unit)? = null
|
onClick: (() -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
@@ -631,7 +551,6 @@ fun WarningCard(
|
|||||||
.shadow(
|
.shadow(
|
||||||
elevation = cardElevation,
|
elevation = cardElevation,
|
||||||
shape = MaterialTheme.shapes.large,
|
shape = MaterialTheme.shapes.large,
|
||||||
spotColor = MaterialTheme.colorScheme.error.copy(alpha = 0.1f)
|
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
Row(
|
Row(
|
||||||
@@ -641,14 +560,6 @@ fun WarningCard(
|
|||||||
.padding(24.dp),
|
.padding(24.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Filled.Warning,
|
|
||||||
contentDescription = null,
|
|
||||||
tint = MaterialTheme.colorScheme.onErrorContainer,
|
|
||||||
modifier = Modifier
|
|
||||||
.padding(end = 16.dp)
|
|
||||||
.size(28.dp)
|
|
||||||
)
|
|
||||||
Text(
|
Text(
|
||||||
text = message,
|
text = message,
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
@@ -664,7 +575,7 @@ fun ContributionCard() {
|
|||||||
val links = listOf("https://github.com/ShirkNeko", "https://github.com/udochina")
|
val links = listOf("https://github.com/ShirkNeko", "https://github.com/udochina")
|
||||||
|
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainerHigh),
|
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainer),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -710,7 +621,7 @@ fun LearnMoreCard() {
|
|||||||
val url = stringResource(R.string.home_learn_kernelsu_url)
|
val url = stringResource(R.string.home_learn_kernelsu_url)
|
||||||
|
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainerHigh),
|
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainer),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -753,7 +664,7 @@ fun DonateCard() {
|
|||||||
val uriHandler = LocalUriHandler.current
|
val uriHandler = LocalUriHandler.current
|
||||||
|
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainerHigh),
|
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainer),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -792,16 +703,17 @@ fun DonateCard() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun InfoCard() {
|
private fun InfoCard(
|
||||||
val lkmMode = Natives.isLkmMode
|
systemInfo: HomeViewModel.SystemInfo,
|
||||||
val context = LocalContext.current
|
isSimpleMode: Boolean,
|
||||||
val isSimpleMode = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
isHideVersion: Boolean,
|
||||||
.getBoolean("is_simple_mode", false)
|
isHideOtherInfo: Boolean,
|
||||||
val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
isHideSusfsStatus: Boolean,
|
||||||
.getBoolean("show_kpm_info", true)
|
showKpmInfo: Boolean,
|
||||||
|
lkmMode: Boolean?
|
||||||
|
) {
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainerHighest),
|
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainer),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -816,17 +728,13 @@ private fun InfoCard() {
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(start = 24.dp, top = 24.dp, end = 24.dp, bottom = 16.dp),
|
.padding(start = 24.dp, top = 24.dp, end = 24.dp, bottom = 16.dp),
|
||||||
) withContext@{
|
) {
|
||||||
val contents = StringBuilder()
|
|
||||||
val uname = Os.uname()
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun InfoCardItem(
|
fun InfoCardItem(
|
||||||
label: String,
|
label: String,
|
||||||
content: String,
|
content: String,
|
||||||
icon: ImageVector = Icons.Default.Info
|
icon: ImageVector = Icons.Default.Info
|
||||||
) {
|
) {
|
||||||
contents.appendLine(label).appendLine(content).appendLine()
|
|
||||||
Row(
|
Row(
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
@@ -862,82 +770,70 @@ private fun InfoCard() {
|
|||||||
|
|
||||||
InfoCardItem(
|
InfoCardItem(
|
||||||
stringResource(R.string.home_kernel),
|
stringResource(R.string.home_kernel),
|
||||||
"${uname.release} (${uname.machine})",
|
systemInfo.kernelRelease,
|
||||||
icon = Icons.Default.Memory,
|
icon = Icons.Default.Memory,
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!isSimpleMode) {
|
if (!isSimpleMode) {
|
||||||
val androidVersion = Build.VERSION.RELEASE
|
|
||||||
InfoCardItem(
|
InfoCardItem(
|
||||||
stringResource(R.string.home_android_version),
|
stringResource(R.string.home_android_version),
|
||||||
androidVersion,
|
systemInfo.androidVersion,
|
||||||
icon = Icons.Default.Android,
|
icon = Icons.Default.Android,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val deviceModel = getDeviceModel()
|
|
||||||
InfoCardItem(
|
InfoCardItem(
|
||||||
stringResource(R.string.home_device_model),
|
stringResource(R.string.home_device_model),
|
||||||
deviceModel,
|
systemInfo.deviceModel,
|
||||||
icon = Icons.Default.PhoneAndroid,
|
icon = Icons.Default.PhoneAndroid,
|
||||||
)
|
)
|
||||||
|
|
||||||
val managerVersion = getManagerVersion(context)
|
|
||||||
InfoCardItem(
|
InfoCardItem(
|
||||||
stringResource(R.string.home_manager_version),
|
stringResource(R.string.home_manager_version),
|
||||||
"${managerVersion.first} (${managerVersion.second})",
|
"${systemInfo.managerVersion.first} (${systemInfo.managerVersion.second.toInt()})",
|
||||||
icon = Icons.Default.Settings,
|
icon = Icons.Default.SettingsSuggest,
|
||||||
)
|
)
|
||||||
|
|
||||||
InfoCardItem(
|
InfoCardItem(
|
||||||
stringResource(R.string.home_selinux_status),
|
stringResource(R.string.home_selinux_status),
|
||||||
getSELinuxStatus(),
|
systemInfo.seLinuxStatus,
|
||||||
icon = Icons.Default.Security,
|
icon = Icons.Default.Security,
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!isSimpleMode) {
|
if (!isSimpleMode) {
|
||||||
if (lkmMode != true) {
|
if (lkmMode != true) {
|
||||||
val kpmVersion = getKpmVersion()
|
|
||||||
val isKpmConfigured = checkKpmConfigured()
|
|
||||||
|
|
||||||
// 根据showKpmInfo决定是否显示KPM信息
|
// 根据showKpmInfo决定是否显示KPM信息
|
||||||
if (showKpmInfo) {
|
if (showKpmInfo && Natives.version >= Natives.MINIMAL_SUPPORTED_KPM) {
|
||||||
val displayVersion = if (kpmVersion.isEmpty() || kpmVersion.startsWith("Error")) {
|
val displayVersion = if (systemInfo.kpmVersion.isEmpty() || systemInfo.kpmVersion.startsWith("Error")) {
|
||||||
val statusText = if (isKpmConfigured) {
|
val statusText = if (Natives.isKPMEnabled()) {
|
||||||
stringResource(R.string.kernel_patched)
|
stringResource(R.string.kernel_patched)
|
||||||
} else {
|
} else {
|
||||||
stringResource(R.string.kernel_not_enabled)
|
stringResource(R.string.kernel_not_enabled)
|
||||||
}
|
}
|
||||||
"${stringResource(R.string.not_supported)} ($statusText)"
|
"${stringResource(R.string.not_supported)} ($statusText)"
|
||||||
} else {
|
} else {
|
||||||
"${stringResource(R.string.supported)} ($kpmVersion)"
|
"${stringResource(R.string.supported)} (${systemInfo.kpmVersion})"
|
||||||
}
|
}
|
||||||
|
|
||||||
InfoCardItem(
|
InfoCardItem(
|
||||||
stringResource(R.string.home_kpm_version),
|
stringResource(R.string.home_kpm_version),
|
||||||
displayVersion,
|
displayVersion,
|
||||||
icon = Icons.Default.Code
|
icon = Icons.Default.Archive
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val isHideSusfsStatus = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_susfs_status", false)
|
|
||||||
|
|
||||||
if ((!isSimpleMode) && (!isHideSusfsStatus)) {
|
if ((!isSimpleMode) && (!isHideSusfsStatus)) {
|
||||||
val suSFS = getSuSFS()
|
if (systemInfo.suSFSStatus == "Supported") {
|
||||||
if (suSFS == "Supported") {
|
if (systemInfo.suSFSVersion.isNotEmpty()) {
|
||||||
val suSFSVersion = getSuSFSVersion()
|
val isSUS_SU = systemInfo.suSFSFeatures == "CONFIG_KSU_SUSFS_SUS_SU"
|
||||||
if (suSFSVersion.isNotEmpty()) {
|
|
||||||
val isSUS_SU = getSuSFSFeatures() == "CONFIG_KSU_SUSFS_SUS_SU"
|
|
||||||
val infoText = buildString {
|
val infoText = buildString {
|
||||||
append(suSFSVersion)
|
append(systemInfo.suSFSVersion)
|
||||||
append(if (isSUS_SU) " (${getSuSFSVariant()})" else " (${stringResource(R.string.manual_hook)})")
|
append(if (isSUS_SU) " (${systemInfo.suSFSVariant})" else " (${stringResource(R.string.manual_hook)})")
|
||||||
if (isSUS_SU) {
|
if (isSUS_SU) {
|
||||||
val susSUMode = try { susfsSUS_SU_Mode().toString() } catch (_: Exception) { "" }
|
if (systemInfo.susSUMode.isNotEmpty()) {
|
||||||
if (susSUMode.isNotEmpty()) {
|
append(" ${stringResource(R.string.sus_su_mode)} ${systemInfo.susSUMode}")
|
||||||
append(" ${stringResource(R.string.sus_su_mode)} $susSUMode")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -964,10 +860,45 @@ fun getManagerVersion(context: Context): Pair<String, Long> {
|
|||||||
@Composable
|
@Composable
|
||||||
private fun StatusCardPreview() {
|
private fun StatusCardPreview() {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
|
Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||||
StatusCard(KernelVersion(5, 10, 101), 1, null)
|
StatusCard(
|
||||||
StatusCard(KernelVersion(5, 10, 101), 20000, true)
|
HomeViewModel.SystemStatus(
|
||||||
StatusCard(KernelVersion(5, 10, 101), null, true)
|
isManager = true,
|
||||||
StatusCard(KernelVersion(4, 10, 101), null, false)
|
ksuVersion = 1,
|
||||||
|
lkmMode = null,
|
||||||
|
kernelVersion = KernelVersion(5, 10, 101),
|
||||||
|
isRootAvailable = true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
StatusCard(
|
||||||
|
HomeViewModel.SystemStatus(
|
||||||
|
isManager = true,
|
||||||
|
ksuVersion = 20000,
|
||||||
|
lkmMode = true,
|
||||||
|
kernelVersion = KernelVersion(5, 10, 101),
|
||||||
|
isRootAvailable = true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
StatusCard(
|
||||||
|
HomeViewModel.SystemStatus(
|
||||||
|
isManager = false,
|
||||||
|
ksuVersion = null,
|
||||||
|
lkmMode = true,
|
||||||
|
kernelVersion = KernelVersion(5, 10, 101),
|
||||||
|
isRootAvailable = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
StatusCard(
|
||||||
|
HomeViewModel.SystemStatus(
|
||||||
|
isManager = false,
|
||||||
|
ksuVersion = null,
|
||||||
|
lkmMode = false,
|
||||||
|
kernelVersion = KernelVersion(4, 10, 101),
|
||||||
|
isRootAvailable = false
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -978,54 +909,11 @@ private fun WarningCardPreview() {
|
|||||||
WarningCard(message = "Warning message")
|
WarningCard(message = "Warning message")
|
||||||
WarningCard(
|
WarningCard(
|
||||||
message = "Warning message ",
|
message = "Warning message ",
|
||||||
MaterialTheme.colorScheme.tertiaryContainer,
|
MaterialTheme.colorScheme.outlineVariant,
|
||||||
onClick = {})
|
onClick = {})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("PrivateApi")
|
|
||||||
private fun getDeviceModel(): String {
|
|
||||||
return try {
|
|
||||||
val systemProperties = Class.forName("android.os.SystemProperties")
|
|
||||||
val getMethod = systemProperties.getMethod("get", String::class.java, String::class.java)
|
|
||||||
val marketNameKeys = listOf(
|
|
||||||
"ro.product.marketname", // Xiaomi
|
|
||||||
"ro.vendor.oplus.market.name", // Oppo, OnePlus, Realme
|
|
||||||
"ro.vivo.market.name", // Vivo
|
|
||||||
"ro.config.marketing_name" // Huawei
|
|
||||||
)
|
|
||||||
for (key in marketNameKeys) {
|
|
||||||
val marketName = getMethod.invoke(null, key, "") as String
|
|
||||||
if (marketName.isNotEmpty()) {
|
|
||||||
return marketName
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Build.DEVICE
|
|
||||||
} catch (_: Exception) {
|
|
||||||
Build.DEVICE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun checkKpmConfigured(): Boolean {
|
|
||||||
try {
|
|
||||||
val process = Runtime.getRuntime().exec("su -c cat /proc/config.gz")
|
|
||||||
val inputStream = process.inputStream
|
|
||||||
val gzipInputStream = GZIPInputStream(inputStream)
|
|
||||||
val reader = BufferedReader(InputStreamReader(gzipInputStream))
|
|
||||||
|
|
||||||
var line: String?
|
|
||||||
while (reader.readLine().also { line = it } != null) {
|
|
||||||
if (line?.contains("CONFIG_KPM=y") == true) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
reader.close()
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("UnnecessaryComposedModifier")
|
@SuppressLint("UnnecessaryComposedModifier")
|
||||||
fun Modifier.disableOverscroll(): Modifier = composed {
|
fun Modifier.disableOverscroll(): Modifier = composed {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ import androidx.compose.material3.TopAppBarDefaults
|
|||||||
import androidx.compose.material3.TopAppBarScrollBehavior
|
import androidx.compose.material3.TopAppBarScrollBehavior
|
||||||
import androidx.compose.material3.rememberTopAppBarState
|
import androidx.compose.material3.rememberTopAppBarState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.produceState
|
import androidx.compose.runtime.produceState
|
||||||
@@ -75,12 +74,10 @@ import com.maxkeppeler.sheets.list.models.ListSelection
|
|||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.annotation.RootGraph
|
import com.ramcosta.composedestinations.annotation.RootGraph
|
||||||
import com.ramcosta.composedestinations.generated.destinations.FlashScreenDestination
|
import com.ramcosta.composedestinations.generated.destinations.FlashScreenDestination
|
||||||
|
import com.ramcosta.composedestinations.generated.destinations.KernelFlashScreenDestination
|
||||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
|
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
import com.sukisu.ultra.flash.HorizonKernelFlashProgress
|
|
||||||
import com.sukisu.ultra.flash.HorizonKernelState
|
|
||||||
import com.sukisu.ultra.flash.HorizonKernelWorker
|
|
||||||
import com.sukisu.ultra.ui.component.DialogHandle
|
import com.sukisu.ultra.ui.component.DialogHandle
|
||||||
import com.sukisu.ultra.ui.component.SlotSelectionDialog
|
import com.sukisu.ultra.ui.component.SlotSelectionDialog
|
||||||
import com.sukisu.ultra.ui.component.rememberConfirmDialog
|
import com.sukisu.ultra.ui.component.rememberConfirmDialog
|
||||||
@@ -97,8 +94,8 @@ import com.sukisu.ultra.ui.util.rootAvailable
|
|||||||
import com.sukisu.ultra.getKernelVersion
|
import com.sukisu.ultra.getKernelVersion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author weishu
|
* @author ShirkNeko
|
||||||
* @date 2024/3/12.
|
* @date 2025/5/31.
|
||||||
*/
|
*/
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Destination<RootGraph>
|
@Destination<RootGraph>
|
||||||
@@ -110,16 +107,10 @@ fun InstallScreen(navigator: DestinationsNavigator) {
|
|||||||
var showRebootDialog by remember { mutableStateOf(false) }
|
var showRebootDialog by remember { mutableStateOf(false) }
|
||||||
var showSlotSelectionDialog by remember { mutableStateOf(false) }
|
var showSlotSelectionDialog by remember { mutableStateOf(false) }
|
||||||
var tempKernelUri by remember { mutableStateOf<Uri?>(null) }
|
var tempKernelUri by remember { mutableStateOf<Uri?>(null) }
|
||||||
val horizonKernelState = remember { HorizonKernelState() }
|
|
||||||
val flashState by horizonKernelState.state.collectAsState()
|
|
||||||
val summary = stringResource(R.string.horizon_kernel_summary)
|
|
||||||
val kernelVersion = getKernelVersion()
|
val kernelVersion = getKernelVersion()
|
||||||
val isGKI = kernelVersion.isGKI()
|
val isGKI = kernelVersion.isGKI()
|
||||||
val isAbDevice = isAbDevice()
|
val isAbDevice = isAbDevice()
|
||||||
|
val summary = stringResource(R.string.horizon_kernel_summary)
|
||||||
val onFlashComplete = {
|
|
||||||
showRebootDialog = true
|
|
||||||
}
|
|
||||||
|
|
||||||
if (showRebootDialog) {
|
if (showRebootDialog) {
|
||||||
RebootDialog(
|
RebootDialog(
|
||||||
@@ -145,14 +136,12 @@ fun InstallScreen(navigator: DestinationsNavigator) {
|
|||||||
when (method) {
|
when (method) {
|
||||||
is InstallMethod.HorizonKernel -> {
|
is InstallMethod.HorizonKernel -> {
|
||||||
method.uri?.let { uri ->
|
method.uri?.let { uri ->
|
||||||
val worker = HorizonKernelWorker(
|
navigator.navigate(
|
||||||
context = context,
|
KernelFlashScreenDestination(
|
||||||
state = horizonKernelState,
|
kernelUri = uri,
|
||||||
slot = method.slot
|
selectedSlot = method.slot
|
||||||
|
)
|
||||||
)
|
)
|
||||||
worker.uri = uri
|
|
||||||
worker.setOnFlashCompleteListener(onFlashComplete)
|
|
||||||
worker.start()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
@@ -253,18 +242,9 @@ fun InstallScreen(navigator: DestinationsNavigator) {
|
|||||||
} else {
|
} else {
|
||||||
installMethod = method
|
installMethod = method
|
||||||
}
|
}
|
||||||
horizonKernelState.reset()
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
AnimatedVisibility(
|
|
||||||
visible = flashState.isFlashing && installMethod is InstallMethod.HorizonKernel,
|
|
||||||
enter = fadeIn() + expandVertically(),
|
|
||||||
exit = fadeOut() + shrinkVertically()
|
|
||||||
) {
|
|
||||||
HorizonKernelFlashProgress(flashState)
|
|
||||||
}
|
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -325,7 +305,7 @@ fun InstallScreen(navigator: DestinationsNavigator) {
|
|||||||
|
|
||||||
Button(
|
Button(
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
enabled = installMethod != null && !flashState.isFlashing,
|
enabled = installMethod != null,
|
||||||
onClick = onClickNext,
|
onClick = onClickNext,
|
||||||
shape = MaterialTheme.shapes.medium,
|
shape = MaterialTheme.shapes.medium,
|
||||||
colors = ButtonDefaults.buttonColors(
|
colors = ButtonDefaults.buttonColors(
|
||||||
@@ -752,7 +732,7 @@ private fun TopBar(
|
|||||||
onLkmUpload: () -> Unit = {},
|
onLkmUpload: () -> Unit = {},
|
||||||
scrollBehavior: TopAppBarScrollBehavior? = null
|
scrollBehavior: TopAppBarScrollBehavior? = null
|
||||||
) {
|
) {
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = cardAlpha
|
val cardAlpha = cardAlpha
|
||||||
|
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
|
|||||||
@@ -0,0 +1,411 @@
|
|||||||
|
package com.sukisu.ultra.ui.screen
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Environment
|
||||||
|
import androidx.activity.compose.BackHandler
|
||||||
|
import androidx.compose.animation.core.animateFloatAsState
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.foundation.rememberScrollState
|
||||||
|
import androidx.compose.foundation.verticalScroll
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||||
|
import androidx.compose.material.icons.filled.CheckCircle
|
||||||
|
import androidx.compose.material.icons.filled.Error
|
||||||
|
import androidx.compose.material.icons.filled.Refresh
|
||||||
|
import androidx.compose.material.icons.filled.Save
|
||||||
|
import androidx.compose.material3.*
|
||||||
|
import androidx.compose.runtime.*
|
||||||
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.text.font.FontFamily
|
||||||
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
|
import com.ramcosta.composedestinations.annotation.RootGraph
|
||||||
|
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
|
import com.sukisu.ultra.R
|
||||||
|
import com.sukisu.ultra.flash.HorizonKernelState
|
||||||
|
import com.sukisu.ultra.flash.HorizonKernelWorker
|
||||||
|
import com.sukisu.ultra.ui.component.KeyEventBlocker
|
||||||
|
import com.sukisu.ultra.ui.util.*
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
import java.io.File
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.*
|
||||||
|
import androidx.compose.ui.input.key.Key
|
||||||
|
import androidx.compose.ui.input.key.key
|
||||||
|
import com.sukisu.ultra.ui.theme.CardConfig
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
|
private object KernelFlashStateHolder {
|
||||||
|
var currentState: HorizonKernelState? = null
|
||||||
|
var currentUri: Uri? = null
|
||||||
|
var currentSlot: String? = null
|
||||||
|
var isFlashing = false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kernel刷写界面
|
||||||
|
*/
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
@Destination<RootGraph>
|
||||||
|
@Composable
|
||||||
|
fun KernelFlashScreen(
|
||||||
|
navigator: DestinationsNavigator,
|
||||||
|
kernelUri: Uri,
|
||||||
|
selectedSlot: String? = null
|
||||||
|
) {
|
||||||
|
val context = LocalContext.current
|
||||||
|
val scrollState = rememberScrollState()
|
||||||
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||||
|
val snackBarHost = LocalSnackbarHost.current
|
||||||
|
val scope = rememberCoroutineScope()
|
||||||
|
var logText by rememberSaveable { mutableStateOf("") }
|
||||||
|
var showFloatAction by rememberSaveable { mutableStateOf(false) }
|
||||||
|
val logContent = rememberSaveable { StringBuilder() }
|
||||||
|
val horizonKernelState = remember {
|
||||||
|
if (KernelFlashStateHolder.currentState != null &&
|
||||||
|
KernelFlashStateHolder.currentUri == kernelUri &&
|
||||||
|
KernelFlashStateHolder.currentSlot == selectedSlot) {
|
||||||
|
KernelFlashStateHolder.currentState!!
|
||||||
|
} else {
|
||||||
|
HorizonKernelState().also {
|
||||||
|
KernelFlashStateHolder.currentState = it
|
||||||
|
KernelFlashStateHolder.currentUri = kernelUri
|
||||||
|
KernelFlashStateHolder.currentSlot = selectedSlot
|
||||||
|
KernelFlashStateHolder.isFlashing = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val flashState by horizonKernelState.state.collectAsState()
|
||||||
|
val logSavedString = stringResource(R.string.log_saved)
|
||||||
|
|
||||||
|
val onFlashComplete = {
|
||||||
|
showFloatAction = true
|
||||||
|
KernelFlashStateHolder.isFlashing = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始刷写
|
||||||
|
LaunchedEffect(Unit) {
|
||||||
|
if (!KernelFlashStateHolder.isFlashing && !flashState.isCompleted && flashState.error.isEmpty()) {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
KernelFlashStateHolder.isFlashing = true
|
||||||
|
val worker = HorizonKernelWorker(
|
||||||
|
context = context,
|
||||||
|
state = horizonKernelState,
|
||||||
|
slot = selectedSlot
|
||||||
|
)
|
||||||
|
worker.uri = kernelUri
|
||||||
|
worker.setOnFlashCompleteListener(onFlashComplete)
|
||||||
|
worker.start()
|
||||||
|
|
||||||
|
// 监听日志更新
|
||||||
|
while (!flashState.isCompleted && flashState.error.isEmpty()) {
|
||||||
|
if (flashState.logs.isNotEmpty()) {
|
||||||
|
logText = flashState.logs.joinToString("\n")
|
||||||
|
logContent.clear()
|
||||||
|
logContent.append(logText)
|
||||||
|
}
|
||||||
|
kotlinx.coroutines.delay(100)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flashState.error.isNotEmpty()) {
|
||||||
|
logText += "\n${flashState.error}\n"
|
||||||
|
logContent.append("\n${flashState.error}\n")
|
||||||
|
KernelFlashStateHolder.isFlashing = false
|
||||||
|
} else if (flashState.isCompleted) {
|
||||||
|
logText += "\n${context.getString(R.string.horizon_flash_complete)}\n\n\n"
|
||||||
|
logContent.append("\n${context.getString(R.string.horizon_flash_complete)}\n\n\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logText = flashState.logs.joinToString("\n")
|
||||||
|
if (flashState.error.isNotEmpty()) {
|
||||||
|
logText += "\n${flashState.error}\n"
|
||||||
|
} else if (flashState.isCompleted) {
|
||||||
|
logText += "\n${context.getString(R.string.horizon_flash_complete)}\n\n\n"
|
||||||
|
showFloatAction = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val onBack: () -> Unit = {
|
||||||
|
if (!flashState.isFlashing || flashState.isCompleted || flashState.error.isNotEmpty()) {
|
||||||
|
// 清理全局状态
|
||||||
|
if (flashState.isCompleted || flashState.error.isNotEmpty()) {
|
||||||
|
KernelFlashStateHolder.currentState = null
|
||||||
|
KernelFlashStateHolder.currentUri = null
|
||||||
|
KernelFlashStateHolder.currentSlot = null
|
||||||
|
KernelFlashStateHolder.isFlashing = false
|
||||||
|
}
|
||||||
|
navigator.popBackStack()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BackHandler(enabled = true) {
|
||||||
|
onBack()
|
||||||
|
}
|
||||||
|
|
||||||
|
Scaffold(
|
||||||
|
topBar = {
|
||||||
|
TopBar(
|
||||||
|
flashState = flashState,
|
||||||
|
onBack = onBack,
|
||||||
|
onSave = {
|
||||||
|
scope.launch {
|
||||||
|
val format = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.getDefault())
|
||||||
|
val date = format.format(Date())
|
||||||
|
val file = File(
|
||||||
|
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
|
||||||
|
"KernelSU_kernel_flash_log_${date}.log"
|
||||||
|
)
|
||||||
|
file.writeText(logContent.toString())
|
||||||
|
snackBarHost.showSnackbar(logSavedString.format(file.absolutePath))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
scrollBehavior = scrollBehavior
|
||||||
|
)
|
||||||
|
},
|
||||||
|
floatingActionButton = {
|
||||||
|
if (showFloatAction) {
|
||||||
|
ExtendedFloatingActionButton(
|
||||||
|
onClick = {
|
||||||
|
scope.launch {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
reboot()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
icon = {
|
||||||
|
Icon(
|
||||||
|
Icons.Filled.Refresh,
|
||||||
|
contentDescription = stringResource(id = R.string.reboot)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
text = {
|
||||||
|
Text(text = stringResource(id = R.string.reboot))
|
||||||
|
},
|
||||||
|
containerColor = MaterialTheme.colorScheme.secondaryContainer,
|
||||||
|
contentColor = MaterialTheme.colorScheme.onSecondaryContainer,
|
||||||
|
expanded = true
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
snackbarHost = { SnackbarHost(hostState = snackBarHost) },
|
||||||
|
contentWindowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal),
|
||||||
|
containerColor = MaterialTheme.colorScheme.background
|
||||||
|
) { innerPadding ->
|
||||||
|
KeyEventBlocker {
|
||||||
|
it.key == Key.VolumeDown || it.key == Key.VolumeUp
|
||||||
|
}
|
||||||
|
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(innerPadding)
|
||||||
|
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||||
|
) {
|
||||||
|
FlashProgressIndicator(flashState)
|
||||||
|
Box(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.weight(1f)
|
||||||
|
.verticalScroll(scrollState)
|
||||||
|
) {
|
||||||
|
LaunchedEffect(logText) {
|
||||||
|
scrollState.animateScrollTo(scrollState.maxValue)
|
||||||
|
}
|
||||||
|
Text(
|
||||||
|
modifier = Modifier.padding(16.dp),
|
||||||
|
text = logText,
|
||||||
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
fontFamily = FontFamily.Monospace,
|
||||||
|
color = MaterialTheme.colorScheme.onSurface
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun FlashProgressIndicator(flashState: com.sukisu.ultra.flash.FlashState) {
|
||||||
|
val progressColor = when {
|
||||||
|
flashState.error.isNotEmpty() -> MaterialTheme.colorScheme.error
|
||||||
|
flashState.isCompleted -> MaterialTheme.colorScheme.tertiary
|
||||||
|
else -> MaterialTheme.colorScheme.primary
|
||||||
|
}
|
||||||
|
|
||||||
|
val progress = animateFloatAsState(
|
||||||
|
targetValue = flashState.progress,
|
||||||
|
label = "FlashProgress"
|
||||||
|
)
|
||||||
|
|
||||||
|
Card(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(16.dp),
|
||||||
|
colors = CardDefaults.cardColors(
|
||||||
|
containerColor = MaterialTheme.colorScheme.surfaceVariant
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(16.dp)
|
||||||
|
) {
|
||||||
|
Row(
|
||||||
|
modifier = Modifier.fillMaxWidth(),
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
horizontalArrangement = Arrangement.SpaceBetween
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = when {
|
||||||
|
flashState.error.isNotEmpty() -> stringResource(R.string.flash_failed)
|
||||||
|
flashState.isCompleted -> stringResource(R.string.flash_success)
|
||||||
|
else -> stringResource(R.string.flashing)
|
||||||
|
},
|
||||||
|
style = MaterialTheme.typography.titleMedium,
|
||||||
|
fontWeight = FontWeight.Bold,
|
||||||
|
color = progressColor
|
||||||
|
)
|
||||||
|
|
||||||
|
when {
|
||||||
|
flashState.error.isNotEmpty() -> {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.Error,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.error
|
||||||
|
)
|
||||||
|
}
|
||||||
|
flashState.isCompleted -> {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.CheckCircle,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.tertiary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
if (flashState.currentStep.isNotEmpty()) {
|
||||||
|
Text(
|
||||||
|
text = flashState.currentStep,
|
||||||
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
}
|
||||||
|
|
||||||
|
LinearProgressIndicator(
|
||||||
|
progress = { progress.value },
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.height(8.dp),
|
||||||
|
color = progressColor,
|
||||||
|
trackColor = MaterialTheme.colorScheme.surfaceVariant
|
||||||
|
)
|
||||||
|
|
||||||
|
if (flashState.error.isNotEmpty()) {
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
Row(
|
||||||
|
verticalAlignment = Alignment.CenterVertically
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.Error,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.error,
|
||||||
|
modifier = Modifier.size(16.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(4.dp))
|
||||||
|
|
||||||
|
Text(
|
||||||
|
text = flashState.error,
|
||||||
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
color = MaterialTheme.colorScheme.error,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.background(
|
||||||
|
MaterialTheme.colorScheme.errorContainer.copy(alpha = 0.3f),
|
||||||
|
shape = MaterialTheme.shapes.small
|
||||||
|
)
|
||||||
|
.padding(8.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
@Composable
|
||||||
|
private fun TopBar(
|
||||||
|
flashState: com.sukisu.ultra.flash.FlashState,
|
||||||
|
onBack: () -> Unit,
|
||||||
|
onSave: () -> Unit = {},
|
||||||
|
scrollBehavior: TopAppBarScrollBehavior? = null
|
||||||
|
) {
|
||||||
|
val statusColor = when {
|
||||||
|
flashState.error.isNotEmpty() -> MaterialTheme.colorScheme.error
|
||||||
|
flashState.isCompleted -> MaterialTheme.colorScheme.tertiary
|
||||||
|
else -> MaterialTheme.colorScheme.primary
|
||||||
|
}
|
||||||
|
|
||||||
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
|
TopAppBar(
|
||||||
|
title = {
|
||||||
|
Text(
|
||||||
|
text = stringResource(
|
||||||
|
when {
|
||||||
|
flashState.error.isNotEmpty() -> R.string.flash_failed
|
||||||
|
flashState.isCompleted -> R.string.flash_success
|
||||||
|
else -> R.string.kernel_flashing
|
||||||
|
}
|
||||||
|
),
|
||||||
|
style = MaterialTheme.typography.titleLarge,
|
||||||
|
color = statusColor
|
||||||
|
)
|
||||||
|
},
|
||||||
|
navigationIcon = {
|
||||||
|
IconButton(onClick = onBack) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.onSurface
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
colors = TopAppBarDefaults.topAppBarColors(
|
||||||
|
containerColor = cardColor.copy(alpha = cardAlpha),
|
||||||
|
scrolledContainerColor = cardColor.copy(alpha = cardAlpha)
|
||||||
|
),
|
||||||
|
actions = {
|
||||||
|
IconButton(onClick = onSave) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Filled.Save,
|
||||||
|
contentDescription = stringResource(id = R.string.save_log),
|
||||||
|
tint = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
windowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal),
|
||||||
|
scrollBehavior = scrollBehavior
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import android.app.Activity.*
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.util.Log
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
@@ -64,17 +65,20 @@ import okhttp3.OkHttpClient
|
|||||||
import com.sukisu.ultra.ui.util.ModuleModify
|
import com.sukisu.ultra.ui.util.ModuleModify
|
||||||
import com.sukisu.ultra.ui.theme.getCardColors
|
import com.sukisu.ultra.ui.theme.getCardColors
|
||||||
import com.sukisu.ultra.ui.viewmodel.ModuleViewModel
|
import com.sukisu.ultra.ui.viewmodel.ModuleViewModel
|
||||||
import java.io.BufferedReader
|
import java.util.concurrent.TimeUnit
|
||||||
import java.io.InputStreamReader
|
|
||||||
import java.util.zip.ZipInputStream
|
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
import com.sukisu.ultra.ui.theme.CardConfig.cardElevation
|
import com.sukisu.ultra.ui.theme.CardConfig.cardElevation
|
||||||
import com.sukisu.ultra.ui.webui.WebUIXActivity
|
import com.sukisu.ultra.ui.webui.WebUIXActivity
|
||||||
import com.dergoogler.mmrl.platform.Platform
|
import com.dergoogler.mmrl.platform.Platform
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
|
import com.dergoogler.mmrl.platform.model.ModuleConfig
|
||||||
|
import com.dergoogler.mmrl.platform.model.ModuleConfig.Companion.asModuleConfig
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Destination<RootGraph>
|
@Destination<RootGraph>
|
||||||
@Composable
|
@Composable
|
||||||
@@ -84,6 +88,7 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
val snackBarHost = LocalSnackbarHost.current
|
val snackBarHost = LocalSnackbarHost.current
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
val confirmDialog = rememberConfirmDialog()
|
val confirmDialog = rememberConfirmDialog()
|
||||||
|
var lastClickTime by remember { mutableStateOf(0L) }
|
||||||
|
|
||||||
val selectZipLauncher = rememberLauncherForActivityResult(
|
val selectZipLauncher = rememberLauncherForActivityResult(
|
||||||
contract = ActivityResultContracts.StartActivityForResult()
|
contract = ActivityResultContracts.StartActivityForResult()
|
||||||
@@ -96,38 +101,21 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
scope.launch {
|
scope.launch {
|
||||||
val clipData = data.clipData
|
val clipData = data.clipData
|
||||||
if (clipData != null) {
|
if (clipData != null) {
|
||||||
// 处理多选结果
|
val selectedModules = mutableListOf<Uri>()
|
||||||
val selectedModules = mutableSetOf<Uri>()
|
|
||||||
val selectedModuleNames = mutableMapOf<Uri, String>()
|
val selectedModuleNames = mutableMapOf<Uri, String>()
|
||||||
|
|
||||||
suspend fun processUri(uri: Uri) {
|
fun processUri(uri: Uri) {
|
||||||
val moduleName = withContext(Dispatchers.IO) {
|
|
||||||
try {
|
try {
|
||||||
val zipInputStream = ZipInputStream(context.contentResolver.openInputStream(uri))
|
if (!ModuleUtils.isUriAccessible(context, uri)) {
|
||||||
var entry = zipInputStream.nextEntry
|
return
|
||||||
var name = context.getString(R.string.unknown_module)
|
|
||||||
|
|
||||||
while (entry != null) {
|
|
||||||
if (entry.name == "module.prop") {
|
|
||||||
val reader = BufferedReader(InputStreamReader(zipInputStream))
|
|
||||||
var line: String?
|
|
||||||
while (reader.readLine().also { line = it } != null) {
|
|
||||||
if (line?.startsWith("name=") == true) {
|
|
||||||
name = line.substringAfter("=")
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
entry = zipInputStream.nextEntry
|
|
||||||
}
|
|
||||||
name
|
|
||||||
} catch (e: Exception) {
|
|
||||||
context.getString(R.string.unknown_module)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
ModuleUtils.takePersistableUriPermission(context, uri)
|
||||||
|
val moduleName = ModuleUtils.extractModuleName(context, uri)
|
||||||
selectedModules.add(uri)
|
selectedModules.add(uri)
|
||||||
selectedModuleNames[uri] = moduleName
|
selectedModuleNames[uri] = moduleName
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("ModuleScreen", "Error while processing URI: $uri, Error: ${e.message}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i in 0 until clipData.itemCount) {
|
for (i in 0 until clipData.itemCount) {
|
||||||
@@ -135,7 +123,11 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
processUri(uri)
|
processUri(uri)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 显示确认对话框
|
if (selectedModules.isEmpty()) {
|
||||||
|
snackBarHost.showSnackbar("Unable to access selected module files")
|
||||||
|
return@launch
|
||||||
|
}
|
||||||
|
|
||||||
val modulesList = selectedModuleNames.values.joinToString("\n• ", "• ")
|
val modulesList = selectedModuleNames.values.joinToString("\n• ", "• ")
|
||||||
val confirmResult = confirmDialog.awaitConfirm(
|
val confirmResult = confirmDialog.awaitConfirm(
|
||||||
title = context.getString(R.string.module_install),
|
title = context.getString(R.string.module_install),
|
||||||
@@ -145,40 +137,27 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (confirmResult == ConfirmResult.Confirmed) {
|
if (confirmResult == ConfirmResult.Confirmed) {
|
||||||
|
try {
|
||||||
// 批量安装模块
|
// 批量安装模块
|
||||||
selectedModules.forEach { uri ->
|
navigator.navigate(FlashScreenDestination(FlashIt.FlashModules(selectedModules)))
|
||||||
navigator.navigate(FlashScreenDestination(FlashIt.FlashModule(uri)))
|
|
||||||
}
|
|
||||||
viewModel.markNeedRefresh()
|
viewModel.markNeedRefresh()
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("ModuleScreen", "Error navigating to FlashScreen: ${e.message}")
|
||||||
|
snackBarHost.showSnackbar("Error while installing module: ${e.message}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 单个文件安装逻辑
|
|
||||||
val uri = data.data ?: return@launch
|
val uri = data.data ?: return@launch
|
||||||
val moduleName = withContext(Dispatchers.IO) {
|
// 单个安装模块
|
||||||
try {
|
try {
|
||||||
val zipInputStream = ZipInputStream(context.contentResolver.openInputStream(uri))
|
if (!ModuleUtils.isUriAccessible(context, uri)) {
|
||||||
var entry = zipInputStream.nextEntry
|
snackBarHost.showSnackbar("Unable to access selected module files")
|
||||||
var name = context.getString(R.string.unknown_module)
|
return@launch
|
||||||
|
}
|
||||||
|
|
||||||
while (entry != null) {
|
ModuleUtils.takePersistableUriPermission(context, uri)
|
||||||
if (entry.name == "module.prop") {
|
|
||||||
val reader = BufferedReader(InputStreamReader(zipInputStream))
|
val moduleName = ModuleUtils.extractModuleName(context, uri)
|
||||||
var line: String?
|
|
||||||
while (reader.readLine().also { line = it } != null) {
|
|
||||||
if (line?.startsWith("name=") == true) {
|
|
||||||
name = line.substringAfter("=")
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
entry = zipInputStream.nextEntry
|
|
||||||
}
|
|
||||||
name
|
|
||||||
} catch (e: Exception) {
|
|
||||||
context.getString(R.string.unknown_module)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val confirmResult = confirmDialog.awaitConfirm(
|
val confirmResult = confirmDialog.awaitConfirm(
|
||||||
title = context.getString(R.string.module_install),
|
title = context.getString(R.string.module_install),
|
||||||
@@ -191,6 +170,10 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
navigator.navigate(FlashScreenDestination(FlashIt.FlashModule(uri)))
|
navigator.navigate(FlashScreenDestination(FlashIt.FlashModule(uri)))
|
||||||
viewModel.markNeedRefresh()
|
viewModel.markNeedRefresh()
|
||||||
}
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("ModuleScreen", "Error processing a single URI: $uri, Error: ${e.message}")
|
||||||
|
snackBarHost.showSnackbar("Error processing module file: ${e.message}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -394,20 +377,60 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
navigator.navigate(FlashScreenDestination(FlashIt.FlashModule(it)))
|
navigator.navigate(FlashScreenDestination(FlashIt.FlashModule(it)))
|
||||||
},
|
},
|
||||||
onClickModule = { id, name, hasWebUi ->
|
onClickModule = { id, name, hasWebUi ->
|
||||||
|
val currentTime = System.currentTimeMillis()
|
||||||
|
if (currentTime - lastClickTime < 600) {
|
||||||
|
Log.d("ModuleScreen", "Click too fast, ignoring")
|
||||||
|
return@ModuleList
|
||||||
|
}
|
||||||
|
lastClickTime = currentTime
|
||||||
|
|
||||||
if (hasWebUi) {
|
if (hasWebUi) {
|
||||||
webUILauncher.launch(
|
try {
|
||||||
if (prefs.getBoolean("use_webuix", false) && Platform.isAlive) {
|
val wxEngine = Intent(context, WebUIXActivity::class.java)
|
||||||
Intent(context, WebUIXActivity::class.java)
|
|
||||||
.setData("kernelsu://webuix/$id".toUri())
|
.setData("kernelsu://webuix/$id".toUri())
|
||||||
.putExtra("id", id)
|
.putExtra("id", id)
|
||||||
.putExtra("name", name)
|
.putExtra("name", name)
|
||||||
} else {
|
|
||||||
Intent(context, WebUIActivity::class.java)
|
val ksuEngine = Intent(context, WebUIActivity::class.java)
|
||||||
.setData("kernelsu://webui/$id".toUri())
|
.setData("kernelsu://webui/$id".toUri())
|
||||||
.putExtra("id", id)
|
.putExtra("id", id)
|
||||||
.putExtra("name", name)
|
.putExtra("name", name)
|
||||||
|
|
||||||
|
val config = try {
|
||||||
|
id.asModuleConfig
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("ModuleScreen", "Failed to get config from id: $id", e)
|
||||||
|
null
|
||||||
}
|
}
|
||||||
)
|
|
||||||
|
val globalEngine = prefs.getString("webui_engine", "default") ?: "default"
|
||||||
|
val moduleEngine = config?.getWebuiEngine(context)
|
||||||
|
val selectedEngine = when (globalEngine) {
|
||||||
|
"wx" -> wxEngine
|
||||||
|
"ksu" -> ksuEngine
|
||||||
|
"default" -> {
|
||||||
|
when (moduleEngine) {
|
||||||
|
"wx" -> wxEngine
|
||||||
|
"ksu" -> ksuEngine
|
||||||
|
else -> {
|
||||||
|
if (Platform.isAlive) {
|
||||||
|
wxEngine
|
||||||
|
} else {
|
||||||
|
ksuEngine
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> ksuEngine
|
||||||
|
}
|
||||||
|
webUILauncher.launch(selectedEngine)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("ModuleScreen", "Error launching WebUI: ${e.message}", e)
|
||||||
|
scope.launch {
|
||||||
|
snackBarHost.showSnackbar("Error launching WebUI: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return@ModuleList
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
context = context,
|
context = context,
|
||||||
@@ -445,6 +468,7 @@ private fun ModuleList(
|
|||||||
val downloadingText = stringResource(R.string.module_downloading)
|
val downloadingText = stringResource(R.string.module_downloading)
|
||||||
val startDownloadingText = stringResource(R.string.module_start_downloading)
|
val startDownloadingText = stringResource(R.string.module_start_downloading)
|
||||||
val fetchChangeLogFailed = stringResource(R.string.module_changelog_failed)
|
val fetchChangeLogFailed = stringResource(R.string.module_changelog_failed)
|
||||||
|
val downloadErrorText = stringResource(R.string.module_download_error)
|
||||||
|
|
||||||
val loadingDialog = rememberLoadingDialog()
|
val loadingDialog = rememberLoadingDialog()
|
||||||
val confirmDialog = rememberConfirmDialog()
|
val confirmDialog = rememberConfirmDialog()
|
||||||
@@ -455,12 +479,20 @@ private fun ModuleList(
|
|||||||
downloadUrl: String,
|
downloadUrl: String,
|
||||||
fileName: String
|
fileName: String
|
||||||
) {
|
) {
|
||||||
|
val client = OkHttpClient.Builder()
|
||||||
|
.connectTimeout(15, TimeUnit.SECONDS)
|
||||||
|
.readTimeout(30, TimeUnit.SECONDS)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val request = okhttp3.Request.Builder()
|
||||||
|
.url(changelogUrl)
|
||||||
|
.header("User-Agent", "SukiSU-Ultra/2.0")
|
||||||
|
.build()
|
||||||
|
|
||||||
val changelogResult = loadingDialog.withLoading {
|
val changelogResult = loadingDialog.withLoading {
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
runCatching {
|
runCatching {
|
||||||
OkHttpClient().newCall(
|
client.newCall(request).execute().body!!.string()
|
||||||
okhttp3.Request.Builder().url(changelogUrl).build()
|
|
||||||
).execute().body!!.string()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -509,6 +541,11 @@ private fun ModuleList(
|
|||||||
launch(Dispatchers.Main) {
|
launch(Dispatchers.Main) {
|
||||||
Toast.makeText(context, downloading, Toast.LENGTH_SHORT).show()
|
Toast.makeText(context, downloading, Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
onError = { errorMsg ->
|
||||||
|
launch(Dispatchers.Main) {
|
||||||
|
Toast.makeText(context, "$downloadErrorText: $errorMsg", Toast.LENGTH_LONG).show()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -825,14 +862,6 @@ fun ModuleItem(
|
|||||||
imageVector = Icons.Outlined.PlayArrow,
|
imageVector = Icons.Outlined.PlayArrow,
|
||||||
contentDescription = null
|
contentDescription = null
|
||||||
)
|
)
|
||||||
//if (!module.hasWebUi && updateUrl.isEmpty()) {
|
|
||||||
//Text(
|
|
||||||
// modifier = Modifier.padding(start = 7.dp),
|
|
||||||
// text = stringResource(R.string.action),
|
|
||||||
// fontFamily = MaterialTheme.typography.labelMedium.fontFamily,
|
|
||||||
// fontSize = MaterialTheme.typography.labelMedium.fontSize
|
|
||||||
//)
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -851,14 +880,6 @@ fun ModuleItem(
|
|||||||
imageVector = Icons.AutoMirrored.Outlined.Wysiwyg,
|
imageVector = Icons.AutoMirrored.Outlined.Wysiwyg,
|
||||||
contentDescription = null
|
contentDescription = null
|
||||||
)
|
)
|
||||||
//if (!module.hasActionScript && updateUrl.isEmpty()) {
|
|
||||||
//Text(
|
|
||||||
// modifier = Modifier.padding(start = 7.dp),
|
|
||||||
// fontFamily = MaterialTheme.typography.labelMedium.fontFamily,
|
|
||||||
// fontSize = MaterialTheme.typography.labelMedium.fontSize,
|
|
||||||
// text = stringResource(R.string.open)
|
|
||||||
//)
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -871,20 +892,13 @@ fun ModuleItem(
|
|||||||
onClick = { onUpdate(module) },
|
onClick = { onUpdate(module) },
|
||||||
shape = ButtonDefaults.textShape,
|
shape = ButtonDefaults.textShape,
|
||||||
contentPadding = ButtonDefaults.TextButtonContentPadding,
|
contentPadding = ButtonDefaults.TextButtonContentPadding,
|
||||||
|
colors = ButtonDefaults.filledTonalButtonColors()
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
modifier = Modifier.size(20.dp),
|
modifier = Modifier.size(20.dp),
|
||||||
imageVector = Icons.Outlined.Download,
|
imageVector = Icons.Outlined.Download,
|
||||||
contentDescription = null
|
contentDescription = null
|
||||||
)
|
)
|
||||||
//if (!module.hasActionScript || !module.hasWebUi) {
|
|
||||||
//Text(
|
|
||||||
// modifier = Modifier.padding(start = 7.dp),
|
|
||||||
// fontFamily = MaterialTheme.typography.labelMedium.fontFamily,
|
|
||||||
// fontSize = MaterialTheme.typography.labelMedium.fontSize,
|
|
||||||
// text = stringResource(R.string.module_update)
|
|
||||||
//)
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -908,15 +922,6 @@ fun ModuleItem(
|
|||||||
contentDescription = null
|
contentDescription = null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
//if (!module.hasActionScript && !module.hasWebUi && updateUrl.isEmpty()) {
|
|
||||||
//Text(
|
|
||||||
// modifier = Modifier.padding(start = 7.dp),
|
|
||||||
// fontFamily = MaterialTheme.typography.labelMedium.fontFamily,
|
|
||||||
// fontSize = MaterialTheme.typography.labelMedium.fontSize,
|
|
||||||
// text = stringResource(if (!module.remove) R.string.uninstall else R.string.restore),
|
|
||||||
// color = if (!module.remove) MaterialTheme.colorScheme.onErrorContainer else MaterialTheme.colorScheme.onSecondaryContainer
|
|
||||||
//)
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -939,7 +944,8 @@ fun ModuleItemPreview() {
|
|||||||
updateJson = "",
|
updateJson = "",
|
||||||
hasWebUi = false,
|
hasWebUi = false,
|
||||||
hasActionScript = false,
|
hasActionScript = false,
|
||||||
dirId = "dirId"
|
dirId = "dirId",
|
||||||
|
config = ModuleConfig(),
|
||||||
)
|
)
|
||||||
ModuleItem(EmptyDestinationsNavigator, module, "", {}, {}, {}, {})
|
ModuleItem(EmptyDestinationsNavigator, module, "", {}, {}, {}, {})
|
||||||
}
|
}
|
||||||
@@ -28,43 +28,14 @@ import androidx.compose.foundation.layout.size
|
|||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.shape.CircleShape
|
import androidx.compose.foundation.shape.CircleShape
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||||
import androidx.compose.material.icons.automirrored.filled.NavigateNext
|
import androidx.compose.material.icons.automirrored.filled.NavigateNext
|
||||||
import androidx.compose.material.icons.filled.AcUnit
|
import androidx.compose.material.icons.filled.*
|
||||||
import androidx.compose.material.icons.filled.Brush
|
|
||||||
import androidx.compose.material.icons.filled.ColorLens
|
|
||||||
import androidx.compose.material.icons.filled.DarkMode
|
|
||||||
import androidx.compose.material.icons.filled.KeyboardArrowDown
|
|
||||||
import androidx.compose.material.icons.filled.KeyboardArrowUp
|
|
||||||
import androidx.compose.material.icons.filled.Language
|
|
||||||
import androidx.compose.material.icons.filled.LightMode
|
|
||||||
import androidx.compose.material.icons.filled.Opacity
|
|
||||||
import androidx.compose.material.icons.filled.Palette
|
|
||||||
import androidx.compose.material.icons.filled.Security
|
|
||||||
import androidx.compose.material.icons.filled.VisibilityOff
|
|
||||||
import androidx.compose.material.icons.filled.Wallpaper
|
|
||||||
import androidx.compose.material3.AlertDialog
|
import androidx.compose.material3.AlertDialog
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.HorizontalDivider
|
import androidx.compose.material3.*
|
||||||
import androidx.compose.material3.Icon
|
|
||||||
import androidx.compose.material3.IconButton
|
|
||||||
import androidx.compose.material3.ListItem
|
|
||||||
import androidx.compose.material3.ListItemDefaults
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.material3.RadioButton
|
|
||||||
import androidx.compose.material3.Scaffold
|
|
||||||
import androidx.compose.material3.Slider
|
|
||||||
import androidx.compose.material3.SliderDefaults
|
|
||||||
import androidx.compose.material3.Surface
|
|
||||||
import androidx.compose.material3.Switch
|
|
||||||
import androidx.compose.material3.Text
|
|
||||||
import androidx.compose.material3.TextButton
|
|
||||||
import androidx.compose.material3.TopAppBar
|
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
|
||||||
import androidx.compose.material3.rememberTopAppBarState
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
@@ -88,6 +59,7 @@ import androidx.core.content.edit
|
|||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.annotation.RootGraph
|
import com.ramcosta.composedestinations.annotation.RootGraph
|
||||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
|
import com.sukisu.ultra.Natives
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
import com.sukisu.ultra.ui.MainActivity
|
import com.sukisu.ultra.ui.MainActivity
|
||||||
import com.sukisu.ultra.ui.component.ImageEditorDialog
|
import com.sukisu.ultra.ui.component.ImageEditorDialog
|
||||||
@@ -112,6 +84,10 @@ import kotlinx.coroutines.launch
|
|||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
fun saveCardConfig(context: Context) {
|
fun saveCardConfig(context: Context) {
|
||||||
CardConfig.save(context)
|
CardConfig.save(context)
|
||||||
}
|
}
|
||||||
@@ -359,7 +335,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
var isCustomizeExpanded by remember { mutableStateOf(false) }
|
var isCustomizeExpanded by remember { mutableStateOf(false) }
|
||||||
var isAppearanceExpanded by remember { mutableStateOf(true) }
|
var isAppearanceExpanded by remember { mutableStateOf(true) }
|
||||||
var isAdvancedExpanded by remember { mutableStateOf(false) }
|
var isAdvancedExpanded by remember { mutableStateOf(false) }
|
||||||
var isDpiExpanded by remember { mutableStateOf(false) }
|
|
||||||
|
|
||||||
// DPI 设置
|
// DPI 设置
|
||||||
val systemDpi = remember { context.resources.displayMetrics.densityDpi }
|
val systemDpi = remember { context.resources.displayMetrics.densityDpi }
|
||||||
@@ -507,8 +482,9 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerHigh
|
||||||
val cardAlphaUse = CardConfig.cardAlpha
|
val cardAlphaUse = CardConfig.cardAlpha
|
||||||
|
val isDarkTheme = isSystemInDarkTheme()
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||||
@@ -546,12 +522,16 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
enter = fadeIn() + expandVertically(),
|
enter = fadeIn() + expandVertically(),
|
||||||
exit = fadeOut() + shrinkVertically()
|
exit = fadeOut() + shrinkVertically()
|
||||||
) {
|
) {
|
||||||
Surface(
|
Card(
|
||||||
shape = RoundedCornerShape(16.dp),
|
modifier = Modifier
|
||||||
tonalElevation = 1.dp,
|
.fillMaxWidth()
|
||||||
modifier = Modifier.padding(bottom = 16.dp)
|
.padding(bottom = 16.dp),
|
||||||
|
colors = CardDefaults.cardColors(
|
||||||
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
|
),
|
||||||
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
// 语言设置
|
// 语言设置
|
||||||
ListItem(
|
ListItem(
|
||||||
headlineContent = { Text(stringResource(R.string.language_setting)) },
|
headlineContent = { Text(stringResource(R.string.language_setting)) },
|
||||||
@@ -579,11 +559,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
modifier = Modifier.clickable { showLanguageDialog = true }
|
modifier = Modifier.clickable { showLanguageDialog = true }
|
||||||
)
|
)
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// 主题模式
|
// 主题模式
|
||||||
ListItem(
|
ListItem(
|
||||||
headlineContent = { Text(stringResource(R.string.theme_mode)) },
|
headlineContent = { Text(stringResource(R.string.theme_mode)) },
|
||||||
@@ -608,11 +583,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
modifier = Modifier.clickable { showThemeModeDialog = true }
|
modifier = Modifier.clickable { showThemeModeDialog = true }
|
||||||
)
|
)
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// 动态颜色开关
|
// 动态颜色开关
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
@@ -624,11 +594,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
useDynamicColor = enabled
|
useDynamicColor = enabled
|
||||||
context.saveDynamicColorState(enabled)
|
context.saveDynamicColorState(enabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 只在未启用动态颜色时显示主题色选择
|
// 只在未启用动态颜色时显示主题色选择
|
||||||
@@ -642,7 +607,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
headlineContent = { Text(stringResource(R.string.theme_color)) },
|
headlineContent = { Text(stringResource(R.string.theme_color)) },
|
||||||
supportingContent = {
|
supportingContent = {
|
||||||
val currentThemeName = when (ThemeConfig.currentTheme) {
|
val currentThemeName = when (ThemeConfig.currentTheme) {
|
||||||
is ThemeColors.Default -> stringResource(R.string.color_default)
|
|
||||||
is ThemeColors.Green -> stringResource(R.string.color_green)
|
is ThemeColors.Green -> stringResource(R.string.color_green)
|
||||||
is ThemeColors.Purple -> stringResource(R.string.color_purple)
|
is ThemeColors.Purple -> stringResource(R.string.color_purple)
|
||||||
is ThemeColors.Orange -> stringResource(R.string.color_orange)
|
is ThemeColors.Orange -> stringResource(R.string.color_orange)
|
||||||
@@ -672,32 +636,104 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
),
|
),
|
||||||
modifier = Modifier.clickable { showThemeColorDialog = true }
|
modifier = Modifier.clickable { showThemeColorDialog = true }
|
||||||
)
|
)
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 自定义背景开关
|
// DPI 设置
|
||||||
ListItem(
|
ListItem(
|
||||||
headlineContent = { Text(stringResource(id = R.string.settings_custom_background)) },
|
headlineContent = { Text(stringResource(R.string.app_dpi_title)) },
|
||||||
supportingContent = { Text(stringResource(id = R.string.settings_custom_background_summary)) },
|
supportingContent = { Text(stringResource(R.string.app_dpi_summary)) },
|
||||||
leadingContent = {
|
leadingContent = {
|
||||||
Icon(
|
Icon(
|
||||||
Icons.Filled.Wallpaper,
|
Icons.Default.AcUnit,
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
tint = if (isCustomBackgroundEnabled)
|
tint = MaterialTheme.colorScheme.primary
|
||||||
|
)
|
||||||
|
},
|
||||||
|
trailingContent = {
|
||||||
|
Text(
|
||||||
|
text = getDpiFriendlyName(tempDpi),
|
||||||
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
color = MaterialTheme.colorScheme.primary
|
||||||
|
)
|
||||||
|
},
|
||||||
|
colors = ListItemDefaults.colors(
|
||||||
|
containerColor = Color.Transparent
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
// DPI 滑动条
|
||||||
|
Column(modifier = Modifier.padding(horizontal = 32.dp, vertical = 8.dp)) {
|
||||||
|
Slider(
|
||||||
|
value = tempDpi.toFloat(),
|
||||||
|
onValueChange = {
|
||||||
|
tempDpi = it.toInt()
|
||||||
|
isDpiCustom = !dpiPresets.containsValue(tempDpi)
|
||||||
|
},
|
||||||
|
valueRange = 160f..600f,
|
||||||
|
steps = 11,
|
||||||
|
colors = SliderDefaults.colors(
|
||||||
|
thumbColor = MaterialTheme.colorScheme.primary,
|
||||||
|
activeTrackColor = MaterialTheme.colorScheme.primary,
|
||||||
|
inactiveTrackColor = MaterialTheme.colorScheme.surfaceVariant
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
Row(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(top = 8.dp),
|
||||||
|
) {
|
||||||
|
dpiPresets.forEach { (name, dpi) ->
|
||||||
|
TextButton(
|
||||||
|
onClick = {
|
||||||
|
tempDpi = dpi
|
||||||
|
isDpiCustom = false
|
||||||
|
},
|
||||||
|
modifier = Modifier.weight(1f)
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = name,
|
||||||
|
color = if (tempDpi == dpi)
|
||||||
MaterialTheme.colorScheme.primary
|
MaterialTheme.colorScheme.primary
|
||||||
else
|
else
|
||||||
MaterialTheme.colorScheme.onSurfaceVariant
|
MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TextButton(
|
||||||
|
onClick = {
|
||||||
|
if (tempDpi != currentDpi) {
|
||||||
|
showDpiConfirmDialog = true
|
||||||
|
}
|
||||||
},
|
},
|
||||||
trailingContent = {
|
modifier = Modifier
|
||||||
Switch(
|
.fillMaxWidth()
|
||||||
checked = isCustomBackgroundEnabled,
|
.padding(top = 8.dp)
|
||||||
onCheckedChange = { isChecked ->
|
) {
|
||||||
|
Text(stringResource(R.string.dpi_apply_settings))
|
||||||
|
}
|
||||||
|
|
||||||
|
Text(
|
||||||
|
text = if (isDpiCustom)
|
||||||
|
"${stringResource(R.string.dpi_size_custom)}: $tempDpi"
|
||||||
|
else
|
||||||
|
"${getDpiFriendlyName(tempDpi)}: $tempDpi",
|
||||||
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
|
modifier = Modifier.padding(top = 4.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 自定义背景开关
|
||||||
|
SwitchItem(
|
||||||
|
icon = Icons.Filled.Wallpaper,
|
||||||
|
title = stringResource(id = R.string.settings_custom_background),
|
||||||
|
summary = stringResource(id = R.string.settings_custom_background_summary),
|
||||||
|
checked = isCustomBackgroundEnabled
|
||||||
|
) { isChecked ->
|
||||||
if (isChecked) {
|
if (isChecked) {
|
||||||
pickImageLauncher.launch("image/*")
|
pickImageLauncher.launch("image/*")
|
||||||
} else {
|
} else {
|
||||||
@@ -732,12 +768,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
).show()
|
).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
|
||||||
},
|
|
||||||
colors = ListItemDefaults.colors(
|
|
||||||
containerColor = Color.Transparent
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
// 透明度和亮度调节滑动条
|
// 透明度和亮度调节滑动条
|
||||||
AnimatedVisibility(
|
AnimatedVisibility(
|
||||||
@@ -850,114 +880,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// DPI 设置部分
|
|
||||||
SectionHeader(
|
|
||||||
title = stringResource(R.string.dpi_settings),
|
|
||||||
expanded = isDpiExpanded,
|
|
||||||
onToggle = { isDpiExpanded = !isDpiExpanded }
|
|
||||||
)
|
|
||||||
|
|
||||||
AnimatedVisibility(
|
|
||||||
visible = isDpiExpanded,
|
|
||||||
enter = fadeIn() + expandVertically(),
|
|
||||||
exit = fadeOut() + shrinkVertically()
|
|
||||||
) {
|
|
||||||
Surface(
|
|
||||||
shape = RoundedCornerShape(16.dp),
|
|
||||||
tonalElevation = 1.dp,
|
|
||||||
modifier = Modifier.padding(bottom = 16.dp)
|
|
||||||
) {
|
|
||||||
Column {
|
|
||||||
ListItem(
|
|
||||||
headlineContent = { Text(stringResource(R.string.app_dpi_title)) },
|
|
||||||
supportingContent = { Text(stringResource(R.string.app_dpi_summary)) },
|
|
||||||
leadingContent = {
|
|
||||||
Icon(
|
|
||||||
Icons.Default.AcUnit,
|
|
||||||
contentDescription = null,
|
|
||||||
tint = MaterialTheme.colorScheme.primary
|
|
||||||
)
|
|
||||||
},
|
|
||||||
trailingContent = {
|
|
||||||
Text(
|
|
||||||
text = getDpiFriendlyName(tempDpi),
|
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
|
||||||
color = MaterialTheme.colorScheme.primary
|
|
||||||
)
|
|
||||||
},
|
|
||||||
colors = ListItemDefaults.colors(
|
|
||||||
containerColor = Color.Transparent
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
// DPI 滑动条
|
|
||||||
Column(modifier = Modifier.padding(horizontal = 32.dp, vertical = 8.dp)) {
|
|
||||||
Slider(
|
|
||||||
value = tempDpi.toFloat(),
|
|
||||||
onValueChange = {
|
|
||||||
tempDpi = it.toInt()
|
|
||||||
isDpiCustom = !dpiPresets.containsValue(tempDpi)
|
|
||||||
},
|
|
||||||
valueRange = 160f..600f,
|
|
||||||
steps = 11,
|
|
||||||
colors = SliderDefaults.colors(
|
|
||||||
thumbColor = MaterialTheme.colorScheme.primary,
|
|
||||||
activeTrackColor = MaterialTheme.colorScheme.primary,
|
|
||||||
inactiveTrackColor = MaterialTheme.colorScheme.surfaceVariant
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
Row(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.padding(top = 8.dp),
|
|
||||||
) {
|
|
||||||
dpiPresets.forEach { (name, dpi) ->
|
|
||||||
TextButton(
|
|
||||||
onClick = {
|
|
||||||
tempDpi = dpi
|
|
||||||
isDpiCustom = false
|
|
||||||
},
|
|
||||||
modifier = Modifier.weight(1f)
|
|
||||||
) {
|
|
||||||
Text(
|
|
||||||
text = name,
|
|
||||||
color = if (tempDpi == dpi)
|
|
||||||
MaterialTheme.colorScheme.primary
|
|
||||||
else
|
|
||||||
MaterialTheme.colorScheme.onSurfaceVariant
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TextButton(
|
|
||||||
onClick = {
|
|
||||||
if (tempDpi != currentDpi) {
|
|
||||||
showDpiConfirmDialog = true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.padding(top = 8.dp)
|
|
||||||
) {
|
|
||||||
Text(stringResource(R.string.dpi_apply_settings))
|
|
||||||
}
|
|
||||||
|
|
||||||
Text(
|
|
||||||
text = if (isDpiCustom)
|
|
||||||
"${stringResource(R.string.dpi_size_custom)}: $tempDpi"
|
|
||||||
else
|
|
||||||
"${getDpiFriendlyName(tempDpi)}: $tempDpi",
|
|
||||||
style = MaterialTheme.typography.bodySmall,
|
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
|
||||||
modifier = Modifier.padding(top = 4.dp)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 自定义设置部分
|
// 自定义设置部分
|
||||||
SectionHeader(
|
SectionHeader(
|
||||||
title = stringResource(R.string.custom_settings),
|
title = stringResource(R.string.custom_settings),
|
||||||
@@ -970,12 +892,16 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
enter = fadeIn() + expandVertically(),
|
enter = fadeIn() + expandVertically(),
|
||||||
exit = fadeOut() + shrinkVertically()
|
exit = fadeOut() + shrinkVertically()
|
||||||
) {
|
) {
|
||||||
Surface(
|
Card(
|
||||||
shape = RoundedCornerShape(16.dp),
|
modifier = Modifier
|
||||||
tonalElevation = 1.dp,
|
.fillMaxWidth()
|
||||||
modifier = Modifier.padding(bottom = 16.dp)
|
.padding(bottom = 16.dp),
|
||||||
|
colors = CardDefaults.cardColors(
|
||||||
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
|
),
|
||||||
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
// 添加简洁模式开关
|
// 添加简洁模式开关
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.Brush,
|
icon = Icons.Filled.Brush,
|
||||||
@@ -986,10 +912,7 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
onSimpleModeChange(it)
|
onSimpleModeChange(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// 隐藏内核部分版本号
|
// 隐藏内核部分版本号
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
@@ -1001,11 +924,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
onHideVersionChange(it)
|
onHideVersionChange(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// 模块数量等信息
|
// 模块数量等信息
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.VisibilityOff,
|
icon = Icons.Filled.VisibilityOff,
|
||||||
@@ -1016,11 +934,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
onHideOtherInfoChange(it)
|
onHideOtherInfoChange(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// SuSFS 状态信息
|
// SuSFS 状态信息
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.VisibilityOff,
|
icon = Icons.Filled.VisibilityOff,
|
||||||
@@ -1031,25 +944,17 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
onHideSusfsStatusChange(it)
|
onHideSusfsStatusChange(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
if (Natives.version >= Natives.MINIMAL_SUPPORTED_KPM) {
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// 显示KPM开关
|
// 显示KPM开关
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.VisibilityOff,
|
icon = Icons.Filled.Visibility,
|
||||||
title = stringResource(R.string.show_kpm_info),
|
title = stringResource(R.string.show_kpm_info),
|
||||||
summary = stringResource(R.string.show_kpm_info_summary),
|
summary = stringResource(R.string.show_kpm_info_summary),
|
||||||
checked = isShowKpmInfo
|
checked = isShowKpmInfo
|
||||||
) {
|
) {
|
||||||
onShowKpmInfoChange(it)
|
onShowKpmInfoChange(it)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// 隐藏链接信息
|
// 隐藏链接信息
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
@@ -1076,12 +981,16 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
enter = fadeIn() + expandVertically(),
|
enter = fadeIn() + expandVertically(),
|
||||||
exit = fadeOut() + shrinkVertically()
|
exit = fadeOut() + shrinkVertically()
|
||||||
) {
|
) {
|
||||||
Surface(
|
Card(
|
||||||
shape = RoundedCornerShape(16.dp),
|
modifier = Modifier
|
||||||
tonalElevation = 1.dp,
|
.fillMaxWidth()
|
||||||
modifier = Modifier.padding(bottom = 16.dp)
|
.padding(bottom = 16.dp),
|
||||||
|
colors = CardDefaults.cardColors(
|
||||||
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
|
),
|
||||||
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
// SELinux 开关
|
// SELinux 开关
|
||||||
KsuIsValid {
|
KsuIsValid {
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
@@ -1113,20 +1022,15 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SuSFS 配置(仅在支持时显示)
|
// SuSFS 配置(仅在支持时显示)
|
||||||
val suSFS = getSuSFS()
|
val suSFS = getSuSFS()
|
||||||
val isSUS_SU = getSuSFSFeatures()
|
val isSUS_SU = getSuSFSFeatures()
|
||||||
if (suSFS == "Supported" && isSUS_SU == "CONFIG_KSU_SUSFS_SUS_SU") {
|
if (suSFS == "Supported" && isSUS_SU == "CONFIG_KSU_SUSFS_SUS_SU") {
|
||||||
// 初始化时,默认启用
|
// 默认启用
|
||||||
var isEnabled by rememberSaveable {
|
var isEnabled by rememberSaveable {
|
||||||
mutableStateOf(true) // 默认启用
|
mutableStateOf(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 在启动时检查状态
|
// 在启动时检查状态
|
||||||
@@ -1224,6 +1128,12 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
ThemeConfig.forceDarkMode = null
|
ThemeConfig.forceDarkMode = null
|
||||||
CardConfig.isUserLightModeEnabled = false
|
CardConfig.isUserLightModeEnabled = false
|
||||||
CardConfig.isUserDarkModeEnabled = false
|
CardConfig.isUserDarkModeEnabled = false
|
||||||
|
if (!CardConfig.isCustomAlphaSet) {
|
||||||
|
CardConfig.cardAlpha = 1f
|
||||||
|
}
|
||||||
|
if (!CardConfig.isCustomDimSet) {
|
||||||
|
CardConfig.cardDim = if (isDarkTheme) 0.5f else 0f
|
||||||
|
}
|
||||||
CardConfig.save(context)
|
CardConfig.save(context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1301,7 +1211,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.clickable {
|
.clickable {
|
||||||
context.saveThemeColors(when (theme) {
|
context.saveThemeColors(when (theme) {
|
||||||
ThemeColors.Default -> "default"
|
|
||||||
ThemeColors.Green -> "green"
|
ThemeColors.Green -> "green"
|
||||||
ThemeColors.Purple -> "purple"
|
ThemeColors.Purple -> "purple"
|
||||||
ThemeColors.Orange -> "orange"
|
ThemeColors.Orange -> "orange"
|
||||||
@@ -1320,11 +1229,12 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
onClick = null
|
onClick = null
|
||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.width(12.dp))
|
Spacer(modifier = Modifier.width(12.dp))
|
||||||
|
val isDark = isSystemInDarkTheme()
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.size(24.dp)
|
.size(24.dp)
|
||||||
.clip(CircleShape)
|
.clip(CircleShape)
|
||||||
.background(theme.Primary)
|
.background(if (isDark) theme.primaryDark else theme.primaryLight)
|
||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.width(12.dp))
|
Spacer(modifier = Modifier.width(12.dp))
|
||||||
Text(name)
|
Text(name)
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import androidx.compose.animation.fadeIn
|
|||||||
import androidx.compose.animation.fadeOut
|
import androidx.compose.animation.fadeOut
|
||||||
import androidx.compose.animation.shrinkVertically
|
import androidx.compose.animation.shrinkVertically
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.border
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
import androidx.compose.foundation.isSystemInDarkTheme
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
@@ -32,6 +33,7 @@ import androidx.compose.runtime.setValue
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
@@ -57,21 +59,29 @@ import com.sukisu.ultra.*
|
|||||||
import com.sukisu.ultra.ui.component.*
|
import com.sukisu.ultra.ui.component.*
|
||||||
import com.sukisu.ultra.ui.theme.*
|
import com.sukisu.ultra.ui.theme.*
|
||||||
import com.sukisu.ultra.ui.theme.CardConfig.cardAlpha
|
import com.sukisu.ultra.ui.theme.CardConfig.cardAlpha
|
||||||
import com.sukisu.ultra.ui.theme.CardConfig.cardElevation
|
|
||||||
import com.sukisu.ultra.ui.util.LocalSnackbarHost
|
import com.sukisu.ultra.ui.util.LocalSnackbarHost
|
||||||
import com.sukisu.ultra.ui.util.getBugreportFile
|
import com.sukisu.ultra.ui.util.getBugreportFile
|
||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
import java.time.format.DateTimeFormatter
|
import java.time.format.DateTimeFormatter
|
||||||
import com.sukisu.ultra.ui.component.KsuIsValid
|
import com.sukisu.ultra.ui.component.KsuIsValid
|
||||||
import com.dergoogler.mmrl.platform.Platform
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Destination<RootGraph>
|
@Destination<RootGraph>
|
||||||
@Composable
|
@Composable
|
||||||
fun SettingScreen(navigator: DestinationsNavigator) {
|
fun SettingScreen(navigator: DestinationsNavigator) {
|
||||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||||
val snackBarHost = LocalSnackbarHost.current
|
val snackBarHost = LocalSnackbarHost.current
|
||||||
|
val context = LocalContext.current
|
||||||
|
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
|
var selectedEngine by rememberSaveable {
|
||||||
|
mutableStateOf(
|
||||||
|
prefs.getString("webui_engine", "default") ?: "default"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
@@ -117,9 +127,9 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp, vertical = 8.dp),
|
.padding(horizontal = 16.dp, vertical = 8.dp),
|
||||||
colors = CardDefaults.cardColors(
|
colors = CardDefaults.cardColors(
|
||||||
containerColor = MaterialTheme.colorScheme.surfaceContainerLow.copy(alpha = cardAlpha)
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
),
|
),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation)
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
Text(
|
Text(
|
||||||
@@ -148,17 +158,16 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
KsuIsValid {
|
KsuIsValid {
|
||||||
SwitchSettingItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.FolderDelete,
|
icon = Icons.Filled.FolderDelete,
|
||||||
title = stringResource(id = R.string.settings_umount_modules_default),
|
title = stringResource(id = R.string.settings_umount_modules_default),
|
||||||
summary = stringResource(id = R.string.settings_umount_modules_default_summary),
|
summary = stringResource(id = R.string.settings_umount_modules_default_summary),
|
||||||
checked = umountChecked,
|
checked = umountChecked
|
||||||
onCheckedChange = {
|
) { enabled ->
|
||||||
if (Natives.setDefaultUmountModules(it)) {
|
if (Natives.setDefaultUmountModules(enabled)) {
|
||||||
umountChecked = it
|
umountChecked = enabled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SU 禁用开关(仅在兼容版本显示)
|
// SU 禁用开关(仅在兼容版本显示)
|
||||||
@@ -167,18 +176,17 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
var isSuDisabled by rememberSaveable {
|
var isSuDisabled by rememberSaveable {
|
||||||
mutableStateOf(!Natives.isSuEnabled())
|
mutableStateOf(!Natives.isSuEnabled())
|
||||||
}
|
}
|
||||||
SwitchSettingItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.RemoveModerator,
|
icon = Icons.Filled.RemoveModerator,
|
||||||
title = stringResource(id = R.string.settings_disable_su),
|
title = stringResource(id = R.string.settings_disable_su),
|
||||||
summary = stringResource(id = R.string.settings_disable_su_summary),
|
summary = stringResource(id = R.string.settings_disable_su_summary),
|
||||||
checked = isSuDisabled,
|
checked = isSuDisabled
|
||||||
onCheckedChange = { checked ->
|
) { enabled ->
|
||||||
val shouldEnable = !checked
|
val shouldEnable = !enabled
|
||||||
if (Natives.setSuEnabled(shouldEnable)) {
|
if (Natives.setSuEnabled(shouldEnable)) {
|
||||||
isSuDisabled = !shouldEnable
|
isSuDisabled = enabled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,9 +198,9 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp, vertical = 8.dp),
|
.padding(horizontal = 16.dp, vertical = 8.dp),
|
||||||
colors = CardDefaults.cardColors(
|
colors = CardDefaults.cardColors(
|
||||||
containerColor = MaterialTheme.colorScheme.surfaceContainerLow.copy(alpha = cardAlpha)
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
),
|
),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation)
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
Text(
|
Text(
|
||||||
@@ -210,78 +218,112 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
prefs.getBoolean("check_update", true)
|
prefs.getBoolean("check_update", true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
SwitchSettingItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.Update,
|
icon = Icons.Filled.Update,
|
||||||
title = stringResource(id = R.string.settings_check_update),
|
title = stringResource(id = R.string.settings_check_update),
|
||||||
summary = stringResource(id = R.string.settings_check_update_summary),
|
summary = stringResource(id = R.string.settings_check_update_summary),
|
||||||
checked = checkUpdate,
|
checked = checkUpdate
|
||||||
onCheckedChange = {
|
) { enabled ->
|
||||||
prefs.edit {putBoolean("check_update", it) }
|
prefs.edit { putBoolean("check_update", enabled) }
|
||||||
checkUpdate = it
|
checkUpdate = enabled
|
||||||
|
}
|
||||||
|
|
||||||
|
// WebUI引擎选择
|
||||||
|
KsuIsValid {
|
||||||
|
val engineOptions = listOf(
|
||||||
|
"default" to stringResource(id = R.string.engine_auto_select),
|
||||||
|
"wx" to stringResource(id = R.string.engine_force_webuix),
|
||||||
|
"ksu" to stringResource(id = R.string.engine_force_ksu)
|
||||||
|
)
|
||||||
|
|
||||||
|
var showEngineDialog by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
|
SettingItem(
|
||||||
|
icon = Icons.Filled.WebAsset,
|
||||||
|
title = stringResource(id = R.string.use_webuix),
|
||||||
|
summary = engineOptions.find { it.first == selectedEngine }?.second
|
||||||
|
?: stringResource(id = R.string.engine_auto_select),
|
||||||
|
onClick = {
|
||||||
|
showEngineDialog = true
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
// Web调试开关
|
if (showEngineDialog) {
|
||||||
|
AlertDialog(
|
||||||
|
onDismissRequest = { showEngineDialog = false },
|
||||||
|
title = { Text(stringResource(id = R.string.use_webuix)) },
|
||||||
|
text = {
|
||||||
|
Column {
|
||||||
|
engineOptions.forEach { (value, label) ->
|
||||||
|
Row(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.clickable {
|
||||||
|
selectedEngine = value
|
||||||
|
prefs.edit {
|
||||||
|
putString("webui_engine", value)
|
||||||
|
}
|
||||||
|
showEngineDialog = false
|
||||||
|
}
|
||||||
|
.padding(vertical = 12.dp),
|
||||||
|
verticalAlignment = Alignment.CenterVertically
|
||||||
|
) {
|
||||||
|
RadioButton(
|
||||||
|
selected = selectedEngine == value,
|
||||||
|
onClick = null
|
||||||
|
)
|
||||||
|
Spacer(modifier = Modifier.width(8.dp))
|
||||||
|
Text(text = label)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
confirmButton = {
|
||||||
|
TextButton(
|
||||||
|
onClick = { showEngineDialog = false }
|
||||||
|
) {
|
||||||
|
Text(stringResource(id = R.string.cancel))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Web调试和Web X Eruda 开关
|
||||||
var enableWebDebugging by rememberSaveable {
|
var enableWebDebugging by rememberSaveable {
|
||||||
mutableStateOf(
|
mutableStateOf(
|
||||||
prefs.getBoolean("enable_web_debugging", false)
|
prefs.getBoolean("enable_web_debugging", false)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
KsuIsValid {
|
|
||||||
SwitchSettingItem(
|
|
||||||
icon = Icons.Filled.DeveloperMode,
|
|
||||||
title = stringResource(id = R.string.enable_web_debugging),
|
|
||||||
summary = stringResource(id = R.string.enable_web_debugging_summary),
|
|
||||||
checked = enableWebDebugging,
|
|
||||||
onCheckedChange = {
|
|
||||||
prefs.edit { putBoolean("enable_web_debugging", it) }
|
|
||||||
enableWebDebugging = it
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Web X 开关
|
|
||||||
var useWebUIX by rememberSaveable {
|
|
||||||
mutableStateOf(
|
|
||||||
prefs.getBoolean("use_webuix", false)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
KsuIsValid {
|
|
||||||
SwitchItem(
|
|
||||||
beta = true,
|
|
||||||
enabled = Platform.isAlive,
|
|
||||||
icon = Icons.Filled.WebAsset,
|
|
||||||
title = stringResource(id = R.string.use_webuix),
|
|
||||||
summary = stringResource(id = R.string.use_webuix_summary),
|
|
||||||
checked = useWebUIX
|
|
||||||
) {
|
|
||||||
prefs.edit { putBoolean("use_webuix", it) }
|
|
||||||
useWebUIX = it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Web X Eruda 开关
|
|
||||||
var useWebUIXEruda by rememberSaveable {
|
var useWebUIXEruda by rememberSaveable {
|
||||||
mutableStateOf(
|
mutableStateOf(
|
||||||
prefs.getBoolean("use_webuix_eruda", false)
|
prefs.getBoolean("use_webuix_eruda", false)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
KsuIsValid {
|
KsuIsValid {
|
||||||
|
SwitchItem(
|
||||||
|
icon = Icons.Filled.DeveloperMode,
|
||||||
|
title = stringResource(id = R.string.enable_web_debugging),
|
||||||
|
summary = stringResource(id = R.string.enable_web_debugging_summary),
|
||||||
|
checked = enableWebDebugging
|
||||||
|
) { enabled ->
|
||||||
|
prefs.edit { putBoolean("enable_web_debugging", enabled) }
|
||||||
|
enableWebDebugging = enabled
|
||||||
|
}
|
||||||
|
|
||||||
AnimatedVisibility(
|
AnimatedVisibility(
|
||||||
visible = useWebUIX && enableWebDebugging,
|
visible = enableWebDebugging && selectedEngine == "wx",
|
||||||
enter = fadeIn() + expandVertically(),
|
enter = fadeIn() + expandVertically(),
|
||||||
exit = fadeOut() + shrinkVertically()
|
exit = fadeOut() + shrinkVertically()
|
||||||
) {
|
) {
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
beta = true,
|
|
||||||
enabled = Platform.isAlive && useWebUIX && enableWebDebugging,
|
|
||||||
icon = Icons.Filled.FormatListNumbered,
|
icon = Icons.Filled.FormatListNumbered,
|
||||||
title = stringResource(id = R.string.use_webuix_eruda),
|
title = stringResource(id = R.string.use_webuix_eruda),
|
||||||
summary = stringResource(id = R.string.use_webuix_eruda_summary),
|
summary = stringResource(id = R.string.use_webuix_eruda_summary),
|
||||||
checked = useWebUIXEruda
|
checked = useWebUIXEruda
|
||||||
) {
|
) { enabled ->
|
||||||
prefs.edit { putBoolean("use_webuix_eruda", it) }
|
prefs.edit { putBoolean("use_webuix_eruda", enabled) }
|
||||||
useWebUIXEruda = it
|
useWebUIXEruda = enabled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -304,9 +346,9 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp, vertical = 8.dp),
|
.padding(horizontal = 16.dp, vertical = 8.dp),
|
||||||
colors = CardDefaults.cardColors(
|
colors = CardDefaults.cardColors(
|
||||||
containerColor = MaterialTheme.colorScheme.surfaceContainerLow.copy(alpha = cardAlpha)
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
),
|
),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation)
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
Text(
|
Text(
|
||||||
@@ -397,15 +439,15 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置分组卡片 - 关于
|
// 关于
|
||||||
Card(
|
Card(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp, vertical = 8.dp),
|
.padding(horizontal = 16.dp, vertical = 8.dp),
|
||||||
colors = CardDefaults.cardColors(
|
colors = CardDefaults.cardColors(
|
||||||
containerColor = MaterialTheme.colorScheme.surfaceContainerLow.copy(alpha = cardAlpha)
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
),
|
),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation)
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
Text(
|
Text(
|
||||||
@@ -502,7 +544,6 @@ fun SettingItem(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.ChevronRight,
|
imageVector = Icons.Filled.ChevronRight,
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
@@ -512,60 +553,6 @@ fun SettingItem(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun SwitchSettingItem(
|
|
||||||
icon: ImageVector,
|
|
||||||
title: String,
|
|
||||||
summary: String? = null,
|
|
||||||
checked: Boolean,
|
|
||||||
onCheckedChange: (Boolean) -> Unit
|
|
||||||
) {
|
|
||||||
Row(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.clickable { onCheckedChange(!checked) }
|
|
||||||
.padding(horizontal = 16.dp, vertical = 12.dp),
|
|
||||||
verticalAlignment = Alignment.CenterVertically
|
|
||||||
) {
|
|
||||||
Icon(
|
|
||||||
imageVector = icon,
|
|
||||||
contentDescription = null,
|
|
||||||
tint = MaterialTheme.colorScheme.primary,
|
|
||||||
modifier = Modifier
|
|
||||||
.padding(end = 16.dp)
|
|
||||||
.size(24.dp)
|
|
||||||
)
|
|
||||||
|
|
||||||
Column(modifier = Modifier.weight(1f)) {
|
|
||||||
Text(
|
|
||||||
text = title,
|
|
||||||
style = MaterialTheme.typography.titleMedium,
|
|
||||||
color = MaterialTheme.colorScheme.onSurface
|
|
||||||
)
|
|
||||||
if (summary != null) {
|
|
||||||
Text(
|
|
||||||
text = summary,
|
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Switch(
|
|
||||||
checked = checked,
|
|
||||||
onCheckedChange = onCheckedChange,
|
|
||||||
colors = SwitchDefaults.colors(
|
|
||||||
checkedThumbColor = MaterialTheme.colorScheme.onPrimary,
|
|
||||||
checkedTrackColor = MaterialTheme.colorScheme.primary,
|
|
||||||
checkedIconColor = MaterialTheme.colorScheme.primary,
|
|
||||||
uncheckedThumbColor = MaterialTheme.colorScheme.outline,
|
|
||||||
uncheckedTrackColor = MaterialTheme.colorScheme.surfaceVariant,
|
|
||||||
uncheckedIconColor = MaterialTheme.colorScheme.surfaceVariant
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun UninstallItem(
|
fun UninstallItem(
|
||||||
navigator: DestinationsNavigator,
|
navigator: DestinationsNavigator,
|
||||||
@@ -645,12 +632,7 @@ fun rememberUninstallDialog(onSelected: (UninstallType) -> Unit): DialogHandle {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
var selection = UninstallType.NONE
|
var selectedOption by remember { mutableStateOf<UninstallType?>(null) }
|
||||||
val cardColor = if (!ThemeConfig.useDynamicColor) {
|
|
||||||
ThemeConfig.currentTheme.ButtonContrast
|
|
||||||
} else {
|
|
||||||
MaterialTheme.colorScheme.surfaceContainerHigh
|
|
||||||
}
|
|
||||||
|
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
onDismissRequest = {
|
onDismissRequest = {
|
||||||
@@ -668,55 +650,102 @@ fun rememberUninstallDialog(onSelected: (UninstallType) -> Unit): DialogHandle {
|
|||||||
modifier = Modifier.padding(vertical = 8.dp),
|
modifier = Modifier.padding(vertical = 8.dp),
|
||||||
verticalArrangement = Arrangement.spacedBy(16.dp)
|
verticalArrangement = Arrangement.spacedBy(16.dp)
|
||||||
) {
|
) {
|
||||||
listOptions.forEachIndexed { index, option ->
|
options.forEachIndexed { index, option ->
|
||||||
|
val isSelected = selectedOption == option
|
||||||
|
val backgroundColor = if (isSelected)
|
||||||
|
MaterialTheme.colorScheme.primaryContainer
|
||||||
|
else
|
||||||
|
Color.Transparent
|
||||||
|
val borderColor = if (isSelected)
|
||||||
|
MaterialTheme.colorScheme.primary
|
||||||
|
else
|
||||||
|
Color.Transparent
|
||||||
|
val contentColor = if (isSelected)
|
||||||
|
MaterialTheme.colorScheme.onPrimaryContainer
|
||||||
|
else
|
||||||
|
MaterialTheme.colorScheme.onSurface
|
||||||
|
|
||||||
Row(
|
Row(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.clip(MaterialTheme.shapes.medium)
|
.clip(MaterialTheme.shapes.medium)
|
||||||
|
.background(backgroundColor)
|
||||||
|
.border(
|
||||||
|
width = 1.dp,
|
||||||
|
color = borderColor,
|
||||||
|
shape = MaterialTheme.shapes.medium
|
||||||
|
)
|
||||||
.clickable {
|
.clickable {
|
||||||
selection = options[index]
|
selectedOption = option
|
||||||
}
|
}
|
||||||
.padding(vertical = 12.dp, horizontal = 8.dp),
|
.padding(vertical = 12.dp, horizontal = 8.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = options[index].icon,
|
imageVector = option.icon,
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
tint = MaterialTheme.colorScheme.primary,
|
tint = if (isSelected)
|
||||||
|
MaterialTheme.colorScheme.primary
|
||||||
|
else
|
||||||
|
MaterialTheme.colorScheme.primary,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(end = 16.dp)
|
.padding(end = 16.dp)
|
||||||
.size(24.dp)
|
.size(24.dp)
|
||||||
)
|
)
|
||||||
Column {
|
Column(
|
||||||
|
modifier = Modifier.weight(1f)
|
||||||
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = option.titleText,
|
text = listOptions[index].titleText,
|
||||||
style = MaterialTheme.typography.titleMedium,
|
style = MaterialTheme.typography.titleMedium,
|
||||||
color = MaterialTheme.colorScheme.onSurface
|
color = contentColor
|
||||||
)
|
)
|
||||||
option.subtitleText?.let {
|
listOptions[index].subtitleText?.let {
|
||||||
Text(
|
Text(
|
||||||
text = it,
|
text = it,
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
color = if (isSelected)
|
||||||
|
contentColor.copy(alpha = 0.8f)
|
||||||
|
else
|
||||||
|
MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (isSelected) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.RadioButtonChecked,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.primary,
|
||||||
|
modifier = Modifier.size(24.dp)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.RadioButtonUnchecked,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
|
modifier = Modifier.size(24.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
TextButton(
|
Button(
|
||||||
onClick = {
|
onClick = {
|
||||||
if (selection != UninstallType.NONE) {
|
selectedOption?.let { onSelected(it) }
|
||||||
onSelected(selection)
|
|
||||||
}
|
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
},
|
||||||
|
enabled = selectedOption != null,
|
||||||
|
colors = ButtonDefaults.buttonColors(
|
||||||
|
containerColor = MaterialTheme.colorScheme.primary,
|
||||||
|
contentColor = MaterialTheme.colorScheme.onPrimary,
|
||||||
|
disabledContainerColor = MaterialTheme.colorScheme.surfaceVariant,
|
||||||
|
disabledContentColor = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(android.R.string.ok),
|
text = stringResource(android.R.string.ok)
|
||||||
color = MaterialTheme.colorScheme.primary
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -732,7 +761,7 @@ fun rememberUninstallDialog(onSelected: (UninstallType) -> Unit): DialogHandle {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
containerColor = cardColor,
|
containerColor = MaterialTheme.colorScheme.secondaryContainer,
|
||||||
shape = MaterialTheme.shapes.extraLarge,
|
shape = MaterialTheme.shapes.extraLarge,
|
||||||
tonalElevation = 4.dp
|
tonalElevation = 4.dp
|
||||||
)
|
)
|
||||||
@@ -745,7 +774,7 @@ private fun TopBar(
|
|||||||
scrollBehavior: TopAppBarScrollBehavior? = null
|
scrollBehavior: TopAppBarScrollBehavior? = null
|
||||||
) {
|
) {
|
||||||
val systemIsDark = isSystemInDarkTheme()
|
val systemIsDark = isSystemInDarkTheme()
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = if (ThemeConfig.customBackgroundUri != null) {
|
val cardAlpha = if (ThemeConfig.customBackgroundUri != null) {
|
||||||
cardAlpha
|
cardAlpha
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
package com.sukisu.ultra.ui.screen
|
||||||
|
|
||||||
import androidx.compose.animation.*
|
import androidx.compose.animation.*
|
||||||
import androidx.compose.animation.core.*
|
import androidx.compose.animation.core.*
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
@@ -42,9 +44,16 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import com.sukisu.ultra.Natives
|
import com.sukisu.ultra.Natives
|
||||||
import com.sukisu.ultra.ui.component.SearchAppBar
|
import com.sukisu.ultra.ui.component.SearchAppBar
|
||||||
|
import com.sukisu.ultra.ui.theme.CardConfig
|
||||||
import com.sukisu.ultra.ui.util.ModuleModify
|
import com.sukisu.ultra.ui.util.ModuleModify
|
||||||
import com.sukisu.ultra.ui.viewmodel.SuperUserViewModel
|
import com.sukisu.ultra.ui.viewmodel.SuperUserViewModel
|
||||||
|
import com.dergoogler.mmrl.ui.component.LabelItem
|
||||||
|
import com.dergoogler.mmrl.ui.component.LabelItemDefaults
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
@OptIn(ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class)
|
||||||
@Destination<RootGraph>
|
@Destination<RootGraph>
|
||||||
@Composable
|
@Composable
|
||||||
@@ -63,7 +72,7 @@ fun SuperUserScreen(navigator: DestinationsNavigator) {
|
|||||||
LaunchedEffect(key1 = navigator) {
|
LaunchedEffect(key1 = navigator) {
|
||||||
viewModel.search = ""
|
viewModel.search = ""
|
||||||
if (viewModel.appList.isEmpty()) {
|
if (viewModel.appList.isEmpty()) {
|
||||||
viewModel.fetchAppList()
|
// viewModel.fetchAppList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -514,9 +523,6 @@ fun SuperUserScreen(navigator: DestinationsNavigator) {
|
|||||||
val profile = Natives.getAppProfile(app.packageName, app.uid)
|
val profile = Natives.getAppProfile(app.packageName, app.uid)
|
||||||
val updatedProfile = profile.copy(allowSu = allowSu)
|
val updatedProfile = profile.copy(allowSu = allowSu)
|
||||||
if (Natives.setAppProfile(updatedProfile)) {
|
if (Natives.setAppProfile(updatedProfile)) {
|
||||||
// 不重新获取应用列表,避免滚动位置重置
|
|
||||||
// viewModel.fetchAppList()
|
|
||||||
// 仅更新当前应用的配置
|
|
||||||
viewModel.updateAppProfileLocally(app.packageName, updatedProfile)
|
viewModel.updateAppProfileLocally(app.packageName, updatedProfile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -556,9 +562,6 @@ fun SuperUserScreen(navigator: DestinationsNavigator) {
|
|||||||
val profile = Natives.getAppProfile(app.packageName, app.uid)
|
val profile = Natives.getAppProfile(app.packageName, app.uid)
|
||||||
val updatedProfile = profile.copy(allowSu = allowSu)
|
val updatedProfile = profile.copy(allowSu = allowSu)
|
||||||
if (Natives.setAppProfile(updatedProfile)) {
|
if (Natives.setAppProfile(updatedProfile)) {
|
||||||
// 不重新获取应用列表,避免滚动位置重置
|
|
||||||
// viewModel.fetchAppList()
|
|
||||||
// 仅更新当前应用的配置
|
|
||||||
viewModel.updateAppProfileLocally(app.packageName, updatedProfile)
|
viewModel.updateAppProfileLocally(app.packageName, updatedProfile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -598,9 +601,6 @@ fun SuperUserScreen(navigator: DestinationsNavigator) {
|
|||||||
val profile = Natives.getAppProfile(app.packageName, app.uid)
|
val profile = Natives.getAppProfile(app.packageName, app.uid)
|
||||||
val updatedProfile = profile.copy(allowSu = allowSu)
|
val updatedProfile = profile.copy(allowSu = allowSu)
|
||||||
if (Natives.setAppProfile(updatedProfile)) {
|
if (Natives.setAppProfile(updatedProfile)) {
|
||||||
// 不重新获取应用列表,避免滚动位置重置
|
|
||||||
// viewModel.fetchAppList()
|
|
||||||
// 仅更新当前应用的配置
|
|
||||||
viewModel.updateAppProfileLocally(app.packageName, updatedProfile)
|
viewModel.updateAppProfileLocally(app.packageName, updatedProfile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -690,12 +690,14 @@ private fun AppItem(
|
|||||||
onLongClick: () -> Unit,
|
onLongClick: () -> Unit,
|
||||||
viewModel: SuperUserViewModel
|
viewModel: SuperUserViewModel
|
||||||
) {
|
) {
|
||||||
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
val cardColor = if (app.allowSu)
|
val cardColor = if (app.allowSu)
|
||||||
MaterialTheme.colorScheme.primaryContainer.copy(alpha = 0.3f)
|
MaterialTheme.colorScheme.surfaceVariant.copy(alpha = cardAlpha)
|
||||||
else if (app.hasCustomProfile)
|
else if (app.hasCustomProfile)
|
||||||
MaterialTheme.colorScheme.secondaryContainer.copy(alpha = 0.3f)
|
MaterialTheme.colorScheme.secondaryContainer.copy(alpha = cardAlpha)
|
||||||
else
|
else
|
||||||
MaterialTheme.colorScheme.surfaceContainerLow
|
MaterialTheme.colorScheme.tertiaryContainer.copy(alpha = cardAlpha)
|
||||||
|
|
||||||
Card(
|
Card(
|
||||||
colors = CardDefaults.cardColors(containerColor = cardColor),
|
colors = CardDefaults.cardColors(containerColor = cardColor),
|
||||||
@@ -770,13 +772,21 @@ private fun AppItem(
|
|||||||
horizontalArrangement = Arrangement.spacedBy(4.dp)
|
horizontalArrangement = Arrangement.spacedBy(4.dp)
|
||||||
) {
|
) {
|
||||||
if (app.allowSu) {
|
if (app.allowSu) {
|
||||||
LabelText(label = "ROOT", backgroundColor = MaterialTheme.colorScheme.primary)
|
LabelItem(text = "ROOT",)
|
||||||
}
|
}
|
||||||
if (Natives.uidShouldUmount(app.uid)) {
|
if (Natives.uidShouldUmount(app.uid)) {
|
||||||
LabelText(label = "UMOUNT", backgroundColor = MaterialTheme.colorScheme.tertiary)
|
LabelItem(text = "UNMOUNT", style = LabelItemDefaults.style.copy(
|
||||||
|
containerColor = MaterialTheme.colorScheme.secondaryContainer,
|
||||||
|
contentColor = MaterialTheme.colorScheme.onSecondaryContainer
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
if (app.hasCustomProfile) {
|
if (app.hasCustomProfile) {
|
||||||
LabelText(label = "CUSTOM", backgroundColor = MaterialTheme.colorScheme.secondary)
|
LabelItem(text = "CUSTOM", style = LabelItemDefaults.style.copy(
|
||||||
|
containerColor = MaterialTheme.colorScheme.onTertiary,
|
||||||
|
contentColor = MaterialTheme.colorScheme.onTertiaryContainer,
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.sukisu.ultra.ui.screen
|
package com.sukisu.ultra.ui.screen
|
||||||
|
|
||||||
import LabelText
|
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
import android.content.ClipboardManager
|
import android.content.ClipboardManager
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
@@ -232,7 +231,7 @@ private fun TopBar(
|
|||||||
colors: TopAppBarColors,
|
colors: TopAppBarColors,
|
||||||
scrollBehavior: TopAppBarScrollBehavior? = null
|
scrollBehavior: TopAppBarScrollBehavior? = null
|
||||||
) {
|
) {
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = CardConfig.cardAlpha
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ object CardConfig {
|
|||||||
*/
|
*/
|
||||||
fun setDarkModeDefaults() {
|
fun setDarkModeDefaults() {
|
||||||
if (!isCustomAlphaSet) {
|
if (!isCustomAlphaSet) {
|
||||||
cardAlpha = 0.70f
|
cardAlpha = 1f
|
||||||
}
|
}
|
||||||
if (!isCustomDimSet) {
|
if (!isCustomDimSet) {
|
||||||
cardDim = 0.5f
|
cardDim = 0.5f
|
||||||
|
|||||||
@@ -3,260 +3,602 @@ package com.sukisu.ultra.ui.theme
|
|||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
|
|
||||||
sealed class ThemeColors {
|
sealed class ThemeColors {
|
||||||
abstract val Primary: Color
|
// 浅色
|
||||||
abstract val Secondary: Color
|
abstract val primaryLight: Color
|
||||||
abstract val Tertiary: Color
|
abstract val onPrimaryLight: Color
|
||||||
abstract val OnPrimary: Color
|
abstract val primaryContainerLight: Color
|
||||||
abstract val OnSecondary: Color
|
abstract val onPrimaryContainerLight: Color
|
||||||
abstract val OnTertiary: Color
|
abstract val secondaryLight: Color
|
||||||
abstract val PrimaryContainer: Color
|
abstract val onSecondaryLight: Color
|
||||||
abstract val SecondaryContainer: Color
|
abstract val secondaryContainerLight: Color
|
||||||
abstract val TertiaryContainer: Color
|
abstract val onSecondaryContainerLight: Color
|
||||||
abstract val OnPrimaryContainer: Color
|
abstract val tertiaryLight: Color
|
||||||
abstract val OnSecondaryContainer: Color
|
abstract val onTertiaryLight: Color
|
||||||
abstract val OnTertiaryContainer: Color
|
abstract val tertiaryContainerLight: Color
|
||||||
abstract val ButtonContrast: Color
|
abstract val onTertiaryContainerLight: Color
|
||||||
|
abstract val errorLight: Color
|
||||||
// 表面颜色
|
abstract val onErrorLight: Color
|
||||||
abstract val Surface: Color
|
abstract val errorContainerLight: Color
|
||||||
abstract val SurfaceVariant: Color
|
abstract val onErrorContainerLight: Color
|
||||||
abstract val OnSurface: Color
|
abstract val backgroundLight: Color
|
||||||
abstract val OnSurfaceVariant: Color
|
abstract val onBackgroundLight: Color
|
||||||
|
abstract val surfaceLight: Color
|
||||||
// 错误状态颜色
|
abstract val onSurfaceLight: Color
|
||||||
abstract val Error: Color
|
abstract val surfaceVariantLight: Color
|
||||||
abstract val OnError: Color
|
abstract val onSurfaceVariantLight: Color
|
||||||
abstract val ErrorContainer: Color
|
abstract val outlineLight: Color
|
||||||
abstract val OnErrorContainer: Color
|
abstract val outlineVariantLight: Color
|
||||||
|
abstract val scrimLight: Color
|
||||||
// 边框和背景色
|
abstract val inverseSurfaceLight: Color
|
||||||
abstract val Outline: Color
|
abstract val inverseOnSurfaceLight: Color
|
||||||
abstract val OutlineVariant: Color
|
abstract val inversePrimaryLight: Color
|
||||||
abstract val Background: Color
|
abstract val surfaceDimLight: Color
|
||||||
abstract val OnBackground: Color
|
abstract val surfaceBrightLight: Color
|
||||||
|
abstract val surfaceContainerLowestLight: Color
|
||||||
|
abstract val surfaceContainerLowLight: Color
|
||||||
|
abstract val surfaceContainerLight: Color
|
||||||
|
abstract val surfaceContainerHighLight: Color
|
||||||
|
abstract val surfaceContainerHighestLight: Color
|
||||||
|
// 深色
|
||||||
|
abstract val primaryDark: Color
|
||||||
|
abstract val onPrimaryDark: Color
|
||||||
|
abstract val primaryContainerDark: Color
|
||||||
|
abstract val onPrimaryContainerDark: Color
|
||||||
|
abstract val secondaryDark: Color
|
||||||
|
abstract val onSecondaryDark: Color
|
||||||
|
abstract val secondaryContainerDark: Color
|
||||||
|
abstract val onSecondaryContainerDark: Color
|
||||||
|
abstract val tertiaryDark: Color
|
||||||
|
abstract val onTertiaryDark: Color
|
||||||
|
abstract val tertiaryContainerDark: Color
|
||||||
|
abstract val onTertiaryContainerDark: Color
|
||||||
|
abstract val errorDark: Color
|
||||||
|
abstract val onErrorDark: Color
|
||||||
|
abstract val errorContainerDark: Color
|
||||||
|
abstract val onErrorContainerDark: Color
|
||||||
|
abstract val backgroundDark: Color
|
||||||
|
abstract val onBackgroundDark: Color
|
||||||
|
abstract val surfaceDark: Color
|
||||||
|
abstract val onSurfaceDark: Color
|
||||||
|
abstract val surfaceVariantDark: Color
|
||||||
|
abstract val onSurfaceVariantDark: Color
|
||||||
|
abstract val outlineDark: Color
|
||||||
|
abstract val outlineVariantDark: Color
|
||||||
|
abstract val scrimDark: Color
|
||||||
|
abstract val inverseSurfaceDark: Color
|
||||||
|
abstract val inverseOnSurfaceDark: Color
|
||||||
|
abstract val inversePrimaryDark: Color
|
||||||
|
abstract val surfaceDimDark: Color
|
||||||
|
abstract val surfaceBrightDark: Color
|
||||||
|
abstract val surfaceContainerLowestDark: Color
|
||||||
|
abstract val surfaceContainerLowDark: Color
|
||||||
|
abstract val surfaceContainerDark: Color
|
||||||
|
abstract val surfaceContainerHighDark: Color
|
||||||
|
abstract val surfaceContainerHighestDark: Color
|
||||||
|
|
||||||
// 默认主题 (蓝色)
|
// 默认主题 (蓝色)
|
||||||
object Default : ThemeColors() {
|
object Default : ThemeColors() {
|
||||||
override val Primary = Color(0xFF2196F3)
|
override val primaryLight = Color(0xFF415F91)
|
||||||
override val Secondary = Color(0xFF64B5F6)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFF0D47A1)
|
override val primaryContainerLight = Color(0xFFD6E3FF)
|
||||||
override val OnPrimary = Color(0xFFFFFFFF)
|
override val onPrimaryContainerLight = Color(0xFF284777)
|
||||||
override val OnSecondary = Color(0xFFFFFFFF)
|
override val secondaryLight = Color(0xFF565F71)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFD6EAFF)
|
override val secondaryContainerLight = Color(0xFFDAE2F9)
|
||||||
override val SecondaryContainer = Color(0xFFE3F2FD)
|
override val onSecondaryContainerLight = Color(0xFF3E4759)
|
||||||
override val TertiaryContainer = Color(0xFFCFD8DC)
|
override val tertiaryLight = Color(0xFF705575)
|
||||||
override val OnPrimaryContainer = Color(0xFF0A3049)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF0D3C61)
|
override val tertiaryContainerLight = Color(0xFFFAD8FD)
|
||||||
override val OnTertiaryContainer = Color(0xFF071D41)
|
override val onTertiaryContainerLight = Color(0xFF573E5C)
|
||||||
override val ButtonContrast = Color(0xFF2196F3)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFF9F9FF)
|
||||||
|
override val onBackgroundLight = Color(0xFF191C20)
|
||||||
|
override val surfaceLight = Color(0xFFF9F9FF)
|
||||||
|
override val onSurfaceLight = Color(0xFF191C20)
|
||||||
|
override val surfaceVariantLight = Color(0xFFE0E2EC)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF44474E)
|
||||||
|
override val outlineLight = Color(0xFF74777F)
|
||||||
|
override val outlineVariantLight = Color(0xFFC4C6D0)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF2E3036)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFF0F0F7)
|
||||||
|
override val inversePrimaryLight = Color(0xFFAAC7FF)
|
||||||
|
override val surfaceDimLight = Color(0xFFD9D9E0)
|
||||||
|
override val surfaceBrightLight = Color(0xFFF9F9FF)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFF3F3FA)
|
||||||
|
override val surfaceContainerLight = Color(0xFFEDEDF4)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFE7E8EE)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFE2E2E9)
|
||||||
|
|
||||||
override val Surface = Color(0xFFF5F9FF)
|
override val primaryDark = Color(0xFFAAC7FF)
|
||||||
override val SurfaceVariant = Color(0xFFEDF5FE)
|
override val onPrimaryDark = Color(0xFF0A305F)
|
||||||
override val OnSurface = Color(0xFF1A1C1E)
|
override val primaryContainerDark = Color(0xFF284777)
|
||||||
override val OnSurfaceVariant = Color(0xFF42474E)
|
override val onPrimaryContainerDark = Color(0xFFD6E3FF)
|
||||||
|
override val secondaryDark = Color(0xFFBEC6DC)
|
||||||
override val Error = Color(0xFFB00020)
|
override val onSecondaryDark = Color(0xFF283141)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF3E4759)
|
||||||
override val ErrorContainer = Color(0xFFFDE7E9)
|
override val onSecondaryContainerDark = Color(0xFFDAE2F9)
|
||||||
override val OnErrorContainer = Color(0xFF410008)
|
override val tertiaryDark = Color(0xFFDDBCE0)
|
||||||
|
override val onTertiaryDark = Color(0xFF3F2844)
|
||||||
override val Outline = Color(0xFFBAC3CF)
|
override val tertiaryContainerDark = Color(0xFF573E5C)
|
||||||
override val OutlineVariant = Color(0xFFDFE3EB)
|
override val onTertiaryContainerDark = Color(0xFFFAD8FD)
|
||||||
override val Background = Color(0xFFFAFCFF)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF1A1C1E)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF111318)
|
||||||
|
override val onBackgroundDark = Color(0xFFE2E2E9)
|
||||||
|
override val surfaceDark = Color(0xFF111318)
|
||||||
|
override val onSurfaceDark = Color(0xFFE2E2E9)
|
||||||
|
override val surfaceVariantDark = Color(0xFF44474E)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFC4C6D0)
|
||||||
|
override val outlineDark = Color(0xFF8E9099)
|
||||||
|
override val outlineVariantDark = Color(0xFF44474E)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFE2E2E9)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF2E3036)
|
||||||
|
override val inversePrimaryDark = Color(0xFF415F91)
|
||||||
|
override val surfaceDimDark = Color(0xFF111318)
|
||||||
|
override val surfaceBrightDark = Color(0xFF37393E)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF0C0E13)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF191C20)
|
||||||
|
override val surfaceContainerDark = Color(0xFF1D2024)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF282A2F)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF33353A)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 绿色主题
|
// 绿色主题
|
||||||
object Green : ThemeColors() {
|
object Green : ThemeColors() {
|
||||||
override val Primary = Color(0xFF43A047)
|
override val primaryLight = Color(0xFF4C662B)
|
||||||
override val Secondary = Color(0xFF66BB6A)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFF1B5E20)
|
override val primaryContainerLight = Color(0xFFCDEDA3)
|
||||||
override val OnPrimary = Color(0xFFFFFFFF)
|
override val onPrimaryContainerLight = Color(0xFF354E16)
|
||||||
override val OnSecondary = Color(0xFFFFFFFF)
|
override val secondaryLight = Color(0xFF586249)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFD8EFDB)
|
override val secondaryContainerLight = Color(0xFFDCE7C8)
|
||||||
override val SecondaryContainer = Color(0xFFE8F5E9)
|
override val onSecondaryContainerLight = Color(0xFF404A33)
|
||||||
override val TertiaryContainer = Color(0xFFB9F6CA)
|
override val tertiaryLight = Color(0xFF386663)
|
||||||
override val OnPrimaryContainer = Color(0xFF0A280D)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF0E2912)
|
override val tertiaryContainerLight = Color(0xFFBCECE7)
|
||||||
override val OnTertiaryContainer = Color(0xFF051B07)
|
override val onTertiaryContainerLight = Color(0xFF1F4E4B)
|
||||||
override val ButtonContrast = Color(0xFF43A047)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFF9FAEF)
|
||||||
|
override val onBackgroundLight = Color(0xFF1A1C16)
|
||||||
|
override val surfaceLight = Color(0xFFF9FAEF)
|
||||||
|
override val onSurfaceLight = Color(0xFF1A1C16)
|
||||||
|
override val surfaceVariantLight = Color(0xFFE1E4D5)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF44483D)
|
||||||
|
override val outlineLight = Color(0xFF75796C)
|
||||||
|
override val outlineVariantLight = Color(0xFFC5C8BA)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF2F312A)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFF1F2E6)
|
||||||
|
override val inversePrimaryLight = Color(0xFFB1D18A)
|
||||||
|
override val surfaceDimLight = Color(0xFFDADBD0)
|
||||||
|
override val surfaceBrightLight = Color(0xFFF9FAEF)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFF3F4E9)
|
||||||
|
override val surfaceContainerLight = Color(0xFFEEEFE3)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFE8E9DE)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFE2E3D8)
|
||||||
|
|
||||||
override val Surface = Color(0xFFF6FBF6)
|
override val primaryDark = Color(0xFFB1D18A)
|
||||||
override val SurfaceVariant = Color(0xFFEDF7EE)
|
override val onPrimaryDark = Color(0xFF1F3701)
|
||||||
override val OnSurface = Color(0xFF191C19)
|
override val primaryContainerDark = Color(0xFF354E16)
|
||||||
override val OnSurfaceVariant = Color(0xFF414941)
|
override val onPrimaryContainerDark = Color(0xFFCDEDA3)
|
||||||
|
override val secondaryDark = Color(0xFFBFCBAD)
|
||||||
override val Error = Color(0xFFC62828)
|
override val onSecondaryDark = Color(0xFF2A331E)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF404A33)
|
||||||
override val ErrorContainer = Color(0xFFF8D7DA)
|
override val onSecondaryContainerDark = Color(0xFFDCE7C8)
|
||||||
override val OnErrorContainer = Color(0xFF4A0808)
|
override val tertiaryDark = Color(0xFFA0D0CB)
|
||||||
|
override val onTertiaryDark = Color(0xFF003735)
|
||||||
override val Outline = Color(0xFFBDC9BF)
|
override val tertiaryContainerDark = Color(0xFF1F4E4B)
|
||||||
override val OutlineVariant = Color(0xFFDDE6DE)
|
override val onTertiaryContainerDark = Color(0xFFBCECE7)
|
||||||
override val Background = Color(0xFFFBFDFB)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF191C19)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF12140E)
|
||||||
|
override val onBackgroundDark = Color(0xFFE2E3D8)
|
||||||
|
override val surfaceDark = Color(0xFF12140E)
|
||||||
|
override val onSurfaceDark = Color(0xFFE2E3D8)
|
||||||
|
override val surfaceVariantDark = Color(0xFF44483D)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFC5C8BA)
|
||||||
|
override val outlineDark = Color(0xFF8F9285)
|
||||||
|
override val outlineVariantDark = Color(0xFF44483D)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFE2E3D8)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF2F312A)
|
||||||
|
override val inversePrimaryDark = Color(0xFF4C662B)
|
||||||
|
override val surfaceDimDark = Color(0xFF12140E)
|
||||||
|
override val surfaceBrightDark = Color(0xFF383A32)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF0C0F09)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF1A1C16)
|
||||||
|
override val surfaceContainerDark = Color(0xFF1E201A)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF282B24)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF33362E)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 紫色主题
|
// 紫色主题
|
||||||
object Purple : ThemeColors() {
|
object Purple : ThemeColors() {
|
||||||
override val Primary = Color(0xFF9C27B0)
|
override val primaryLight = Color(0xFF7C4E7E)
|
||||||
override val Secondary = Color(0xFFBA68C8)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFF6A1B9A)
|
override val primaryContainerLight = Color(0xFFFFD6FC)
|
||||||
override val OnPrimary = Color(0xFFFFFFFF)
|
override val onPrimaryContainerLight = Color(0xFF623765)
|
||||||
override val OnSecondary = Color(0xFFFFFFFF)
|
override val secondaryLight = Color(0xFF6C586B)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFF3D8F8)
|
override val secondaryContainerLight = Color(0xFFF5DBF1)
|
||||||
override val SecondaryContainer = Color(0xFFF5E9F7)
|
override val onSecondaryContainerLight = Color(0xFF534152)
|
||||||
override val TertiaryContainer = Color(0xFFE1BEE7)
|
override val tertiaryLight = Color(0xFF825249)
|
||||||
override val OnPrimaryContainer = Color(0xFF2A0934)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF3C0F50)
|
override val tertiaryContainerLight = Color(0xFFFFDAD4)
|
||||||
override val OnTertiaryContainer = Color(0xFF1D0830)
|
override val onTertiaryContainerLight = Color(0xFF673B33)
|
||||||
override val ButtonContrast = Color(0xFF9C27B0)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFFFF7FA)
|
||||||
|
override val onBackgroundLight = Color(0xFF1F1A1F)
|
||||||
|
override val surfaceLight = Color(0xFFFFF7FA)
|
||||||
|
override val onSurfaceLight = Color(0xFF1F1A1F)
|
||||||
|
override val surfaceVariantLight = Color(0xFFEDDFE8)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF4D444C)
|
||||||
|
override val outlineLight = Color(0xFF7F747C)
|
||||||
|
override val outlineVariantLight = Color(0xFFD0C3CC)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF352F34)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFF9EEF4)
|
||||||
|
override val inversePrimaryLight = Color(0xFFECB4EC)
|
||||||
|
override val surfaceDimLight = Color(0xFFE2D7DE)
|
||||||
|
override val surfaceBrightLight = Color(0xFFFFF7FA)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFFCF0F7)
|
||||||
|
override val surfaceContainerLight = Color(0xFFF6EBF2)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFF0E5EC)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFEBDFE6)
|
||||||
|
|
||||||
override val Surface = Color(0xFFFCF6FF)
|
override val primaryDark = Color(0xFFECB4EC)
|
||||||
override val SurfaceVariant = Color(0xFFF5EEFA)
|
override val onPrimaryDark = Color(0xFF49204D)
|
||||||
override val OnSurface = Color(0xFF1D1B1E)
|
override val primaryContainerDark = Color(0xFF623765)
|
||||||
override val OnSurfaceVariant = Color(0xFF49454E)
|
override val onPrimaryContainerDark = Color(0xFFFFD6FC)
|
||||||
|
override val secondaryDark = Color(0xFFD8BFD5)
|
||||||
override val Error = Color(0xFFD50000)
|
override val onSecondaryDark = Color(0xFF3B2B3B)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF534152)
|
||||||
override val ErrorContainer = Color(0xFFFFDCD5)
|
override val onSecondaryContainerDark = Color(0xFFF5DBF1)
|
||||||
override val OnErrorContainer = Color(0xFF480000)
|
override val tertiaryDark = Color(0xFFF6B8AD)
|
||||||
|
override val onTertiaryDark = Color(0xFF4C251F)
|
||||||
override val Outline = Color(0xFFC9B9D0)
|
override val tertiaryContainerDark = Color(0xFF673B33)
|
||||||
override val OutlineVariant = Color(0xFFE8DAED)
|
override val onTertiaryContainerDark = Color(0xFFFFDAD4)
|
||||||
override val Background = Color(0xFFFFFBFF)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF1D1B1E)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF171216)
|
||||||
|
override val onBackgroundDark = Color(0xFFEBDFE6)
|
||||||
|
override val surfaceDark = Color(0xFF171216)
|
||||||
|
override val onSurfaceDark = Color(0xFFEBDFE6)
|
||||||
|
override val surfaceVariantDark = Color(0xFF4D444C)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFD0C3CC)
|
||||||
|
override val outlineDark = Color(0xFF998D96)
|
||||||
|
override val outlineVariantDark = Color(0xFF4D444C)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFEBDFE6)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF352F34)
|
||||||
|
override val inversePrimaryDark = Color(0xFF7C4E7E)
|
||||||
|
override val surfaceDimDark = Color(0xFF171216)
|
||||||
|
override val surfaceBrightDark = Color(0xFF3E373D)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF110D11)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF1F1A1F)
|
||||||
|
override val surfaceContainerDark = Color(0xFF231E23)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF2E282D)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF393338)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 橙色主题
|
// 橙色主题
|
||||||
object Orange : ThemeColors() {
|
object Orange : ThemeColors() {
|
||||||
override val Primary = Color(0xFFFF9800)
|
override val primaryLight = Color(0xFF8B4F24)
|
||||||
override val Secondary = Color(0xFFFFB74D)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFFE65100)
|
override val primaryContainerLight = Color(0xFFFFDCC7)
|
||||||
override val OnPrimary = Color(0xFFFFFFFF)
|
override val onPrimaryContainerLight = Color(0xFF6E390E)
|
||||||
override val OnSecondary = Color(0xFF000000)
|
override val secondaryLight = Color(0xFF755846)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFFFECCC)
|
override val secondaryContainerLight = Color(0xFFFFDCC7)
|
||||||
override val SecondaryContainer = Color(0xFFFFF0D9)
|
override val onSecondaryContainerLight = Color(0xFF5B4130)
|
||||||
override val TertiaryContainer = Color(0xFFFFD180)
|
override val tertiaryLight = Color(0xFF865219)
|
||||||
override val OnPrimaryContainer = Color(0xFF351F00)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF3D2800)
|
override val tertiaryContainerLight = Color(0xFFFFDCBF)
|
||||||
override val OnTertiaryContainer = Color(0xFF2E1500)
|
override val onTertiaryContainerLight = Color(0xFF6A3B01)
|
||||||
override val ButtonContrast = Color(0xFFFF9800)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFFFF8F5)
|
||||||
|
override val onBackgroundLight = Color(0xFF221A15)
|
||||||
|
override val surfaceLight = Color(0xFFFFF8F5)
|
||||||
|
override val onSurfaceLight = Color(0xFF221A15)
|
||||||
|
override val surfaceVariantLight = Color(0xFFF4DED3)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF52443C)
|
||||||
|
override val outlineLight = Color(0xFF84746A)
|
||||||
|
override val outlineVariantLight = Color(0xFFD7C3B8)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF382E29)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFFFEDE5)
|
||||||
|
override val inversePrimaryLight = Color(0xFFFFB787)
|
||||||
|
override val surfaceDimLight = Color(0xFFE7D7CE)
|
||||||
|
override val surfaceBrightLight = Color(0xFFFFF8F5)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFFFF1EA)
|
||||||
|
override val surfaceContainerLight = Color(0xFFFCEBE2)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFF6E5DC)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFF0DFD7)
|
||||||
|
|
||||||
override val Surface = Color(0xFFFFF8F3)
|
override val primaryDark = Color(0xFFFFB787)
|
||||||
override val SurfaceVariant = Color(0xFFFFF0E6)
|
override val onPrimaryDark = Color(0xFF502400)
|
||||||
override val OnSurface = Color(0xFF1F1B16)
|
override val primaryContainerDark = Color(0xFF6E390E)
|
||||||
override val OnSurfaceVariant = Color(0xFF4E4639)
|
override val onPrimaryContainerDark = Color(0xFFFFDCC7)
|
||||||
|
override val secondaryDark = Color(0xFFE5BFA8)
|
||||||
override val Error = Color(0xFFD32F2F)
|
override val onSecondaryDark = Color(0xFF422B1B)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF5B4130)
|
||||||
override val ErrorContainer = Color(0xFFFFDBC8)
|
override val onSecondaryContainerDark = Color(0xFFFFDCC7)
|
||||||
override val OnErrorContainer = Color(0xFF490700)
|
override val tertiaryDark = Color(0xFFFDB876)
|
||||||
|
override val onTertiaryDark = Color(0xFF4B2800)
|
||||||
override val Outline = Color(0xFFD6C3AD)
|
override val tertiaryContainerDark = Color(0xFF6A3B01)
|
||||||
override val OutlineVariant = Color(0xFFEFDFCC)
|
override val onTertiaryContainerDark = Color(0xFFFFDCBF)
|
||||||
override val Background = Color(0xFFFFFBFF)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF1F1B16)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF19120D)
|
||||||
|
override val onBackgroundDark = Color(0xFFF0DFD7)
|
||||||
|
override val surfaceDark = Color(0xFF19120D)
|
||||||
|
override val onSurfaceDark = Color(0xFFF0DFD7)
|
||||||
|
override val surfaceVariantDark = Color(0xFF52443C)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFD7C3B8)
|
||||||
|
override val outlineDark = Color(0xFF9F8D83)
|
||||||
|
override val outlineVariantDark = Color(0xFF52443C)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFF0DFD7)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF382E29)
|
||||||
|
override val inversePrimaryDark = Color(0xFF8B4F24)
|
||||||
|
override val surfaceDimDark = Color(0xFF19120D)
|
||||||
|
override val surfaceBrightDark = Color(0xFF413731)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF140D08)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF221A15)
|
||||||
|
override val surfaceContainerDark = Color(0xFF261E19)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF312823)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF3D332D)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 粉色主题
|
// 粉色主题
|
||||||
object Pink : ThemeColors() {
|
object Pink : ThemeColors() {
|
||||||
override val Primary = Color(0xFFE91E63)
|
override val primaryLight = Color(0xFF8C4A60)
|
||||||
override val Secondary = Color(0xFFF06292)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFF880E4F)
|
override val primaryContainerLight = Color(0xFFFFD9E2)
|
||||||
override val OnPrimary = Color(0xFFFFFFFF)
|
override val onPrimaryContainerLight = Color(0xFF703348)
|
||||||
override val OnSecondary = Color(0xFFFFFFFF)
|
override val secondaryLight = Color(0xFF8B4A62)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFFCE4EC)
|
override val secondaryContainerLight = Color(0xFFFFD9E3)
|
||||||
override val SecondaryContainer = Color(0xFFFCE4EC)
|
override val onSecondaryContainerLight = Color(0xFF6F334B)
|
||||||
override val TertiaryContainer = Color(0xFFF8BBD0)
|
override val tertiaryLight = Color(0xFF8B4A62)
|
||||||
override val OnPrimaryContainer = Color(0xFF3B0819)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF3B0819)
|
override val tertiaryContainerLight = Color(0xFFFFD9E3)
|
||||||
override val OnTertiaryContainer = Color(0xFF2B0516)
|
override val onTertiaryContainerLight = Color(0xFF6F334B)
|
||||||
override val ButtonContrast = Color(0xFFE91E63)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFFFF8F8)
|
||||||
|
override val onBackgroundLight = Color(0xFF22191B)
|
||||||
|
override val surfaceLight = Color(0xFFFFF8F8)
|
||||||
|
override val onSurfaceLight = Color(0xFF22191B)
|
||||||
|
override val surfaceVariantLight = Color(0xFFF2DDE1)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF514346)
|
||||||
|
override val outlineLight = Color(0xFF837377)
|
||||||
|
override val outlineVariantLight = Color(0xFFD5C2C5)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF372E30)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFFDEDEF)
|
||||||
|
override val inversePrimaryLight = Color(0xFFFFB1C7)
|
||||||
|
override val surfaceDimLight = Color(0xFFE6D6D9)
|
||||||
|
override val surfaceBrightLight = Color(0xFFFFF8F8)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFFFF0F2)
|
||||||
|
override val surfaceContainerLight = Color(0xFFFBEAED)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFF5E4E7)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFEFDFE1)
|
||||||
|
|
||||||
override val Surface = Color(0xFFFFF7F9)
|
override val primaryDark = Color(0xFFFFB1C7)
|
||||||
override val SurfaceVariant = Color(0xFFFCEEF2)
|
override val onPrimaryDark = Color(0xFF541D32)
|
||||||
override val OnSurface = Color(0xFF201A1C)
|
override val primaryContainerDark = Color(0xFF703348)
|
||||||
override val OnSurfaceVariant = Color(0xFF534347)
|
override val onPrimaryContainerDark = Color(0xFFFFD9E2)
|
||||||
|
override val secondaryDark = Color(0xFFFFB0CB)
|
||||||
override val Error = Color(0xFFB71C1C)
|
override val onSecondaryDark = Color(0xFF541D34)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF6F334B)
|
||||||
override val ErrorContainer = Color(0xFFFFDAD6)
|
override val onSecondaryContainerDark = Color(0xFFFFD9E3)
|
||||||
override val OnErrorContainer = Color(0xFF410002)
|
override val tertiaryDark = Color(0xFFFFB0CB)
|
||||||
|
override val onTertiaryDark = Color(0xFF541D34)
|
||||||
override val Outline = Color(0xFFD6BABF)
|
override val tertiaryContainerDark = Color(0xFF6F334B)
|
||||||
override val OutlineVariant = Color(0xFFEFDDE0)
|
override val onTertiaryContainerDark = Color(0xFFFFD9E3)
|
||||||
override val Background = Color(0xFFFFFBFF)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF201A1C)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF191113)
|
||||||
|
override val onBackgroundDark = Color(0xFFEFDFE1)
|
||||||
|
override val surfaceDark = Color(0xFF191113)
|
||||||
|
override val onSurfaceDark = Color(0xFFEFDFE1)
|
||||||
|
override val surfaceVariantDark = Color(0xFF514346)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFD5C2C5)
|
||||||
|
override val outlineDark = Color(0xFF9E8C90)
|
||||||
|
override val outlineVariantDark = Color(0xFF514346)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFEFDFE1)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF372E30)
|
||||||
|
override val inversePrimaryDark = Color(0xFF8C4A60)
|
||||||
|
override val surfaceDimDark = Color(0xFF191113)
|
||||||
|
override val surfaceBrightDark = Color(0xFF413739)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF140C0E)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF22191B)
|
||||||
|
override val surfaceContainerDark = Color(0xFF261D1F)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF31282A)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF3C3234)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 灰色主题
|
// 灰色主题
|
||||||
object Gray : ThemeColors() {
|
object Gray : ThemeColors() {
|
||||||
override val Primary = Color(0xFF607D8B)
|
override val primaryLight = Color(0xFF5B5C5C)
|
||||||
override val Secondary = Color(0xFF90A4AE)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFF455A64)
|
override val primaryContainerLight = Color(0xFF747474)
|
||||||
override val OnPrimary = Color(0xFFFFFFFF)
|
override val onPrimaryContainerLight = Color(0xFFFEFCFC)
|
||||||
override val OnSecondary = Color(0xFFFFFFFF)
|
override val secondaryLight = Color(0xFF5F5E5E)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFECEFF1)
|
override val secondaryContainerLight = Color(0xFFE4E2E1)
|
||||||
override val SecondaryContainer = Color(0xFFECEFF1)
|
override val onSecondaryContainerLight = Color(0xFF656464)
|
||||||
override val TertiaryContainer = Color(0xFFCFD8DC)
|
override val tertiaryLight = Color(0xFF5E5B5D)
|
||||||
override val OnPrimaryContainer = Color(0xFF1A2327)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF1A2327)
|
override val tertiaryContainerLight = Color(0xFF777375)
|
||||||
override val OnTertiaryContainer = Color(0xFF121A1D)
|
override val onTertiaryContainerLight = Color(0xFFFFFBFF)
|
||||||
override val ButtonContrast = Color(0xFF607D8B)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFFCF8F8)
|
||||||
|
override val onBackgroundLight = Color(0xFF1C1B1B)
|
||||||
|
override val surfaceLight = Color(0xFFFCF8F8)
|
||||||
|
override val onSurfaceLight = Color(0xFF1C1B1B)
|
||||||
|
override val surfaceVariantLight = Color(0xFFE0E3E3)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF444748)
|
||||||
|
override val outlineLight = Color(0xFF747878)
|
||||||
|
override val outlineVariantLight = Color(0xFFC4C7C7)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF313030)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFF4F0EF)
|
||||||
|
override val inversePrimaryLight = Color(0xFFC7C6C6)
|
||||||
|
override val surfaceDimLight = Color(0xFFDDD9D8)
|
||||||
|
override val surfaceBrightLight = Color(0xFFFCF8F8)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFF7F3F2)
|
||||||
|
override val surfaceContainerLight = Color(0xFFF1EDEC)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFEBE7E7)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFE5E2E1)
|
||||||
|
|
||||||
override val Surface = Color(0xFFF6F9FB)
|
override val primaryDark = Color(0xFFC7C6C6)
|
||||||
override val SurfaceVariant = Color(0xFFEEF2F4)
|
override val onPrimaryDark = Color(0xFF303031)
|
||||||
override val OnSurface = Color(0xFF191C1E)
|
override val primaryContainerDark = Color(0xFF919190)
|
||||||
override val OnSurfaceVariant = Color(0xFF41484D)
|
override val onPrimaryContainerDark = Color(0xFF161718)
|
||||||
|
override val secondaryDark = Color(0xFFC8C6C5)
|
||||||
override val Error = Color(0xFFC62828)
|
override val onSecondaryDark = Color(0xFF303030)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF474746)
|
||||||
override val ErrorContainer = Color(0xFFFFDAD6)
|
override val onSecondaryContainerDark = Color(0xFFB7B5B4)
|
||||||
override val OnErrorContainer = Color(0xFF410002)
|
override val tertiaryDark = Color(0xFFCAC5C7)
|
||||||
|
override val onTertiaryDark = Color(0xFF323031)
|
||||||
override val Outline = Color(0xFFBDC1C4)
|
override val tertiaryContainerDark = Color(0xFF948F91)
|
||||||
override val OutlineVariant = Color(0xFFDDE1E3)
|
override val onTertiaryContainerDark = Color(0xFF181718)
|
||||||
override val Background = Color(0xFFFBFCFE)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF191C1E)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF141313)
|
||||||
|
override val onBackgroundDark = Color(0xFFE5E2E1)
|
||||||
|
override val surfaceDark = Color(0xFF141313)
|
||||||
|
override val onSurfaceDark = Color(0xFFE5E2E1)
|
||||||
|
override val surfaceVariantDark = Color(0xFF444748)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFC4C7C7)
|
||||||
|
override val outlineDark = Color(0xFF8E9192)
|
||||||
|
override val outlineVariantDark = Color(0xFF444748)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFE5E2E1)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF313030)
|
||||||
|
override val inversePrimaryDark = Color(0xFF5E5E5E)
|
||||||
|
override val surfaceDimDark = Color(0xFF141313)
|
||||||
|
override val surfaceBrightDark = Color(0xFF3A3939)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF0E0E0E)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF1C1B1B)
|
||||||
|
override val surfaceContainerDark = Color(0xFF201F1F)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF2A2A2A)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF353434)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 黄色主题
|
// 黄色主题
|
||||||
object Yellow : ThemeColors() {
|
object Yellow : ThemeColors() {
|
||||||
override val Primary = Color(0xFFFFC107)
|
override val primaryLight = Color(0xFF6D5E0F)
|
||||||
override val Secondary = Color(0xFFFFD54F)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFFFF8F00)
|
override val primaryContainerLight = Color(0xFFF8E288)
|
||||||
override val OnPrimary = Color(0xFF000000)
|
override val onPrimaryContainerLight = Color(0xFF534600)
|
||||||
override val OnSecondary = Color(0xFF000000)
|
override val secondaryLight = Color(0xFF6D5E0F)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFFFF8E1)
|
override val secondaryContainerLight = Color(0xFFF7E388)
|
||||||
override val SecondaryContainer = Color(0xFFFFF8E1)
|
override val onSecondaryContainerLight = Color(0xFF534600)
|
||||||
override val TertiaryContainer = Color(0xFFFFECB3)
|
override val tertiaryLight = Color(0xFF685F13)
|
||||||
override val OnPrimaryContainer = Color(0xFF332A00)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF332A00)
|
override val tertiaryContainerLight = Color(0xFFF1E58A)
|
||||||
override val OnTertiaryContainer = Color(0xFF221200)
|
override val onTertiaryContainerLight = Color(0xFF4F4800)
|
||||||
override val ButtonContrast = Color(0xFFFFC107)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFFFF9ED)
|
||||||
|
override val onBackgroundLight = Color(0xFF1E1C13)
|
||||||
|
override val surfaceLight = Color(0xFFFFF9ED)
|
||||||
|
override val onSurfaceLight = Color(0xFF1E1C13)
|
||||||
|
override val surfaceVariantLight = Color(0xFFE9E2D0)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF4B4739)
|
||||||
|
override val outlineLight = Color(0xFF7C7768)
|
||||||
|
override val outlineVariantLight = Color(0xFFCDC6B4)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF333027)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFF7F0E2)
|
||||||
|
override val inversePrimaryLight = Color(0xFFDAC66F)
|
||||||
|
override val surfaceDimLight = Color(0xFFE0D9CC)
|
||||||
|
override val surfaceBrightLight = Color(0xFFFFF9ED)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFFAF3E5)
|
||||||
|
override val surfaceContainerLight = Color(0xFFF4EDDF)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFEEE8DA)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFE8E2D4)
|
||||||
|
|
||||||
override val Surface = Color(0xFFFFFAF3)
|
override val primaryDark = Color(0xFFDAC66F)
|
||||||
override val SurfaceVariant = Color(0xFFFFF7E6)
|
override val onPrimaryDark = Color(0xFF393000)
|
||||||
override val OnSurface = Color(0xFF1F1C17)
|
override val primaryContainerDark = Color(0xFF534600)
|
||||||
override val OnSurfaceVariant = Color(0xFF4E4A3C)
|
override val onPrimaryContainerDark = Color(0xFFF8E288)
|
||||||
|
override val secondaryDark = Color(0xFFDAC76F)
|
||||||
override val Error = Color(0xFFB71C1C)
|
override val onSecondaryDark = Color(0xFF393000)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF534600)
|
||||||
override val ErrorContainer = Color(0xFFFFDAD6)
|
override val onSecondaryContainerDark = Color(0xFFF7E388)
|
||||||
override val OnErrorContainer = Color(0xFF410002)
|
override val tertiaryDark = Color(0xFFD4C871)
|
||||||
|
override val onTertiaryDark = Color(0xFF363100)
|
||||||
override val Outline = Color(0xFFD1C8AF)
|
override val tertiaryContainerDark = Color(0xFF4F4800)
|
||||||
override val OutlineVariant = Color(0xFFEEE8D7)
|
override val onTertiaryContainerDark = Color(0xFFF1E58A)
|
||||||
override val Background = Color(0xFFFFFCF8)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF1F1C17)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF15130B)
|
||||||
|
override val onBackgroundDark = Color(0xFFE8E2D4)
|
||||||
|
override val surfaceDark = Color(0xFF15130B)
|
||||||
|
override val onSurfaceDark = Color(0xFFE8E2D4)
|
||||||
|
override val surfaceVariantDark = Color(0xFF4B4739)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFCDC6B4)
|
||||||
|
override val outlineDark = Color(0xFF969080)
|
||||||
|
override val outlineVariantDark = Color(0xFF4B4739)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFE8E2D4)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF333027)
|
||||||
|
override val inversePrimaryDark = Color(0xFF6D5E0F)
|
||||||
|
override val surfaceDimDark = Color(0xFF15130B)
|
||||||
|
override val surfaceBrightDark = Color(0xFF3C3930)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF100E07)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF1E1C13)
|
||||||
|
override val surfaceContainerDark = Color(0xFF222017)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF2C2A21)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF37352B)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ fun KernelSUTheme(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.zIndex(-2f)
|
.zIndex(-2f)
|
||||||
.background(if (darkTheme) Color.Black else Color.White)
|
.background(if (darkTheme) MaterialTheme.colorScheme.surfaceContainerLow else MaterialTheme.colorScheme.surfaceContainerLow)
|
||||||
)
|
)
|
||||||
|
|
||||||
// 自定义背景层
|
// 自定义背景层
|
||||||
@@ -311,30 +311,41 @@ private fun createDynamicLightColorScheme(context: Context) =
|
|||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
private fun createDarkColorScheme() = darkColorScheme(
|
private fun createDarkColorScheme() = darkColorScheme(
|
||||||
primary = ThemeConfig.currentTheme.Primary.copy(alpha = 0.8f),
|
primary = ThemeConfig.currentTheme.primaryDark,
|
||||||
onPrimary = Color.White,
|
onPrimary = ThemeConfig.currentTheme.onPrimaryDark,
|
||||||
primaryContainer = ThemeConfig.currentTheme.PrimaryContainer.copy(alpha = 0.15f),
|
primaryContainer = ThemeConfig.currentTheme.primaryContainerDark,
|
||||||
onPrimaryContainer = Color.White,
|
onPrimaryContainer = ThemeConfig.currentTheme.onPrimaryContainerDark,
|
||||||
secondary = ThemeConfig.currentTheme.Secondary.copy(alpha = 0.8f),
|
secondary = ThemeConfig.currentTheme.secondaryDark,
|
||||||
onSecondary = Color.White,
|
onSecondary = ThemeConfig.currentTheme.onSecondaryDark,
|
||||||
secondaryContainer = ThemeConfig.currentTheme.SecondaryContainer.copy(alpha = 0.15f),
|
secondaryContainer = ThemeConfig.currentTheme.secondaryContainerDark,
|
||||||
onSecondaryContainer = Color.White,
|
onSecondaryContainer = ThemeConfig.currentTheme.onSecondaryContainerDark,
|
||||||
tertiary = ThemeConfig.currentTheme.Tertiary.copy(alpha = 0.8f),
|
tertiary = ThemeConfig.currentTheme.tertiaryDark,
|
||||||
onTertiary = Color.White,
|
onTertiary = ThemeConfig.currentTheme.onTertiaryDark,
|
||||||
tertiaryContainer = ThemeConfig.currentTheme.TertiaryContainer.copy(alpha = 0.15f),
|
tertiaryContainer = ThemeConfig.currentTheme.tertiaryContainerDark,
|
||||||
onTertiaryContainer = Color.White,
|
onTertiaryContainer = ThemeConfig.currentTheme.onTertiaryContainerDark,
|
||||||
|
error = ThemeConfig.currentTheme.errorDark,
|
||||||
|
onError = ThemeConfig.currentTheme.onErrorDark,
|
||||||
|
errorContainer = ThemeConfig.currentTheme.errorContainerDark,
|
||||||
|
onErrorContainer = ThemeConfig.currentTheme.onErrorContainerDark,
|
||||||
background = Color.Transparent,
|
background = Color.Transparent,
|
||||||
|
onBackground = ThemeConfig.currentTheme.onBackgroundDark,
|
||||||
surface = Color.Transparent,
|
surface = Color.Transparent,
|
||||||
onBackground = Color.White,
|
onSurface = ThemeConfig.currentTheme.onSurfaceDark,
|
||||||
onSurface = Color.White,
|
surfaceVariant = ThemeConfig.currentTheme.surfaceVariantDark,
|
||||||
surfaceVariant = Color(0xFF2F2F2F),
|
onSurfaceVariant = ThemeConfig.currentTheme.onSurfaceVariantDark,
|
||||||
onSurfaceVariant = Color.White.copy(alpha = 0.7f),
|
outline = ThemeConfig.currentTheme.outlineDark,
|
||||||
outline = Color.White.copy(alpha = 0.12f),
|
outlineVariant = ThemeConfig.currentTheme.outlineVariantDark,
|
||||||
outlineVariant = Color.White.copy(alpha = 0.12f),
|
scrim = ThemeConfig.currentTheme.scrimDark,
|
||||||
error = ThemeConfig.currentTheme.Error,
|
inverseSurface = ThemeConfig.currentTheme.inverseSurfaceDark,
|
||||||
onError = ThemeConfig.currentTheme.OnError,
|
inverseOnSurface = ThemeConfig.currentTheme.inverseOnSurfaceDark,
|
||||||
errorContainer = ThemeConfig.currentTheme.ErrorContainer.copy(alpha = 0.15f),
|
inversePrimary = ThemeConfig.currentTheme.inversePrimaryDark,
|
||||||
onErrorContainer = Color.White
|
surfaceDim = ThemeConfig.currentTheme.surfaceDimDark,
|
||||||
|
surfaceBright = ThemeConfig.currentTheme.surfaceBrightDark,
|
||||||
|
surfaceContainerLowest = ThemeConfig.currentTheme.surfaceContainerLowestDark,
|
||||||
|
surfaceContainerLow = ThemeConfig.currentTheme.surfaceContainerLowDark,
|
||||||
|
surfaceContainer = ThemeConfig.currentTheme.surfaceContainerDark,
|
||||||
|
surfaceContainerHigh = ThemeConfig.currentTheme.surfaceContainerHighDark,
|
||||||
|
surfaceContainerHighest = ThemeConfig.currentTheme.surfaceContainerHighestDark,
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -342,30 +353,41 @@ private fun createDarkColorScheme() = darkColorScheme(
|
|||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
private fun createLightColorScheme() = lightColorScheme(
|
private fun createLightColorScheme() = lightColorScheme(
|
||||||
primary = ThemeConfig.currentTheme.Primary,
|
primary = ThemeConfig.currentTheme.primaryLight,
|
||||||
onPrimary = ThemeConfig.currentTheme.OnPrimary,
|
onPrimary = ThemeConfig.currentTheme.onPrimaryLight,
|
||||||
primaryContainer = ThemeConfig.currentTheme.PrimaryContainer,
|
primaryContainer = ThemeConfig.currentTheme.primaryContainerLight,
|
||||||
onPrimaryContainer = ThemeConfig.currentTheme.OnPrimaryContainer,
|
onPrimaryContainer = ThemeConfig.currentTheme.onPrimaryContainerLight,
|
||||||
secondary = ThemeConfig.currentTheme.Secondary,
|
secondary = ThemeConfig.currentTheme.secondaryLight,
|
||||||
onSecondary = ThemeConfig.currentTheme.OnSecondary,
|
onSecondary = ThemeConfig.currentTheme.onSecondaryLight,
|
||||||
secondaryContainer = ThemeConfig.currentTheme.SecondaryContainer,
|
secondaryContainer = ThemeConfig.currentTheme.secondaryContainerLight,
|
||||||
onSecondaryContainer = ThemeConfig.currentTheme.OnSecondaryContainer,
|
onSecondaryContainer = ThemeConfig.currentTheme.onSecondaryContainerLight,
|
||||||
tertiary = ThemeConfig.currentTheme.Tertiary,
|
tertiary = ThemeConfig.currentTheme.tertiaryLight,
|
||||||
onTertiary = ThemeConfig.currentTheme.OnTertiary,
|
onTertiary = ThemeConfig.currentTheme.onTertiaryLight,
|
||||||
tertiaryContainer = ThemeConfig.currentTheme.TertiaryContainer,
|
tertiaryContainer = ThemeConfig.currentTheme.tertiaryContainerLight,
|
||||||
onTertiaryContainer = ThemeConfig.currentTheme.OnTertiaryContainer,
|
onTertiaryContainer = ThemeConfig.currentTheme.onTertiaryContainerLight,
|
||||||
|
error = ThemeConfig.currentTheme.errorLight,
|
||||||
|
onError = ThemeConfig.currentTheme.onErrorLight,
|
||||||
|
errorContainer = ThemeConfig.currentTheme.errorContainerLight,
|
||||||
|
onErrorContainer = ThemeConfig.currentTheme.onErrorContainerLight,
|
||||||
background = Color.Transparent,
|
background = Color.Transparent,
|
||||||
|
onBackground = ThemeConfig.currentTheme.onBackgroundLight,
|
||||||
surface = Color.Transparent,
|
surface = Color.Transparent,
|
||||||
onBackground = Color.Black.copy(alpha = 0.87f),
|
onSurface = ThemeConfig.currentTheme.onSurfaceLight,
|
||||||
onSurface = Color.Black.copy(alpha = 0.87f),
|
surfaceVariant = ThemeConfig.currentTheme.surfaceVariantLight,
|
||||||
surfaceVariant = Color(0xFFF5F5F5),
|
onSurfaceVariant = ThemeConfig.currentTheme.onSurfaceVariantLight,
|
||||||
onSurfaceVariant = Color.Black.copy(alpha = 0.78f),
|
outline = ThemeConfig.currentTheme.outlineLight,
|
||||||
outline = Color.Black.copy(alpha = 0.12f),
|
outlineVariant = ThemeConfig.currentTheme.outlineVariantLight,
|
||||||
outlineVariant = Color.Black.copy(alpha = 0.12f),
|
scrim = ThemeConfig.currentTheme.scrimLight,
|
||||||
error = ThemeConfig.currentTheme.Error,
|
inverseSurface = ThemeConfig.currentTheme.inverseSurfaceLight,
|
||||||
onError = ThemeConfig.currentTheme.OnError,
|
inverseOnSurface = ThemeConfig.currentTheme.inverseOnSurfaceLight,
|
||||||
errorContainer = ThemeConfig.currentTheme.ErrorContainer,
|
inversePrimary = ThemeConfig.currentTheme.inversePrimaryLight,
|
||||||
onErrorContainer = ThemeConfig.currentTheme.OnErrorContainer
|
surfaceDim = ThemeConfig.currentTheme.surfaceDimLight,
|
||||||
|
surfaceBright = ThemeConfig.currentTheme.surfaceBrightLight,
|
||||||
|
surfaceContainerLowest = ThemeConfig.currentTheme.surfaceContainerLowestLight,
|
||||||
|
surfaceContainerLow = ThemeConfig.currentTheme.surfaceContainerLowLight,
|
||||||
|
surfaceContainer = ThemeConfig.currentTheme.surfaceContainerLight,
|
||||||
|
surfaceContainerHigh = ThemeConfig.currentTheme.surfaceContainerHighLight,
|
||||||
|
surfaceContainerHighest = ThemeConfig.currentTheme.surfaceContainerHighestLight,
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -7,13 +7,23 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.os.Build
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
|
import android.os.Handler
|
||||||
|
import android.os.Looper
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.DisposableEffect
|
import androidx.compose.runtime.DisposableEffect
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import com.sukisu.ultra.ui.util.module.LatestVersionInfo
|
import com.sukisu.ultra.ui.util.module.LatestVersionInfo
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
|
import java.io.File
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
|
private const val TAG = "DownloadUtil"
|
||||||
|
private val CUSTOM_USER_AGENT = "SukiSU-Ultra/2.0 (Linux; Android ${Build.VERSION.RELEASE}; ${Build.MODEL})"
|
||||||
|
private const val MAX_RETRY_COUNT = 3
|
||||||
|
private const val RETRY_DELAY_MS = 3000L
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author weishu
|
* @author weishu
|
||||||
@@ -26,8 +36,10 @@ fun download(
|
|||||||
fileName: String,
|
fileName: String,
|
||||||
description: String,
|
description: String,
|
||||||
onDownloaded: (Uri) -> Unit = {},
|
onDownloaded: (Uri) -> Unit = {},
|
||||||
onDownloading: () -> Unit = {}
|
onDownloading: () -> Unit = {},
|
||||||
|
onError: (String) -> Unit = {}
|
||||||
) {
|
) {
|
||||||
|
Log.d(TAG, "Start Download: $url")
|
||||||
val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
|
val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
|
||||||
|
|
||||||
val query = DownloadManager.Query()
|
val query = DownloadManager.Query()
|
||||||
@@ -49,6 +61,13 @@ fun download(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
val downloadFile = File(
|
||||||
|
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
|
||||||
|
fileName
|
||||||
|
)
|
||||||
|
if (downloadFile.exists()) {
|
||||||
|
downloadFile.delete()
|
||||||
|
}
|
||||||
|
|
||||||
val request = DownloadManager.Request(url.toUri())
|
val request = DownloadManager.Request(url.toUri())
|
||||||
.setDestinationInExternalPublicDir(
|
.setDestinationInExternalPublicDir(
|
||||||
@@ -59,26 +78,168 @@ fun download(
|
|||||||
.setMimeType("application/zip")
|
.setMimeType("application/zip")
|
||||||
.setTitle(fileName)
|
.setTitle(fileName)
|
||||||
.setDescription(description)
|
.setDescription(description)
|
||||||
|
.addRequestHeader("User-Agent", CUSTOM_USER_AGENT)
|
||||||
|
.setAllowedOverMetered(true)
|
||||||
|
.setAllowedOverRoaming(true)
|
||||||
|
.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI or DownloadManager.Request.NETWORK_MOBILE)
|
||||||
|
|
||||||
downloadManager.enqueue(request)
|
try {
|
||||||
|
val downloadId = downloadManager.enqueue(request)
|
||||||
|
Log.d(TAG, "Successful launch of the download,ID: $downloadId")
|
||||||
|
monitorDownload(context, downloadManager, downloadId, url, fileName, description, onDownloaded, onDownloading, onError)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Download startup failure", e)
|
||||||
|
onError("Download startup failure: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun monitorDownload(
|
||||||
|
context: Context,
|
||||||
|
downloadManager: DownloadManager,
|
||||||
|
downloadId: Long,
|
||||||
|
url: String,
|
||||||
|
fileName: String,
|
||||||
|
description: String,
|
||||||
|
onDownloaded: (Uri) -> Unit,
|
||||||
|
onDownloading: () -> Unit,
|
||||||
|
onError: (String) -> Unit,
|
||||||
|
retryCount: Int = 0
|
||||||
|
) {
|
||||||
|
val handler = Handler(Looper.getMainLooper())
|
||||||
|
val query = DownloadManager.Query().setFilterById(downloadId)
|
||||||
|
|
||||||
|
var lastProgress = -1
|
||||||
|
var stuckCounter = 0
|
||||||
|
|
||||||
|
val runnable = object : Runnable {
|
||||||
|
override fun run() {
|
||||||
|
downloadManager.query(query).use { cursor ->
|
||||||
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
|
@SuppressLint("Range")
|
||||||
|
val status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS))
|
||||||
|
|
||||||
|
when (status) {
|
||||||
|
DownloadManager.STATUS_SUCCESSFUL -> {
|
||||||
|
@SuppressLint("Range")
|
||||||
|
val localUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))
|
||||||
|
Log.d(TAG, "Download Successfully: $localUri")
|
||||||
|
onDownloaded(localUri.toUri())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
DownloadManager.STATUS_FAILED -> {
|
||||||
|
@SuppressLint("Range")
|
||||||
|
val reason = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_REASON))
|
||||||
|
Log.d(TAG, "Download failed with reason code: $reason")
|
||||||
|
|
||||||
|
if (retryCount < MAX_RETRY_COUNT) {
|
||||||
|
Log.d(TAG, "Attempts to re download, number of retries: ${retryCount + 1}")
|
||||||
|
handler.postDelayed({
|
||||||
|
downloadManager.remove(downloadId)
|
||||||
|
download(context, url, fileName, description, onDownloaded, onDownloading, onError)
|
||||||
|
}, RETRY_DELAY_MS)
|
||||||
|
} else {
|
||||||
|
onError("Download failed, please check network connection or storage space")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
DownloadManager.STATUS_RUNNING, DownloadManager.STATUS_PENDING, DownloadManager.STATUS_PAUSED -> {
|
||||||
|
@SuppressLint("Range")
|
||||||
|
val totalBytes = cursor.getLong(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES))
|
||||||
|
@SuppressLint("Range")
|
||||||
|
val downloadedBytes = cursor.getLong(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR))
|
||||||
|
|
||||||
|
if (totalBytes > 0) {
|
||||||
|
val progress = (downloadedBytes * 100 / totalBytes).toInt()
|
||||||
|
if (progress == lastProgress) {
|
||||||
|
stuckCounter++
|
||||||
|
if (stuckCounter > 30) {
|
||||||
|
if (retryCount < MAX_RETRY_COUNT) {
|
||||||
|
Log.d(TAG, "Download stalled and restarted")
|
||||||
|
downloadManager.remove(downloadId)
|
||||||
|
download(context, url, fileName, description, onDownloaded, onDownloading, onError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
lastProgress = progress
|
||||||
|
stuckCounter = 0
|
||||||
|
Log.d(TAG, "Download progress: $progress% ($downloadedBytes/$totalBytes)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
handler.postDelayed(this, 1000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
handler.post(runnable)
|
||||||
|
|
||||||
|
val receiver = object : BroadcastReceiver() {
|
||||||
|
override fun onReceive(context: Context?, intent: Intent?) {
|
||||||
|
val id = intent?.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1) ?: -1
|
||||||
|
if (id == downloadId) {
|
||||||
|
handler.removeCallbacks(runnable)
|
||||||
|
|
||||||
|
val query = DownloadManager.Query().setFilterById(downloadId)
|
||||||
|
downloadManager.query(query).use { cursor ->
|
||||||
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
|
@SuppressLint("Range")
|
||||||
|
val status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS))
|
||||||
|
|
||||||
|
if (status == DownloadManager.STATUS_SUCCESSFUL) {
|
||||||
|
@SuppressLint("Range")
|
||||||
|
val localUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))
|
||||||
|
onDownloaded(localUri.toUri())
|
||||||
|
} else {
|
||||||
|
if (retryCount < MAX_RETRY_COUNT) {
|
||||||
|
download(context!!, url, fileName, description, onDownloaded, onDownloading, onError)
|
||||||
|
} else {
|
||||||
|
onError("Download failed, please try again later")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
context?.unregisterReceiver(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ContextCompat.registerReceiver(
|
||||||
|
context,
|
||||||
|
receiver,
|
||||||
|
IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE),
|
||||||
|
ContextCompat.RECEIVER_EXPORTED
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun checkNewVersion(): LatestVersionInfo {
|
fun checkNewVersion(): LatestVersionInfo {
|
||||||
val url = "https://api.github.com/repos/ShirkNeko/SukiSU-Ultra/releases/latest"
|
val url = "https://api.github.com/repos/ShirkNeko/SukiSU-Ultra/releases/latest"
|
||||||
val defaultValue = LatestVersionInfo()
|
val defaultValue = LatestVersionInfo()
|
||||||
return runCatching {
|
return runCatching {
|
||||||
okhttp3.OkHttpClient().newCall(okhttp3.Request.Builder().url(url).build()).execute()
|
val client = okhttp3.OkHttpClient.Builder()
|
||||||
.use { response ->
|
.connectTimeout(15, TimeUnit.SECONDS)
|
||||||
|
.readTimeout(30, TimeUnit.SECONDS)
|
||||||
|
.writeTimeout(15, TimeUnit.SECONDS)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val request = okhttp3.Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.header("User-Agent", CUSTOM_USER_AGENT)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
client.newCall(request).execute().use { response ->
|
||||||
if (!response.isSuccessful) {
|
if (!response.isSuccessful) {
|
||||||
Log.d("CheckUpdate", "Network request failed: ${response.message}")
|
Log.d("CheckUpdate", "Network request failed: ${response.message}")
|
||||||
return defaultValue
|
return defaultValue
|
||||||
}
|
}
|
||||||
val body = response.body?.string()
|
val body = response.body?.string()
|
||||||
if (body == null) {
|
if (body == null) {
|
||||||
Log.d("CheckUpdate", "Response body is null")
|
Log.d("CheckUpdate", "Return data is null")
|
||||||
return defaultValue
|
return defaultValue
|
||||||
}
|
}
|
||||||
Log.d("CheckUpdate", "Response body: $body")
|
Log.d("CheckUpdate", "Return data: $body")
|
||||||
val json = org.json.JSONObject(body)
|
val json = org.json.JSONObject(body)
|
||||||
|
|
||||||
// 直接从 tag_name 提取版本号(如 v1.1)
|
// 直接从 tag_name 提取版本号(如 v1.1)
|
||||||
@@ -95,11 +256,10 @@ fun checkNewVersion(): LatestVersionInfo {
|
|||||||
val name = asset.getString("name")
|
val name = asset.getString("name")
|
||||||
if (!name.endsWith(".apk")) continue
|
if (!name.endsWith(".apk")) continue
|
||||||
|
|
||||||
// 修改正则表达式,只匹配 SukiSU 和版本号
|
|
||||||
val regex = Regex("SukiSU.*_(\\d+)-release")
|
val regex = Regex("SukiSU.*_(\\d+)-release")
|
||||||
val matchResult = regex.find(name)
|
val matchResult = regex.find(name)
|
||||||
if (matchResult == null) {
|
if (matchResult == null) {
|
||||||
Log.d("CheckUpdate", "No match found in $name, skipping")
|
Log.d("CheckUpdate", "No matches found: $name, skip over")
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
val versionCode = matchResult.groupValues[1].toInt()
|
val versionCode = matchResult.groupValues[1].toInt()
|
||||||
@@ -112,13 +272,12 @@ fun checkNewVersion(): LatestVersionInfo {
|
|||||||
versionName
|
versionName
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Log.d("CheckUpdate", "No valid apk asset found, returning default value")
|
Log.d("CheckUpdate", "No valid APK resource found, return default value")
|
||||||
defaultValue
|
defaultValue
|
||||||
}
|
}
|
||||||
}.getOrDefault(defaultValue)
|
}.getOrDefault(defaultValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DownloadListener(context: Context, onDownloaded: (Uri) -> Unit) {
|
fun DownloadListener(context: Context, onDownloaded: (Uri) -> Unit) {
|
||||||
DisposableEffect(context) {
|
DisposableEffect(context) {
|
||||||
@@ -158,4 +317,3 @@ fun DownloadListener(context: Context, onDownloaded: (Uri) -> Unit) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,9 +76,9 @@ fun createRootShell(globalMnt: Boolean = false): Shell {
|
|||||||
Log.w(TAG, "ksu failed: ", e)
|
Log.w(TAG, "ksu failed: ", e)
|
||||||
try {
|
try {
|
||||||
if (globalMnt) {
|
if (globalMnt) {
|
||||||
builder.build("su")
|
|
||||||
} else {
|
|
||||||
builder.build("su", "-mm")
|
builder.build("su", "-mm")
|
||||||
|
} else {
|
||||||
|
builder.build("su")
|
||||||
}
|
}
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
Log.e(TAG, "su failed: ", e)
|
Log.e(TAG, "su failed: ", e)
|
||||||
|
|||||||
@@ -0,0 +1,105 @@
|
|||||||
|
package com.sukisu.ultra.ui.util
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import java.io.BufferedReader
|
||||||
|
import java.io.InputStreamReader
|
||||||
|
import java.nio.charset.StandardCharsets
|
||||||
|
import java.util.zip.ZipInputStream
|
||||||
|
import com.sukisu.ultra.R
|
||||||
|
import android.util.Log
|
||||||
|
import java.io.IOException
|
||||||
|
|
||||||
|
object ModuleUtils {
|
||||||
|
private const val TAG = "ModuleUtils"
|
||||||
|
|
||||||
|
fun extractModuleName(context: Context, uri: Uri): String {
|
||||||
|
if (uri == Uri.EMPTY) {
|
||||||
|
Log.e(TAG, "The supplied URI is empty")
|
||||||
|
return context.getString(R.string.unknown_module)
|
||||||
|
}
|
||||||
|
|
||||||
|
return try {
|
||||||
|
Log.d(TAG, "Start extracting module names from URIs: $uri")
|
||||||
|
|
||||||
|
// 从URI路径中提取文件名
|
||||||
|
val fileName = uri.lastPathSegment?.let { path ->
|
||||||
|
val lastSlash = path.lastIndexOf('/')
|
||||||
|
if (lastSlash != -1 && lastSlash < path.length - 1) {
|
||||||
|
path.substring(lastSlash + 1)
|
||||||
|
} else {
|
||||||
|
path
|
||||||
|
}
|
||||||
|
}?.removeSuffix(".zip") ?: context.getString(R.string.unknown_module)
|
||||||
|
|
||||||
|
var formattedFileName = fileName.replace(Regex("[^a-zA-Z0-9\\s\\-_.@()\\u4e00-\\u9fa5]"), "").trim()
|
||||||
|
var moduleName = formattedFileName
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 打开ZIP文件输入流
|
||||||
|
val inputStream = context.contentResolver.openInputStream(uri)
|
||||||
|
if (inputStream == null) {
|
||||||
|
Log.e(TAG, "Unable to get input stream from URI: $uri")
|
||||||
|
return formattedFileName
|
||||||
|
}
|
||||||
|
|
||||||
|
val zipInputStream = ZipInputStream(inputStream)
|
||||||
|
var entry = zipInputStream.nextEntry
|
||||||
|
|
||||||
|
// 遍历ZIP文件中的条目,查找module.prop文件
|
||||||
|
while (entry != null) {
|
||||||
|
if (entry.name == "module.prop") {
|
||||||
|
val reader = BufferedReader(InputStreamReader(zipInputStream, StandardCharsets.UTF_8))
|
||||||
|
var line: String?
|
||||||
|
var nameFound = false
|
||||||
|
while (reader.readLine().also { line = it } != null) {
|
||||||
|
if (line?.startsWith("name=") == true) {
|
||||||
|
moduleName = line.substringAfter("=")
|
||||||
|
moduleName = moduleName.replace(Regex("[^a-zA-Z0-9\\s\\-_.@()\\u4e00-\\u9fa5]"), "").trim()
|
||||||
|
nameFound = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
entry = zipInputStream.nextEntry
|
||||||
|
}
|
||||||
|
zipInputStream.close()
|
||||||
|
Log.d(TAG, "Successfully extracted module name: $moduleName")
|
||||||
|
moduleName
|
||||||
|
} catch (e: IOException) {
|
||||||
|
Log.e(TAG, "Error reading ZIP file: ${e.message}")
|
||||||
|
formattedFileName
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Exception when extracting module name: ${e.message}")
|
||||||
|
context.getString(R.string.unknown_module)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证URI是否有效并可访问
|
||||||
|
fun isUriAccessible(context: Context, uri: Uri): Boolean {
|
||||||
|
if (uri == Uri.EMPTY) return false
|
||||||
|
|
||||||
|
return try {
|
||||||
|
val inputStream = context.contentResolver.openInputStream(uri)
|
||||||
|
inputStream?.close()
|
||||||
|
inputStream != null
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "The URI is inaccessible: $uri, Error: ${e.message}")
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取URI的持久权限
|
||||||
|
fun takePersistableUriPermission(context: Context, uri: Uri) {
|
||||||
|
try {
|
||||||
|
val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||||
|
context.contentResolver.takePersistableUriPermission(uri, flags)
|
||||||
|
Log.d(TAG, "Persistent permissions for URIs have been obtained: $uri")
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Unable to get persistent permissions on URIs: $uri, Error: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,10 @@
|
|||||||
package com.sukisu.ultra.ui.util
|
package com.sukisu.ultra.ui.util
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import android.content.Context
|
||||||
import androidx.compose.ui.res.stringResource
|
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
|
|
||||||
@Composable
|
fun getSELinuxStatus(context: Context): String {
|
||||||
fun getSELinuxStatus(): String {
|
|
||||||
val shell = Shell.Builder.create().build("sh")
|
val shell = Shell.Builder.create().build("sh")
|
||||||
val list = ArrayList<String>()
|
val list = ArrayList<String>()
|
||||||
|
|
||||||
@@ -18,16 +16,16 @@ fun getSELinuxStatus(): String {
|
|||||||
|
|
||||||
return if (result.isSuccess) {
|
return if (result.isSuccess) {
|
||||||
when (output) {
|
when (output) {
|
||||||
"Enforcing" -> stringResource(R.string.selinux_status_enforcing)
|
"Enforcing" -> context.getString(R.string.selinux_status_enforcing)
|
||||||
"Permissive" -> stringResource(R.string.selinux_status_permissive)
|
"Permissive" -> context.getString(R.string.selinux_status_permissive)
|
||||||
"Disabled" -> stringResource(R.string.selinux_status_disabled)
|
"Disabled" -> context.getString(R.string.selinux_status_disabled)
|
||||||
else -> stringResource(R.string.selinux_status_unknown)
|
else -> context.getString(R.string.selinux_status_unknown)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (output.contains("Permission denied")) {
|
if (output.contains("Permission denied")) {
|
||||||
stringResource(R.string.selinux_status_enforcing)
|
context.getString(R.string.selinux_status_enforcing)
|
||||||
} else {
|
} else {
|
||||||
stringResource(R.string.selinux_status_unknown)
|
context.getString(R.string.selinux_status_unknown)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,290 @@
|
|||||||
|
package com.sukisu.ultra.ui.viewmodel
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.SystemClock
|
||||||
|
import android.system.Os
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.dergoogler.mmrl.platform.Platform.Companion.context
|
||||||
|
import com.google.gson.Gson
|
||||||
|
import com.sukisu.ultra.KernelVersion
|
||||||
|
import com.sukisu.ultra.Natives
|
||||||
|
import com.sukisu.ultra.getKernelVersion
|
||||||
|
import com.sukisu.ultra.ksuApp
|
||||||
|
import com.sukisu.ultra.ui.util.*
|
||||||
|
import com.sukisu.ultra.ui.util.module.LatestVersionInfo
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
import androidx.core.content.edit
|
||||||
|
|
||||||
|
class HomeViewModel : ViewModel() {
|
||||||
|
companion object {
|
||||||
|
private const val TAG = "HomeViewModel"
|
||||||
|
private const val CACHE_DURATION = 5 * 60 * 1000L
|
||||||
|
private const val PREFS_NAME = "home_cache"
|
||||||
|
private const val KEY_SYSTEM_STATUS = "system_status"
|
||||||
|
private const val KEY_SYSTEM_INFO = "system_info"
|
||||||
|
private const val KEY_VERSION_INFO = "version_info"
|
||||||
|
private const val KEY_LAST_UPDATE = "last_update_time"
|
||||||
|
}
|
||||||
|
|
||||||
|
// 系统状态
|
||||||
|
data class SystemStatus(
|
||||||
|
val isManager: Boolean = false,
|
||||||
|
val ksuVersion: Int? = null,
|
||||||
|
val lkmMode: Boolean? = null,
|
||||||
|
val kernelVersion: KernelVersion = getKernelVersion(),
|
||||||
|
val isRootAvailable: Boolean = false,
|
||||||
|
val isKpmConfigured: Boolean = false,
|
||||||
|
val requireNewKernel: Boolean = false
|
||||||
|
)
|
||||||
|
|
||||||
|
// 系统信息
|
||||||
|
data class SystemInfo(
|
||||||
|
val kernelRelease: String = "",
|
||||||
|
val androidVersion: String = "",
|
||||||
|
val deviceModel: String = "",
|
||||||
|
val managerVersion: Pair<String, Long> = Pair("", 0L),
|
||||||
|
val seLinuxStatus: String = "",
|
||||||
|
val kpmVersion: String = "",
|
||||||
|
val suSFSStatus: String = "",
|
||||||
|
val suSFSVersion: String = "",
|
||||||
|
val suSFSVariant: String = "",
|
||||||
|
val suSFSFeatures: String = "",
|
||||||
|
val susSUMode: String = "",
|
||||||
|
val superuserCount: Int = 0,
|
||||||
|
val moduleCount: Int = 0,
|
||||||
|
val kpmModuleCount: Int = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
private val gson = Gson()
|
||||||
|
private val prefs by lazy { ksuApp.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) }
|
||||||
|
|
||||||
|
var systemStatus by mutableStateOf(SystemStatus())
|
||||||
|
private set
|
||||||
|
|
||||||
|
var systemInfo by mutableStateOf(SystemInfo())
|
||||||
|
private set
|
||||||
|
|
||||||
|
var latestVersionInfo by mutableStateOf(LatestVersionInfo())
|
||||||
|
private set
|
||||||
|
|
||||||
|
var isSimpleMode by mutableStateOf(false)
|
||||||
|
private set
|
||||||
|
var isHideVersion by mutableStateOf(false)
|
||||||
|
private set
|
||||||
|
var isHideOtherInfo by mutableStateOf(false)
|
||||||
|
private set
|
||||||
|
var isHideSusfsStatus by mutableStateOf(false)
|
||||||
|
private set
|
||||||
|
var isHideLinkCard by mutableStateOf(false)
|
||||||
|
private set
|
||||||
|
var showKpmInfo by mutableStateOf(true)
|
||||||
|
private set
|
||||||
|
|
||||||
|
fun loadUserSettings(context: Context) {
|
||||||
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
|
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
|
isSimpleMode = prefs.getBoolean("is_simple_mode", false)
|
||||||
|
isHideVersion = prefs.getBoolean("is_hide_version", false)
|
||||||
|
isHideOtherInfo = prefs.getBoolean("is_hide_other_info", false)
|
||||||
|
isHideSusfsStatus = prefs.getBoolean("is_hide_susfs_status", false)
|
||||||
|
isHideLinkCard = prefs.getBoolean("is_hide_link_card", false)
|
||||||
|
showKpmInfo = prefs.getBoolean("show_kpm_info", true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun initializeData() {
|
||||||
|
viewModelScope.launch {
|
||||||
|
val currentTime = System.currentTimeMillis()
|
||||||
|
val lastUpdateTime = prefs.getLong(KEY_LAST_UPDATE, 0)
|
||||||
|
val shouldRefresh = currentTime - lastUpdateTime > CACHE_DURATION
|
||||||
|
|
||||||
|
if (!shouldRefresh) {
|
||||||
|
loadCachedData()
|
||||||
|
} else {
|
||||||
|
fetchAndSaveData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun loadCachedData() {
|
||||||
|
prefs.getString(KEY_SYSTEM_STATUS, null)?.let {
|
||||||
|
systemStatus = gson.fromJson(it, SystemStatus::class.java)
|
||||||
|
}
|
||||||
|
prefs.getString(KEY_SYSTEM_INFO, null)?.let {
|
||||||
|
systemInfo = gson.fromJson(it, SystemInfo::class.java)
|
||||||
|
}
|
||||||
|
prefs.getString(KEY_VERSION_INFO, null)?.let {
|
||||||
|
latestVersionInfo = gson.fromJson(it, LatestVersionInfo::class.java)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun fetchAndSaveData() {
|
||||||
|
fetchSystemStatus()
|
||||||
|
fetchSystemInfo()
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
prefs.edit {
|
||||||
|
putString(KEY_SYSTEM_STATUS, gson.toJson(systemStatus))
|
||||||
|
putString(KEY_SYSTEM_INFO, gson.toJson(systemInfo))
|
||||||
|
putString(KEY_VERSION_INFO, gson.toJson(latestVersionInfo))
|
||||||
|
putLong(KEY_LAST_UPDATE, System.currentTimeMillis())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun checkForUpdates(context: Context) {
|
||||||
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
val checkUpdate = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
|
.getBoolean("check_update", true)
|
||||||
|
|
||||||
|
if (checkUpdate) {
|
||||||
|
val currentTime = System.currentTimeMillis()
|
||||||
|
val lastUpdateTime = prefs.getLong(KEY_LAST_UPDATE, 0)
|
||||||
|
val shouldRefresh = currentTime - lastUpdateTime > CACHE_DURATION
|
||||||
|
|
||||||
|
if (shouldRefresh) {
|
||||||
|
val start = SystemClock.elapsedRealtime()
|
||||||
|
val newVersionInfo = checkNewVersion()
|
||||||
|
latestVersionInfo = newVersionInfo
|
||||||
|
prefs.edit { putString(KEY_VERSION_INFO, gson.toJson(newVersionInfo)) }
|
||||||
|
Log.i(TAG, "Update check completed in ${SystemClock.elapsedRealtime() - start}ms")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error checking for updates", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun refreshAllData(context: Context) {
|
||||||
|
viewModelScope.launch {
|
||||||
|
try {
|
||||||
|
fetchAndSaveData()
|
||||||
|
checkForUpdates(context)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error refreshing data", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun fetchSystemStatus() {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
val kernelVersion = getKernelVersion()
|
||||||
|
val isManager = Natives.becomeManager(ksuApp.packageName)
|
||||||
|
val ksuVersion = if (isManager) Natives.version else null
|
||||||
|
val lkmMode = ksuVersion?.let {
|
||||||
|
if (it >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && kernelVersion.isGKI()) Natives.isLkmMode else null
|
||||||
|
}
|
||||||
|
|
||||||
|
systemStatus = SystemStatus(
|
||||||
|
isManager = isManager,
|
||||||
|
ksuVersion = ksuVersion,
|
||||||
|
lkmMode = lkmMode,
|
||||||
|
kernelVersion = kernelVersion,
|
||||||
|
isRootAvailable = rootAvailable(),
|
||||||
|
isKpmConfigured = Natives.isKPMEnabled(),
|
||||||
|
requireNewKernel = isManager && Natives.requireNewKernel()
|
||||||
|
)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error fetching system status", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
|
private suspend fun fetchSystemInfo() {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
val uname = Os.uname()
|
||||||
|
val kpmVersion = getKpmVersion()
|
||||||
|
val suSFS = getSuSFS()
|
||||||
|
var suSFSVersion = ""
|
||||||
|
var suSFSVariant = ""
|
||||||
|
var suSFSFeatures = ""
|
||||||
|
var susSUMode = ""
|
||||||
|
|
||||||
|
if (suSFS == "Supported") {
|
||||||
|
suSFSVersion = getSuSFSVersion()
|
||||||
|
if (suSFSVersion.isNotEmpty()) {
|
||||||
|
suSFSVariant = getSuSFSVariant()
|
||||||
|
suSFSFeatures = getSuSFSFeatures()
|
||||||
|
val isSUS_SU = suSFSFeatures == "CONFIG_KSU_SUSFS_SUS_SU"
|
||||||
|
if (isSUS_SU) {
|
||||||
|
susSUMode = try {
|
||||||
|
susfsSUS_SU_Mode().toString()
|
||||||
|
} catch (_: Exception) {
|
||||||
|
""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
systemInfo = SystemInfo(
|
||||||
|
kernelRelease = uname.release,
|
||||||
|
androidVersion = Build.VERSION.RELEASE,
|
||||||
|
deviceModel = getDeviceModel(),
|
||||||
|
managerVersion = getManagerVersion(ksuApp.applicationContext),
|
||||||
|
seLinuxStatus = getSELinuxStatus(context),
|
||||||
|
kpmVersion = kpmVersion,
|
||||||
|
suSFSStatus = suSFS,
|
||||||
|
suSFSVersion = suSFSVersion,
|
||||||
|
suSFSVariant = suSFSVariant,
|
||||||
|
suSFSFeatures = suSFSFeatures,
|
||||||
|
susSUMode = susSUMode,
|
||||||
|
superuserCount = getSuperuserCount(),
|
||||||
|
moduleCount = getModuleCount(),
|
||||||
|
kpmModuleCount = getKpmModuleCount()
|
||||||
|
)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error fetching system info", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("PrivateApi")
|
||||||
|
private fun getDeviceModel(): String {
|
||||||
|
return try {
|
||||||
|
val systemProperties = Class.forName("android.os.SystemProperties")
|
||||||
|
val getMethod = systemProperties.getMethod("get", String::class.java, String::class.java)
|
||||||
|
val marketNameKeys = listOf(
|
||||||
|
"ro.product.marketname", // Xiaomi
|
||||||
|
"ro.vendor.oplus.market.name", // Oppo, OnePlus, Realme
|
||||||
|
"ro.vivo.market.name", // Vivo
|
||||||
|
"ro.config.marketing_name" // Huawei
|
||||||
|
)
|
||||||
|
var result = Build.DEVICE
|
||||||
|
for (key in marketNameKeys) {
|
||||||
|
val marketName = getMethod.invoke(null, key, "") as String
|
||||||
|
if (marketName.isNotEmpty()) {
|
||||||
|
result = marketName
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error getting device model", e)
|
||||||
|
Build.DEVICE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getManagerVersion(context: Context): Pair<String, Long> {
|
||||||
|
return try {
|
||||||
|
val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0)!!
|
||||||
|
val versionCode = androidx.core.content.pm.PackageInfoCompat.getLongVersionCode(packageInfo)
|
||||||
|
Pair(packageInfo.versionName!!, versionCode)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error getting manager version", e)
|
||||||
|
Pair("", 0L)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,6 +11,10 @@ import kotlinx.coroutines.launch
|
|||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import com.sukisu.ultra.ui.util.*
|
import com.sukisu.ultra.ui.util.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
class KpmViewModel : ViewModel() {
|
class KpmViewModel : ViewModel() {
|
||||||
var moduleList by mutableStateOf(emptyList<ModuleInfo>())
|
var moduleList by mutableStateOf(emptyList<ModuleInfo>())
|
||||||
private set
|
private set
|
||||||
|
|||||||
@@ -8,20 +8,29 @@ import androidx.compose.runtime.mutableStateOf
|
|||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.dergoogler.mmrl.platform.model.ModuleConfig
|
||||||
|
import com.dergoogler.mmrl.platform.model.ModuleConfig.Companion.asModuleConfig
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import com.sukisu.ultra.ui.util.HanziToPinyin
|
import com.sukisu.ultra.ui.util.HanziToPinyin
|
||||||
import com.sukisu.ultra.ui.util.listModules
|
import com.sukisu.ultra.ui.util.listModules
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.text.Collator
|
import java.text.Collator
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
class ModuleViewModel : ViewModel() {
|
class ModuleViewModel : ViewModel() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val TAG = "ModuleViewModel"
|
private const val TAG = "ModuleViewModel"
|
||||||
private var modules by mutableStateOf<List<ModuleInfo>>(emptyList())
|
private var modules by mutableStateOf<List<ModuleInfo>>(emptyList())
|
||||||
|
private const val CUSTOM_USER_AGENT = "SukiSU-Ultra/2.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
class ModuleInfo(
|
class ModuleInfo(
|
||||||
@@ -38,6 +47,7 @@ class ModuleViewModel : ViewModel() {
|
|||||||
val hasWebUi: Boolean,
|
val hasWebUi: Boolean,
|
||||||
val hasActionScript: Boolean,
|
val hasActionScript: Boolean,
|
||||||
val dirId: String, // real module id (dir name)
|
val dirId: String, // real module id (dir name)
|
||||||
|
var config: ModuleConfig? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
var isRefreshing by mutableStateOf(false)
|
var isRefreshing by mutableStateOf(false)
|
||||||
@@ -98,9 +108,42 @@ class ModuleViewModel : ViewModel() {
|
|||||||
obj.optString("updateJson"),
|
obj.optString("updateJson"),
|
||||||
obj.optBoolean("web"),
|
obj.optBoolean("web"),
|
||||||
obj.optBoolean("action"),
|
obj.optBoolean("action"),
|
||||||
obj.getString("dir_id"),
|
obj.getString("dir_id")
|
||||||
)
|
)
|
||||||
}.toList()
|
}.toList()
|
||||||
|
launch {
|
||||||
|
modules.forEach { module ->
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
runCatching {
|
||||||
|
module.config = module.id.asModuleConfig
|
||||||
|
}.onFailure { e ->
|
||||||
|
Log.e(TAG, "Failed to load config from id for module ${module.id}", e)
|
||||||
|
}
|
||||||
|
if (module.config == null) {
|
||||||
|
runCatching {
|
||||||
|
module.config = module.name.asModuleConfig
|
||||||
|
}.onFailure { e ->
|
||||||
|
Log.e(TAG, "Failed to load config from name for module ${module.id}", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (module.config == null) {
|
||||||
|
runCatching {
|
||||||
|
module.config = module.description.asModuleConfig
|
||||||
|
}.onFailure { e ->
|
||||||
|
Log.e(TAG, "Failed to load config from description for module ${module.id}", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (module.config == null) {
|
||||||
|
module.config = ModuleConfig()
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Failed to load any config for module ${module.id}", e)
|
||||||
|
module.config = ModuleConfig()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
isNeedRefresh = false
|
isNeedRefresh = false
|
||||||
}.onFailure { e ->
|
}.onFailure { e ->
|
||||||
Log.e(TAG, "fetchModuleList: ", e)
|
Log.e(TAG, "fetchModuleList: ", e)
|
||||||
@@ -117,6 +160,10 @@ class ModuleViewModel : ViewModel() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun sanitizeVersionString(version: String): String {
|
||||||
|
return version.replace(Regex("[^a-zA-Z0-9.\\-_]"), "_")
|
||||||
|
}
|
||||||
|
|
||||||
fun checkUpdate(m: ModuleInfo): Triple<String, String, String> {
|
fun checkUpdate(m: ModuleInfo): Triple<String, String, String> {
|
||||||
val empty = Triple("", "", "")
|
val empty = Triple("", "", "")
|
||||||
if (m.updateJson.isEmpty() || m.remove || m.update || !m.enabled) {
|
if (m.updateJson.isEmpty() || m.remove || m.update || !m.enabled) {
|
||||||
@@ -126,19 +173,32 @@ class ModuleViewModel : ViewModel() {
|
|||||||
val result = kotlin.runCatching {
|
val result = kotlin.runCatching {
|
||||||
val url = m.updateJson
|
val url = m.updateJson
|
||||||
Log.i(TAG, "checkUpdate url: $url")
|
Log.i(TAG, "checkUpdate url: $url")
|
||||||
val response = okhttp3.OkHttpClient()
|
|
||||||
.newCall(
|
val client = okhttp3.OkHttpClient.Builder()
|
||||||
okhttp3.Request.Builder()
|
.connectTimeout(15, TimeUnit.SECONDS)
|
||||||
.url(url)
|
.readTimeout(30, TimeUnit.SECONDS)
|
||||||
|
.writeTimeout(15, TimeUnit.SECONDS)
|
||||||
.build()
|
.build()
|
||||||
).execute()
|
|
||||||
|
val request = okhttp3.Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.header("User-Agent", CUSTOM_USER_AGENT)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val response = client.newCall(request).execute()
|
||||||
|
|
||||||
Log.d(TAG, "checkUpdate code: ${response.code}")
|
Log.d(TAG, "checkUpdate code: ${response.code}")
|
||||||
if (response.isSuccessful) {
|
if (response.isSuccessful) {
|
||||||
response.body?.string() ?: ""
|
response.body?.string() ?: ""
|
||||||
} else {
|
} else {
|
||||||
|
Log.d(TAG, "checkUpdate failed: ${response.message}")
|
||||||
""
|
""
|
||||||
}
|
}
|
||||||
}.getOrDefault("")
|
}.getOrElse { e ->
|
||||||
|
Log.e(TAG, "checkUpdate exception", e)
|
||||||
|
""
|
||||||
|
}
|
||||||
|
|
||||||
Log.i(TAG, "checkUpdate result: $result")
|
Log.i(TAG, "checkUpdate result: $result")
|
||||||
|
|
||||||
if (result.isEmpty()) {
|
if (result.isEmpty()) {
|
||||||
@@ -149,7 +209,8 @@ class ModuleViewModel : ViewModel() {
|
|||||||
JSONObject(result)
|
JSONObject(result)
|
||||||
}.getOrNull() ?: return empty
|
}.getOrNull() ?: return empty
|
||||||
|
|
||||||
val version = updateJson.optString("version", "")
|
var version = updateJson.optString("version", "")
|
||||||
|
version = sanitizeVersionString(version)
|
||||||
val versionCode = updateJson.optInt("versionCode", 0)
|
val versionCode = updateJson.optInt("versionCode", 0)
|
||||||
val zipUrl = updateJson.optString("zipUrl", "")
|
val zipUrl = updateJson.optString("zipUrl", "")
|
||||||
val changelog = updateJson.optString("changelog", "")
|
val changelog = updateJson.optString("changelog", "")
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import android.content.pm.PackageInfo
|
|||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import android.os.SystemClock
|
import android.os.SystemClock
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.runtime.derivedStateOf
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
@@ -20,16 +21,20 @@ import java.text.Collator
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
import com.dergoogler.mmrl.platform.Platform
|
import com.dergoogler.mmrl.platform.Platform
|
||||||
import com.dergoogler.mmrl.platform.TIMEOUT_MILLIS
|
import com.dergoogler.mmrl.platform.TIMEOUT_MILLIS
|
||||||
import com.sukisu.ultra.ui.webui.packageManager
|
import com.sukisu.ultra.ui.webui.getInstalledPackagesAll
|
||||||
import com.sukisu.ultra.ui.webui.userManager
|
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.withTimeoutOrNull
|
import kotlinx.coroutines.withTimeoutOrNull
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
class SuperUserViewModel : ViewModel() {
|
class SuperUserViewModel : ViewModel() {
|
||||||
val isPlatformAlive get() = Platform.isAlive
|
val isPlatformAlive get() = Platform.isAlive
|
||||||
companion object {
|
companion object {
|
||||||
private const val TAG = "SuperUserViewModel"
|
private const val TAG = "SuperUserViewModel"
|
||||||
private var apps by mutableStateOf<List<AppInfo>>(emptyList())
|
var apps by mutableStateOf<List<AppInfo>>(emptyList())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
@@ -166,7 +171,7 @@ class SuperUserViewModel : ViewModel() {
|
|||||||
fetchAppList() // 刷新列表以显示最新状态
|
fetchAppList() // 刷新列表以显示最新状态
|
||||||
}
|
}
|
||||||
|
|
||||||
// 仅更新本地应用配置,避免重新获取整个列表导致滚动位置重置
|
// 更新本地应用配置
|
||||||
fun updateAppProfileLocally(packageName: String, updatedProfile: Natives.Profile) {
|
fun updateAppProfileLocally(packageName: String, updatedProfile: Natives.Profile) {
|
||||||
apps = apps.map { app ->
|
apps = apps.map { app ->
|
||||||
if (app.packageName == packageName) {
|
if (app.packageName == packageName) {
|
||||||
@@ -189,15 +194,10 @@ class SuperUserViewModel : ViewModel() {
|
|||||||
val pm = ksuApp.packageManager
|
val pm = ksuApp.packageManager
|
||||||
val start = SystemClock.elapsedRealtime()
|
val start = SystemClock.elapsedRealtime()
|
||||||
|
|
||||||
val userInfos = Platform.userManager.getUsers()
|
val packages = Platform.getInstalledPackagesAll {
|
||||||
val packages = mutableListOf<PackageInfo>()
|
Log.e(TAG, "getInstalledPackagesAll:", it)
|
||||||
val packageManager = Platform.packageManager
|
Toast.makeText(ksuApp, "Something went wrong, check logs", Toast.LENGTH_SHORT).show()
|
||||||
|
|
||||||
for (userInfo in userInfos) {
|
|
||||||
Log.i(TAG, "fetchAppList: ${userInfo.id}")
|
|
||||||
packages.addAll(packageManager.getInstalledPackages(0, userInfo.id))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
apps = packages.map {
|
apps = packages.map {
|
||||||
val appInfo = it.applicationInfo
|
val appInfo = it.applicationInfo
|
||||||
val uid = appInfo!!.uid
|
val uid = appInfo!!.uid
|
||||||
|
|||||||
@@ -2,9 +2,8 @@ package com.sukisu.ultra.ui.webui
|
|||||||
|
|
||||||
import android.content.ServiceConnection
|
import android.content.ServiceConnection
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import android.content.pm.PackageInfo
|
||||||
import com.dergoogler.mmrl.platform.Platform
|
import com.dergoogler.mmrl.platform.Platform
|
||||||
import com.dergoogler.mmrl.platform.hiddenApi.HiddenPackageManager
|
|
||||||
import com.dergoogler.mmrl.platform.hiddenApi.HiddenUserManager
|
|
||||||
import com.dergoogler.mmrl.platform.model.IProvider
|
import com.dergoogler.mmrl.platform.model.IProvider
|
||||||
import com.dergoogler.mmrl.platform.model.PlatformIntent
|
import com.dergoogler.mmrl.platform.model.PlatformIntent
|
||||||
import com.sukisu.ultra.ksuApp
|
import com.sukisu.ultra.ksuApp
|
||||||
@@ -57,6 +56,17 @@ suspend fun initPlatform() = withContext(Dispatchers.IO) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val Platform.Companion.packageManager get(): HiddenPackageManager = HiddenPackageManager(this.mService)
|
fun Platform.Companion.getInstalledPackagesAll(catch: (Exception) -> Unit = {}): List<PackageInfo> =
|
||||||
val Platform.Companion.userManager get(): HiddenUserManager = HiddenUserManager(this.mService)
|
try {
|
||||||
|
val packages = mutableListOf<PackageInfo>()
|
||||||
|
val userInfos = userManager.getUsers()
|
||||||
|
|
||||||
|
for (userInfo in userInfos) {
|
||||||
|
packages.addAll(packageManager.getInstalledPackages(0, userInfo.id))
|
||||||
|
}
|
||||||
|
|
||||||
|
packages
|
||||||
|
} catch (e: Exception) {
|
||||||
|
catch(e)
|
||||||
|
packageManager.getInstalledPackages(0, userManager.myUserId)
|
||||||
|
}
|
||||||
@@ -1,275 +0,0 @@
|
|||||||
package com.sukisu.ultra.ui.webui
|
|
||||||
|
|
||||||
import androidx.activity.ComponentActivity
|
|
||||||
import androidx.activity.SystemBarStyle
|
|
||||||
import androidx.activity.enableEdgeToEdge
|
|
||||||
import androidx.compose.foundation.background
|
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
|
||||||
import androidx.compose.foundation.layout.Box
|
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.material3.darkColorScheme
|
|
||||||
import androidx.compose.material3.dynamicDarkColorScheme
|
|
||||||
import androidx.compose.material3.dynamicLightColorScheme
|
|
||||||
import androidx.compose.material3.lightColorScheme
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.runtime.CompositionLocalProvider
|
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
|
||||||
import androidx.compose.runtime.SideEffect
|
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.runtime.staticCompositionLocalOf
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.draw.alpha
|
|
||||||
import androidx.compose.ui.draw.paint
|
|
||||||
import androidx.compose.ui.graphics.Brush
|
|
||||||
import androidx.compose.ui.graphics.Color
|
|
||||||
import androidx.compose.ui.graphics.toArgb
|
|
||||||
import androidx.compose.ui.layout.ContentScale
|
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import androidx.compose.ui.zIndex
|
|
||||||
import android.os.Build
|
|
||||||
import androidx.compose.animation.core.animateFloat
|
|
||||||
import androidx.compose.animation.core.spring
|
|
||||||
import androidx.compose.animation.core.updateTransition
|
|
||||||
import androidx.compose.ui.graphics.graphicsLayer
|
|
||||||
import coil.compose.AsyncImagePainter
|
|
||||||
import coil.compose.rememberAsyncImagePainter
|
|
||||||
import com.sukisu.ultra.ui.theme.ThemeConfig
|
|
||||||
import com.sukisu.ultra.ui.theme.Typography
|
|
||||||
import com.sukisu.ultra.ui.theme.loadCustomBackground
|
|
||||||
|
|
||||||
// 提供界面类型的本地组合
|
|
||||||
val LocalIsSecondaryScreen = staticCompositionLocalOf { false }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* WebUI专用主题配置
|
|
||||||
*/
|
|
||||||
@Composable
|
|
||||||
fun WebUIXTheme(
|
|
||||||
darkTheme: Boolean = isSystemInDarkTheme(),
|
|
||||||
dynamicColor: Boolean = true,
|
|
||||||
isSecondaryScreen: Boolean = false,
|
|
||||||
content: @Composable () -> Unit
|
|
||||||
) {
|
|
||||||
val context = LocalContext.current
|
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
|
||||||
if (!ThemeConfig.backgroundImageLoaded && !ThemeConfig.preventBackgroundRefresh) {
|
|
||||||
context.loadCustomBackground()
|
|
||||||
ThemeConfig.backgroundImageLoaded = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val colorScheme = when {
|
|
||||||
dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
|
|
||||||
if (darkTheme) {
|
|
||||||
dynamicDarkColorScheme(context).let { scheme ->
|
|
||||||
if (isSecondaryScreen) {
|
|
||||||
scheme.copy(
|
|
||||||
background = scheme.surfaceContainerHighest,
|
|
||||||
surface = scheme.surfaceContainerHighest
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
scheme.copy(
|
|
||||||
background = Color.Transparent,
|
|
||||||
surface = Color.Transparent
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
dynamicLightColorScheme(context).let { scheme ->
|
|
||||||
if (isSecondaryScreen) {
|
|
||||||
scheme.copy(
|
|
||||||
background = scheme.surfaceContainerHighest,
|
|
||||||
surface = scheme.surfaceContainerHighest
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
scheme.copy(
|
|
||||||
background = Color.Transparent,
|
|
||||||
surface = Color.Transparent
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
darkTheme -> {
|
|
||||||
if (isSecondaryScreen) {
|
|
||||||
darkColorScheme().copy(
|
|
||||||
background = MaterialTheme.colorScheme.surfaceContainerHighest,
|
|
||||||
surface = MaterialTheme.colorScheme.surfaceContainerHighest
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
darkColorScheme().copy(
|
|
||||||
background = Color.Transparent,
|
|
||||||
surface = Color.Transparent
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else -> {
|
|
||||||
if (isSecondaryScreen) {
|
|
||||||
lightColorScheme().copy(
|
|
||||||
background = MaterialTheme.colorScheme.surfaceContainerHighest,
|
|
||||||
surface = MaterialTheme.colorScheme.surfaceContainerHighest
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
lightColorScheme().copy(
|
|
||||||
background = Color.Transparent,
|
|
||||||
surface = Color.Transparent
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ConfigureSystemBars(darkTheme)
|
|
||||||
|
|
||||||
val backgroundUri = remember { mutableStateOf(ThemeConfig.customBackgroundUri) }
|
|
||||||
|
|
||||||
LaunchedEffect(ThemeConfig.customBackgroundUri) {
|
|
||||||
backgroundUri.value = ThemeConfig.customBackgroundUri
|
|
||||||
}
|
|
||||||
val bgImagePainter = backgroundUri.value?.let {
|
|
||||||
rememberAsyncImagePainter(
|
|
||||||
model = it,
|
|
||||||
onError = {
|
|
||||||
ThemeConfig.backgroundImageLoaded = false
|
|
||||||
},
|
|
||||||
onSuccess = {
|
|
||||||
ThemeConfig.backgroundImageLoaded = true
|
|
||||||
ThemeConfig.isThemeChanging = false
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 背景透明度动画
|
|
||||||
val transition = updateTransition(
|
|
||||||
targetState = ThemeConfig.backgroundImageLoaded,
|
|
||||||
label = "bgTransition"
|
|
||||||
)
|
|
||||||
|
|
||||||
val bgAlpha by transition.animateFloat(
|
|
||||||
label = "bgAlpha",
|
|
||||||
transitionSpec = {
|
|
||||||
spring(
|
|
||||||
dampingRatio = 0.8f,
|
|
||||||
stiffness = 300f
|
|
||||||
)
|
|
||||||
}
|
|
||||||
) { loaded -> if (loaded) 1f else 0f }
|
|
||||||
CompositionLocalProvider(LocalIsSecondaryScreen provides isSecondaryScreen) {
|
|
||||||
MaterialTheme(
|
|
||||||
colorScheme = colorScheme,
|
|
||||||
typography = Typography,
|
|
||||||
) {
|
|
||||||
if (isSecondaryScreen) {
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.background(MaterialTheme.colorScheme.surfaceContainerHighest)
|
|
||||||
) {
|
|
||||||
content()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Box(modifier = Modifier.fillMaxSize()) {
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.zIndex(-2f)
|
|
||||||
.background(if (darkTheme) Color.Black else Color.White)
|
|
||||||
)
|
|
||||||
|
|
||||||
backgroundUri.value?.let { uri ->
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.zIndex(-1f)
|
|
||||||
.alpha(bgAlpha)
|
|
||||||
) {
|
|
||||||
bgImagePainter?.let { painter ->
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.paint(
|
|
||||||
painter = painter,
|
|
||||||
contentScale = ContentScale.Crop
|
|
||||||
)
|
|
||||||
.graphicsLayer {
|
|
||||||
alpha = (painter.state as? AsyncImagePainter.State.Success)?.let { 1f } ?: 0f
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.background(
|
|
||||||
if (darkTheme) Color.Black.copy(alpha = 0.6f)
|
|
||||||
else Color.White.copy(alpha = 0.1f)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.background(
|
|
||||||
Brush.radialGradient(
|
|
||||||
colors = listOf(
|
|
||||||
Color.Transparent,
|
|
||||||
if (darkTheme) Color.Black.copy(alpha = 0.5f)
|
|
||||||
else Color.Black.copy(alpha = 0.2f)
|
|
||||||
),
|
|
||||||
radius = 1200f
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.zIndex(1f)
|
|
||||||
) {
|
|
||||||
content()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取当前界面是否为二级界面
|
|
||||||
*/
|
|
||||||
@Composable
|
|
||||||
fun isSecondaryScreen(): Boolean {
|
|
||||||
return LocalIsSecondaryScreen.current
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 配置WebUI的系统栏样式
|
|
||||||
*/
|
|
||||||
@Composable
|
|
||||||
private fun ConfigureSystemBars(
|
|
||||||
darkMode: Boolean,
|
|
||||||
statusBarScrim: Color = Color.Transparent,
|
|
||||||
navigationBarScrim: Color = Color.Transparent
|
|
||||||
) {
|
|
||||||
val context = LocalContext.current
|
|
||||||
val activity = context as ComponentActivity
|
|
||||||
|
|
||||||
SideEffect {
|
|
||||||
activity.enableEdgeToEdge(
|
|
||||||
statusBarStyle = SystemBarStyle.auto(
|
|
||||||
statusBarScrim.toArgb(),
|
|
||||||
statusBarScrim.toArgb()
|
|
||||||
) { darkMode },
|
|
||||||
navigationBarStyle = when {
|
|
||||||
darkMode -> SystemBarStyle.dark(
|
|
||||||
navigationBarScrim.toArgb()
|
|
||||||
)
|
|
||||||
else -> SystemBarStyle.light(
|
|
||||||
navigationBarScrim.toArgb(),
|
|
||||||
navigationBarScrim.toArgb()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -20,6 +20,7 @@ import com.dergoogler.mmrl.ui.component.Loading
|
|||||||
import com.dergoogler.mmrl.webui.screen.WebUIScreen
|
import com.dergoogler.mmrl.webui.screen.WebUIScreen
|
||||||
import com.dergoogler.mmrl.webui.util.rememberWebUIOptions
|
import com.dergoogler.mmrl.webui.util.rememberWebUIOptions
|
||||||
import com.sukisu.ultra.BuildConfig
|
import com.sukisu.ultra.BuildConfig
|
||||||
|
import com.sukisu.ultra.ui.theme.KernelSUTheme
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@@ -68,7 +69,7 @@ class WebUIXActivity : ComponentActivity() {
|
|||||||
val prefs = getSharedPreferences("settings", MODE_PRIVATE)
|
val prefs = getSharedPreferences("settings", MODE_PRIVATE)
|
||||||
|
|
||||||
setContent {
|
setContent {
|
||||||
WebUIXTheme {
|
KernelSUTheme {
|
||||||
var isLoading by remember { mutableStateOf(true) }
|
var isLoading by remember { mutableStateOf(true) }
|
||||||
|
|
||||||
LaunchedEffect(Platform.isAlive) {
|
LaunchedEffect(Platform.isAlive) {
|
||||||
@@ -81,7 +82,7 @@ class WebUIXActivity : ComponentActivity() {
|
|||||||
|
|
||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
Loading()
|
Loading()
|
||||||
return@WebUIXTheme
|
return@KernelSUTheme
|
||||||
}
|
}
|
||||||
|
|
||||||
val webDebugging = prefs.getBoolean("enable_web_debugging", false)
|
val webDebugging = prefs.getBoolean("enable_web_debugging", false)
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import android.webkit.JavascriptInterface
|
|||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.WindowInsetsControllerCompat
|
import androidx.core.view.WindowInsetsControllerCompat
|
||||||
|
import com.dergoogler.mmrl.webui.interfaces.WXInterface
|
||||||
import com.dergoogler.mmrl.webui.interfaces.WXOptions
|
import com.dergoogler.mmrl.webui.interfaces.WXOptions
|
||||||
import com.dergoogler.mmrl.webui.interfaces.WebUIInterface
|
|
||||||
import com.dergoogler.mmrl.webui.model.JavaScriptInterface
|
import com.dergoogler.mmrl.webui.model.JavaScriptInterface
|
||||||
import com.topjohnwu.superuser.CallbackList
|
import com.topjohnwu.superuser.CallbackList
|
||||||
import com.topjohnwu.superuser.ShellUtils
|
import com.topjohnwu.superuser.ShellUtils
|
||||||
@@ -20,15 +20,13 @@ import com.sukisu.ultra.ui.util.listModules
|
|||||||
import com.sukisu.ultra.ui.util.withNewRootShell
|
import com.sukisu.ultra.ui.util.withNewRootShell
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import com.sukisu.ultra.ui.util.controlKpmModule
|
import com.sukisu.ultra.ui.util.*
|
||||||
import com.sukisu.ultra.ui.util.listKpmModules
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
|
|
||||||
class WebViewInterface(
|
class WebViewInterface(
|
||||||
wxOptions: WXOptions,
|
wxOptions: WXOptions,
|
||||||
) : WebUIInterface(wxOptions) {
|
) : WXInterface(wxOptions) {
|
||||||
override var name: String = "ksu"
|
override var name: String = "ksu"
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -37,12 +35,6 @@ class WebViewInterface(
|
|||||||
|
|
||||||
private val modDir get() = "/data/adb/modules/${modId.id}"
|
private val modDir get() = "/data/adb/modules/${modId.id}"
|
||||||
|
|
||||||
@Composable
|
|
||||||
@JavascriptInterface
|
|
||||||
fun isSecondaryPage(): Boolean {
|
|
||||||
return isSecondaryScreen()
|
|
||||||
}
|
|
||||||
|
|
||||||
@JavascriptInterface
|
@JavascriptInterface
|
||||||
fun exec(cmd: String): String {
|
fun exec(cmd: String): String {
|
||||||
return withNewRootShell(true) { ShellUtils.fastCmd(this, cmd) }
|
return withNewRootShell(true) { ShellUtils.fastCmd(this, cmd) }
|
||||||
@@ -194,7 +186,7 @@ class WebViewInterface(
|
|||||||
@JavascriptInterface
|
@JavascriptInterface
|
||||||
fun moduleInfo(): String {
|
fun moduleInfo(): String {
|
||||||
val moduleInfos = JSONArray(listModules())
|
val moduleInfos = JSONArray(listModules())
|
||||||
var currentModuleInfo = JSONObject()
|
val currentModuleInfo = JSONObject()
|
||||||
currentModuleInfo.put("moduleDir", modDir)
|
currentModuleInfo.put("moduleDir", modDir)
|
||||||
val moduleId = File(modDir).getName()
|
val moduleId = File(modDir).getName()
|
||||||
for (i in 0 until moduleInfos.length()) {
|
for (i in 0 until moduleInfos.length()) {
|
||||||
@@ -204,7 +196,7 @@ class WebViewInterface(
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
var keys = currentInfo.keys()
|
val keys = currentInfo.keys()
|
||||||
for (key in keys) {
|
for (key in keys) {
|
||||||
currentModuleInfo.put(key, currentInfo.get(key))
|
currentModuleInfo.put(key, currentInfo.get(key))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,21 +2,772 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="108dp"
|
android:width="108dp"
|
||||||
android:height="108dp"
|
android:height="108dp"
|
||||||
android:viewportWidth="108"
|
android:viewportWidth="512"
|
||||||
android:viewportHeight="108">
|
android:viewportHeight="512">
|
||||||
|
<group android:scaleX="0.45"
|
||||||
|
android:scaleY="0.45"
|
||||||
|
android:translateX="140.8"
|
||||||
|
android:translateY="140.8">
|
||||||
|
|
||||||
<group
|
|
||||||
android:scaleX="0.135"
|
|
||||||
android:scaleY="0.135">
|
|
||||||
<path
|
<path
|
||||||
android:pathData="M 259 259 H 541 V 541 H 259 V 259 Z"
|
android:fillColor="#fff9f6"
|
||||||
android:strokeWidth="18"
|
android:strokeColor="#4c4f59"
|
||||||
android:strokeColor="#1e110d" />
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M164.239,424.641 L133.168,450.694 C133.168,450.694,127.975,468.87,159.134,479.627 C190.293,490.384,372.425,481.111,372.425,481.111 C372.425,481.111,424.728,492.981,453.29,444.017 C452.919,444.759,444.387,463.306,444.387,463.306 L445.871,482.595 C445.871,482.595,503.606,473.181,476.327,333.64 C480.524,324.197,484.72,318.427,484.72,318.427 L481.572,296.657 C481.572,296.657,487.23,256.322,489.455,251.128 C491.681,245.935,499.099,240,499.099,240 C499.099,240,496.317,219.598,492.422,213.849 C491.68,210.511,499.284,178.795,494.462,155.797 C487.414,143.927,489.64,143.927,475.544,130.202 C475.544,130.573,484.447,85.3181,474.802,56.7556 C471.834,56.7556,442.53,45.9983,377.986,80.4958 C377.615,81.6086,351.649,50.4496,224.416,64.5453 C223.674,64.5453,181.016,26.7093,157.647,24.1127 C156.534,23.7418,135.02,20.0323,132.423,73.0769 C132.423,74.1897,88.281,89.0274,76.4109,137.992 C64.5408,186.956,65.2827,218.857,65.2827,218.857 C65.2827,218.857,46.3778,246.52,55.4846,243.89 C60.8314,242.346,60.4605,267.45,60.4605,267.45 L58.2349,306.77 C58.2349,306.77,43.7682,342.009,43.3972,366.492 C43.0263,390.974,42.6553,400.619,48.2194,415.085 C53.7835,429.552,68.9921,461.824,90.8776,478.145 C99.7802,478.516,109.796,480,109.796,480 L113.505,459.227 C113.505,459.227,132.423,475.177,145.777,474.065 C159.131,472.952,145.035,473.323,145.035,473.323 L131.31,455.518 Z" />
|
||||||
<path
|
<path
|
||||||
android:fillColor="#1e110d"
|
android:fillColor="#93d4fa"
|
||||||
android:pathData="M 257 257 H 407 V 407 H 257 V 257 Z" />
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.9"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M133.91,110.17 L64.1717,157.65 L82.4357,188.404 L50.8182,244.079 L79.3807,261.142 L94.2186,259.658 L96.4452,204.017 L99.023,199.626 L117.217,177.681 L140.957,127.974 Z" />
|
||||||
<path
|
<path
|
||||||
android:fillColor="#1e110d"
|
android:fillColor="#ace0fe"
|
||||||
android:pathData="M 393 393 H 543 V 543 H 393 V 393 Z" />
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.54357"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M217.014,405.828 C217.014,405.828,224.431,379.883,258.18,378.755 C291.929,377.627,311.955,382.891,311.955,382.891 C311.955,382.891,323.081,389.283,329.756,397.555 C336.432,405.827,358.683,438.164,371.293,446.436 C383.902,454.708,386.498,461.852,386.498,461.852 L384.644,473.132 C384.644,473.132,369.809,483.284,353.862,484.788 C337.915,486.292,206.258,484.788,206.258,484.788 L176.218,481.78" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="1.2"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M363.541,444.682 C363.541,444.682,356.647,448.748,358.68,451.488 C360.713,454.228,364.602,454.935,364.602,454.935 C364.602,454.935,369.198,455.2,369.729,451.399 C370.259,447.598,366.724,444.593,366.724,444.593" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="1.2"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M349.677,459.826 C349.677,459.826,354.177,452.576,356.677,454.326 C359.177,456.076,352.427,461.576,352.427,461.576" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="8.7"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M228.97,465.109 A8.0341015,5.6995392,0,0,1,220.936,470.809 A8.0341015,5.6995392,0,0,1,212.902,465.109 A8.0341015,5.6995392,0,0,1,220.936,459.409 A8.0341015,5.6995392,0,0,1,228.97,465.109 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#6c9cb2"
|
||||||
|
android:strokeWidth="3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M220.852,408.918 C220.625,409.655,221.622,410.397,221.054,409.289 C220.495,408.199,221.513,410.375,221.635,410.685 C223.736,416.022,223.599,421.847,225.242,427.328 C225.544,428.335,225.83,429.367,225.836,430.427" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#6c9cb2"
|
||||||
|
android:strokeWidth="6.9"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M225.574,436.984 C224.352,441.357,225.651,446.212,227.992,449.836 C230.334,453.462,228.851,458.145,230.558,461.902 C232.274,465.678,232.769,470.295,230.257,474.062 C228.277,477.032,225.018,479.198,223.87,482.677 C223.87,482.677,223.796,483.338,223.796,483.338" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fbf3ef"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M259.148,381.902 C259.148,381.902,268.066,397.377,268.328,402.886 C268.59,408.394,300.59,401.05,300.59,401.05 C300.59,401.05,296.131,384.263,293.246,381.64 C290.361,379.017,259.148,381.902,259.148,381.902 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#6c9cb2"
|
||||||
|
android:strokeWidth="4.6"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M247.869,386.361 C248.493,387.123,249.181,387.683,248.222,386.467 C247.237,385.218,247.587,385.904,248.316,386.709 C249.718,388.257,250.625,390.115,251.419,392.051 C252.907,395.677,253.575,399.582,255.44,403.076 C256.689,405.416,258.189,407.614,259.411,409.968" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#6c9cb2"
|
||||||
|
android:strokeWidth="4.6"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M306.623,386.885 C308.253,392.964,310.665,398.821,313.443,404.459" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#6c9cb2"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M335.738,431.213 C336.508,434.977,338.987,438.481,341.225,442.105 C343.323,445.501,344.561,449.237,346.104,452.901 C348.174,457.813,352.855,461.643,353.803,466.855 C354.723,471.917,359.045,475.752,359.082,481.05" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M258.623,384.262 C258.623,384.262,266.754,391.082,269.902,411.278" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fbf3ef"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.9"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M127.233,329.025 C127.233,329.025,124.636,389.488,140.958,404.326 C149.119,396.165,150.973,393.94,150.973,393.94 L163.214,402.472 L168.407,398.021 L170.633,378.361 L175.826,368.346 L181.761,356.105 L173.229,347.573 L157.279,328.284 L153.941,323.462 L149.49,332.736 C149.49,332.736,137.249,332.736,133.54,330.139 C129.831,327.542,127.234,329.026,127.234,329.026 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M291.672,381.377 C291.672,381.377,298.754,387.934,301.902,407.869" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M270.164,404.197 C270.164,404.197,286.164,400.263,297.967,401.574" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M253.902,417.836 C253.902,417.836,291.148,404.721,323.672,408.656 C325.77,412.328,329.442,425.443,317.902,429.64 C313.181,429.64,298.754,428.066,295.345,429.115 C291.935,430.164,282.755,429.64,276.984,433.574 C271.214,437.508,262.295,442.492,258.623,436.722 C254.951,430.952,253.902,424.394,253.902,424.394 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M276.459,482.623 C276.459,482.623,266.754,481.049,277.508,436.197" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fcf6fa"
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M287.213,432.787 L293.508,483.672 L307.41,482.885 L300.59,428.852 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M287.738,430.951 L293.508,481.836" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M300.328,428.066 C300.328,428.066,302.426,465.837,307.672,481.05" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M313.18,431.213 C313.18,431.213,320.787,458.754,323.41,467.147 C326.033,475.54,315.279,482.885,315.279,482.885" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#bce4fd"
|
||||||
|
android:strokeWidth="8.7"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M164.239,424.641 L133.168,450.694 L138.176,464.419 L159.134,479.628 L176.219,481.782 L165.09,461.23 L163.544,438.446 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="8.7"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M163.818,451.101 A8.0341015,5.6995392,0,0,1,155.784,456.801 A8.0341015,5.6995392,0,0,1,147.75,451.101 A8.0341015,5.6995392,0,0,1,155.784,445.401 A8.0341015,5.6995392,0,0,1,163.818,451.101 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fff9f6"
|
||||||
|
android:strokeWidth="8.7"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M338.361,376.131 C338.361,376.131,340.197,407.082,332.066,427.541 C334.951,428.59,346.547,427.807,358.979,420.199 C371.411,412.591,370.361,398.164,370.361,398.164 L372.459,427.016 C372.459,427.016,396.778,398.917,396.684,374.409 C396.59,349.901,395.016,348.327,395.016,348.327 L383.182,347.2 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="2.845"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M339.782,389.859 C339.782,389.859,377.989,382.069,396.165,363.893 C401.729,372.425,404.326,396.536,404.326,396.536 L406.923,409.519 L423.244,346.83 L416.567,341.637 L410.632,324.203 C410.632,324.203,395.423,339.412,383.182,347.201 C370.941,354.991,349.055,366.49,349.055,366.49 L338.298,370.199 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="2.845"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M347.016,369.643 C347.016,369.643,349.242,379.658,345.161,389.488 C341.081,399.318,340.153,398.947,340.153,398.947" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="6.945"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M380.852,480 C380.852,480,425.442,462.689,440.131,392.918 C446.951,390.295,474.229,378.229,479.475,367.213 C482.098,357.246,475.803,335.213,475.803,335.213 L451.147,335.738 L424.393,340.459 L419.672,352 L411.279,404.459 L398.164,432.787 L382.426,468.984 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="8.74203"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M147.656,277.034 C147.656,277.034,136.529,381.17,275.24,380.421 C413.951,379.672,425.078,280.031,425.078,280.031" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fff9f6"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M123.279,147.934 L428.066,169.442 L403.41,129.049 C403.41,129.049,447.476,70.2949,454.295,68.7211 C461.115,67.1473,470.033,58.7539,470.033,58.7539 L456.918,55.0818 L379.803,77.1146 C379.803,77.1146,257.049,43.5408,211.41,70.8195 C165.771,98.0982,141.639,116.983,141.639,116.983 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M331.445,66.6518 L347.674,97.4945 L395.504,128.862 L401.81,129.94 L428.693,94.6046 L396.59,72.3936 L377.705,77.6395 L347.279,66.0985 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ace0fe"
|
||||||
|
android:strokeWidth="14.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M431.034,175.826 L448.097,158.763 L498.545,230.726 L492.61,248.531 L459.225,267.078 L446.613,250.757 L464.418,239.629 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ace0fe"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.945"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M465.902,261.885 C465.902,261.885,501.512,316.413,468.87,335.331 C443.646,339.411,420.648,337.557,420.648,337.557 L431.034,311.22 L452.549,269.304 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#febdc7"
|
||||||
|
android:strokeWidth="4.6"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M471.869,57.7049 C471.869,57.7049,488.918,126.689,460.853,168.131 C453.509,168.393,451.673,157.639,451.673,157.639 L453.771,151.082 L452.722,141.902 L455.083,131.148 L456.919,125.64 L450.624,119.607 L444.067,114.361 L441.182,109.115 L444.067,103.869 L441.444,98.6231 L437.247,95.7379 L434.099,94.1641 L439.345,82.6231 L451.148,75.2788 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ff1c1c"
|
||||||
|
android:fillAlpha="0.0509804"
|
||||||
|
android:strokeWidth="3.92397"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M244.267,326.814 A35.587568,21.480417,0,0,1,208.679,348.294 A35.587568,21.480417,0,0,1,173.091,326.814 A35.587568,21.480417,0,0,1,208.679,305.334 A35.587568,21.480417,0,0,1,244.267,326.814 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ff1c1c"
|
||||||
|
android:fillAlpha="0.05044398"
|
||||||
|
android:strokeWidth="3.65169"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M355.204,336.752 A31.611719,20.942554,0,0,1,323.592,357.695 A31.611719,20.942554,0,0,1,291.98,336.752 A31.611719,20.942554,0,0,1,323.592,315.809 A31.611719,20.942554,0,0,1,355.204,336.752 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fbf3ef"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M188.328,343.607 C188.328,343.607,200.394,315.279,204.066,349.902 C209.312,340.984,214.033,332.591,221.377,341.509 C228.197,343.607,236.59,348.853,226.098,363.542 C215.606,378.231,242.436,345.171,241.543,361.909 C240.822,375.421,217.021,408.72,217.021,408.72 C217.021,408.72,210.683,472.905,183.606,478.951 C147.058,487.112,171.54,375.082,171.54,375.082 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fbe7e5"
|
||||||
|
android:fillAlpha="0.40581462"
|
||||||
|
android:strokeWidth="10.4"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M193.631,383.924 A12.612,12.241061,0,0,1,181.019,396.165 A12.612,12.241061,0,0,1,168.407,383.924 A12.612,12.241061,0,0,1,181.019,371.683 A12.612,12.241061,0,0,1,193.631,383.924 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fee4e0"
|
||||||
|
android:fillAlpha="0.42411327"
|
||||||
|
android:strokeWidth="10.4"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M179.097,356.526 L193.193,335.753 L200.241,337.237 L200.983,350.962 L212.482,339.463 L221.756,343.543 L230.288,349.478 L224.724,364.316 L238.449,359.494 L235.111,377.299 L187.26,349.849 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M188.328,343.607 C188.328,343.607,200.394,315.279,204.066,349.902 C209.312,340.984,214.033,332.591,221.377,341.509 C228.197,343.607,236.59,348.853,226.098,363.542 C215.606,378.231,242.436,345.171,241.543,361.909 C240.822,375.421,217.021,408.72,217.021,408.72 C217.021,408.72,210.683,472.905,183.606,478.951 C147.058,487.112,171.54,375.082,171.54,375.082 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fff9f6"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M137.443,123.279 C137.443,123.279,186.782,74.6292,224.42,64.5441 C224.525,65.3118,104.253,-57.6139,137.443,123.279 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="1.18016"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M198.852,42 L135.218,81.0166 L139.059,121.956 L184.828,87 L224,64.5 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0.465732"
|
||||||
|
android:strokeColor="#a18f90"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M404.964,131.773 C405.489,131.004,406,130.224,406.539,129.465 C409.363,125.492,412.359,121.645,415.217,117.696 C417.61,114.388,419.157,112.153,421.508,108.796 C426.834,101.216,432.688,94.0352,438.717,87.009 C441.739,83.4584,444.784,79.9101,448.194,76.7199 C450.156,74.8844,452.413,73.0471,454.468,71.3278 C459.576,66.9703,465.137,63.2182,470.69,59.4657 C470.69,59.4657,467.765,57.6015,467.765,57.6015 L467.765,57.6015 C462.349,61.5016,456.862,65.3066,451.773,69.6416 C449.774,71.287,447.329,73.2528,445.41,75.0108 C441.958,78.1737,438.921,81.7424,435.922,85.3274 C429.967,92.4153,424.289,99.7266,418.922,107.272 C413.451,115.001,407.959,122.727,401.809,129.941 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0.465732"
|
||||||
|
android:strokeColor="#a18f90"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M431.705,96.8851 C432.388,96.8683,433.075,96.8931,433.759,96.9175 C435.025,96.9602,436.284,97.0933,437.535,97.2918 C438.884,97.5112,440.212,97.8397,441.533,98.1893 C442.837,98.5317,444.12,98.9495,445.392,99.3955 C445.74,99.5276,446.281,99.7279,446.624,99.8789 C446.813,99.9624,447.362,100.253,447.184,100.147 C442.264,97.2348,444.346,98.2776,445.168,99.2354 C445.635,100.178,444.914,101.046,444.335,101.751 C443.282,102.866,441.955,103.674,440.684,104.516 C439.979,105.042,438.841,105.512,438.657,106.495 C438.521,107.219,438.804,107.502,439.115,108.14 C439.373,108.455,439.611,108.787,439.889,109.085 C440.52,109.761,441.438,110.538,442.141,111.121 C443.425,112.185,444.754,113.196,446.067,114.223 C448.295,115.955,450.534,117.67,452.508,119.693 C453.753,121.058,454.844,122.554,455.616,124.235 C456.19,125.547,456.235,126.917,456.081,128.315 C455.929,129.857,455.069,131.063,454.111,132.22 C452.86,133.613,451.408,134.8,450.128,136.163 C449.51,136.928,448.934,137.773,448.792,138.77 C448.716,139.301,448.777,139.643,448.823,140.171 C449.005,141.517,449.421,142.813,449.857,144.095 C450.319,145.456,450.958,146.746,451.568,148.044 C452.147,149.17,452.449,150.372,452.547,151.627 C452.576,152.64,452.406,153.643,452.197,154.63 C452.014,155.489,451.806,156.25,451.273,156.96 C450.579,157.686,449.748,158.26,448.962,158.879 C448.962,158.879,452.094,160.848,452.094,160.848 L452.094,160.848 C452.901,160.205,453.758,159.61,454.468,158.856 C455.052,158.078,455.277,157.331,455.473,156.387 C455.691,155.367,455.861,154.331,455.857,153.286 C455.781,151.991,455.511,150.736,454.918,149.57 C454.311,148.282,453.67,147.005,453.196,145.659 C452.758,144.401,452.34,143.13,452.125,141.811 C452.072,141.379,451.995,140.958,452.039,140.519 C452.134,139.578,452.689,138.785,453.257,138.067 C454.534,136.692,455.986,135.496,457.243,134.102 C458.25,132.898,459.168,131.637,459.347,130.028 C459.522,128.576,459.514,127.143,458.951,125.764 C458.207,124.025,457.101,122.494,455.846,121.083 C455.078,120.279,454.934,120.098,454.085,119.342 C452.574,117.998,450.931,116.813,449.361,115.541 C448.052,114.517,446.728,113.509,445.442,112.456 C444.732,111.875,443.869,111.153,443.218,110.494 C442.948,110.22,442.706,109.919,442.45,109.632 C442.2,109.235,441.825,108.834,441.875,108.312 C441.954,107.485,443.212,106.929,443.774,106.494 C445.073,105.627,446.429,104.795,447.505,103.65 C448.192,102.813,448.909,101.854,448.58,100.714 C448.498,100.578,448.435,100.429,448.335,100.306 C448.225,100.172,448.104,100.04,447.956,99.9498 C446.131,98.8402,444.47,97.783,442.482,97.127 C441.204,96.6881,439.915,96.2798,438.606,95.9437 C437.278,95.6019,435.942,95.2832,434.585,95.0766 C433.319,94.8915,432.044,94.7705,430.765,94.7225 C430.077,94.6977,429.373,94.7137,428.694,94.6018 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0.465732"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M472.565,132.892 C472.58,133.665,472.464,134.438,472.369,135.204 C472.142,136.869,471.719,138.496,471.276,140.113 C470.664,142.278,469.96,144.416,469.202,146.534 C468.343,148.936,467.316,151.271,466.158,153.543 C465.033,155.731,463.751,157.831,462.385,159.876 C461.185,161.66,459.873,163.363,458.525,165.037 C457.749,165.984,456.962,166.921,456.176,167.859 C456.176,167.859,459.27,169.717,459.27,169.717 L459.27,169.717 C460.051,168.773,460.833,167.83,461.601,166.875 C462.941,165.183,464.252,163.468,465.446,161.67 C466.811,159.608,468.088,157.491,469.22,155.29 C470.384,153.005,471.417,150.659,472.298,148.249 C473.071,146.13,473.791,143.992,474.423,141.827 C474.89,140.207,475.334,138.577,475.608,136.911 C475.723,136.144,475.823,135.375,475.929,134.607 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fff9f6"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M322.623,86.0328 C322.623,86.0328,398.056,112.153,432.787,175.213 C466.23,235.934,465.836,237.639,465.836,237.639 C465.836,237.639,466.361,246.032,445.902,249.18 C443.279,249.18,460.591,280.131,465.836,286.426 C451.147,293.77,449.049,295.344,449.049,295.344 C449.049,295.344,455.344,303.213,453.77,311.082 C436.459,310.557,431.213,310.033,431.213,310.033 C431.213,310.033,427.016,327.344,415.475,343.082 C410.23,333.115,410.23,320,410.23,320 C410.23,320,386.098,356.721,337.836,361.443 C336.262,358.82,350.426,347.279,355.672,333.115 C344.131,334.689,340.983,335.213,340.983,335.213 L351.475,318.426 C351.475,318.426,362.491,294.295,360.918,290.098 C359.869,287.475,328.918,232.393,328.918,232.393 C328.918,232.393,304.262,265.442,285.377,282.229 C278.557,278.032,271.738,267.54,271.738,267.54 L259.148,279.081 C259.148,279.081,210.71,228.317,217.054,188.898 C213.906,200.964,217.181,245.507,211.411,251.278 C206.165,249.18,195.149,236.589,197.247,210.36 C196.722,209.835,167.345,251.803,167.345,251.803 C167.345,251.803,163.148,300.59,183.607,325.246 C185.181,327.869,182.033,341.508,152.132,322.623 C153.181,321.049,151.083,332.59,151.083,332.59 C151.083,332.59,104.394,334.688,105.444,271.738 C102.821,269.115,91.8047,305.836,91.8047,305.836 C91.8047,305.836,67.6735,273.836,91.2801,212.984 C103.083,182.558,114.624,160.132,123.215,145.312 C131.805,130.492,137.445,123.279,137.445,123.279" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fffdfc"
|
||||||
|
android:strokeWidth="7.4278"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M355.672,146.885 A91.803276,41.967213,0,0,1,263.869,188.852 A91.803276,41.967213,0,0,1,172.066,146.885 A91.803276,41.967213,0,0,1,263.869,104.918 A91.803276,41.967213,0,0,1,355.672,146.885 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M349.377,329.443 C349.377,329.443,420.721,287.476,428.066,238.164 C428.066,239.213,454.296,266.492,454.296,266.492 L465.837,290.623 L450.099,297.967 L452.197,311.606 L430.164,310.557 L417.574,340.983 L404.984,323.147 L381.902,349.377 L336.787,364.066 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M325.246,144.787 C325.246,144.787,335.738,188.853,327.344,223.476 C327.344,233.968,360.918,284.328,360.918,284.328 C360.918,284.328,375.607,212.984,335.738,152.131 C327.345,146.885,325.246,144.787,325.246,144.787 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M186.754,166.82 L209.836,167.869 C209.836,167.869,195.147,194.099,196.197,214.033 C194.099,210.885,174.164,245.508,174.164,245.508 C174.164,245.508,164.721,230.819,171.016,195.147 C180.459,178.36,186.754,166.819,186.754,166.819 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fffdfc"
|
||||||
|
android:strokeWidth="6.94619"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M340.28,112.237 A80.289719,41.967213,0,0,1,259.99,154.204 A80.289719,41.967213,0,0,1,179.7,112.237 A80.289719,41.967213,0,0,1,259.99,70.2698 A80.289719,41.967213,0,0,1,340.28,112.237 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#a18f90"
|
||||||
|
android:strokeWidth="7.7"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M138.623,122.492 C138.623,122.492,192.262,69.5084,231.607,64.2625" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M436.459,268.066 C436.459,268.066,440.131,286.427,433.836,310.558" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M418.098,305.836 L409.18,323.672" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M377.705,300.59 C377.705,300.59,380.328,312.656,355.672,332.59" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="4.2"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M284.328,97.5738 C284.328,97.5738,296.394,136.918,256.525,216.656 C257.05,216.656,310.033,177.836,312.656,127.476" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="5.1"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M272.787,87.082 C272.787,87.082,286.426,78.6886,291.672,86.5574 C308.845,97.3968,304.705,116.794,315.869,130.951 C317.662,132.804,323.041,130.17,323.672,132.721 C328.553,152.446,338.488,183.527,327.996,232.839" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="4.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M171.004,241.854 C171.004,241.854,142.442,181.762,263.368,94.219 C265.594,94.9609,204.017,148.377,197.34,205.502" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="3"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M327.344,143.738 C327.344,143.738,352.524,164.197,359.344,209.312" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M362.492,268.59 L359.344,288.524" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M421.77,344.131 C421.77,344.131,419.147,402.361,388.196,455.869 C357.245,509.377,426.491,471.607,426.491,471.607" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M395.016,348.328 L407.082,408.656" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M371.934,423.869 C371.934,423.869,402.885,398.164,396.59,349.902" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M332.066,427.541 C332.066,427.541,368.787,429.115,370.886,398.164" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M372.459,427.016 L370.361,398.164" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#93cefc"
|
||||||
|
android:strokeColor="#4d4e59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M377.509,228.61 C377.509,228.61,401.64,230.184,401.64,239.102 C401.115,242.774,390.099,256.938,378.033,257.987 C375.935,256.413,377.508,228.61,377.508,228.61 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fffdfe"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M350.951,235.541 C350.951,235.541,344.394,213.508,352,213.508 C359.607,213.508,365.377,227.41,365.377,227.41 C365.377,227.41,370.436,209.683,375.344,212.197 C387.142,218.241,378.754,233.967,378.754,233.967 C378.754,233.967,397.377,259.934,366.688,261.246 C336.521,262.535,350.95,235.541,350.95,235.541 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M332.066,425.967 C332.066,425.967,342.558,400.787,338.361,376.131" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#e85240"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M192.262,268.852 C192.262,268.852,176.787,290.885,189.639,304.262 C232.393,304.524,232.918,304.787,232.918,304.787 C232.918,304.787,244.197,296.394,238.426,272.787 C212.983,262.82,192.262,268.853,192.262,268.853 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fbb579"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M188.066,301.115 C187.624,292.333,201.519,287.099,210.361,286.689 C219.033,286.287,233.601,290.074,233.443,298.755 C233.366,303.017,221.902,304.263,221.902,304.263 C221.902,304.263,188.635,312.429,188.066,301.115 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M217.967,273.049 A7.8688526,7.0819674,0,0,1,210.098,280.131 A7.8688526,7.0819674,0,0,1,202.229,273.049 A7.8688526,7.0819674,0,0,1,210.098,265.967 A7.8688526,7.0819674,0,0,1,217.967,273.049 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#ebc2bf"
|
||||||
|
android:strokeWidth="2.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M174.164,245.508 C189.25,240.742,205.703,238.055,221.258,241.993 C224.556,242.828,227.776,243.986,230.82,245.508" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="6.945"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M477.772,132.797 C477.772,132.797,491.126,142.812,492.61,150.231 C494.094,157.65,494.094,207.727,494.094,207.727 L489.643,208.84 L458.855,171.375 C458.855,171.375,467.758,156.908,469.983,148.748 C472.209,140.587,477.773,132.798,477.773,132.798 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#e85240"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M192.262,268.852 C192.262,268.852,176.787,290.885,189.639,304.262 C232.393,304.524,232.918,304.787,232.918,304.787 C232.918,304.787,244.197,296.394,238.426,272.787 C212.983,262.82,192.262,268.853,192.262,268.853 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#e85240"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M325.521,272.819 C342.546,273.885,364.341,295.901,343.357,321.081 C341.783,321.606,294.372,315.775,293.783,311.901 C292.977,306.601,285.826,270.333,325.521,272.819 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fbb579"
|
||||||
|
android:strokeWidth="7.14054"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M293.046,306.321 C295.599,297.786,313.477,296.791,323.835,298.955 C333.994,301.077,349.503,308.913,346.293,317.177 C344.717,321.235,331.038,319.114,331.038,319.114 C331.038,319.114,289.756,317.315,293.045,306.321 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M325.521,272.819 C342.546,273.885,364.341,295.901,343.357,321.081 C341.783,321.606,294.372,315.775,293.783,311.901 C292.977,306.601,285.826,270.333,325.521,272.819 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#ebc2bf"
|
||||||
|
android:strokeWidth="2.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M309.328,258.435 C309.328,258.435,335.558,253.189,346.049,262.632" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M329.634,284.993 A7.8688526,7.0819674,0,0,1,321.765,292.075 A7.8688526,7.0819674,0,0,1,313.896,284.993 A7.8688526,7.0819674,0,0,1,321.765,277.911 A7.8688526,7.0819674,0,0,1,329.634,284.993 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="14.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M170.492,266.492 C170.492,266.492,202.492,246.558,240.787,264.394" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="14.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M292.997,274.177 C292.997,274.177,328.548,261.627,362.085,287.315" />
|
||||||
|
<path
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M431.034,176.197 L449.21,158.763 L490.755,212.92" />
|
||||||
|
<path
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M454.032,267.449 L497.247,243.523" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fff9f6"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M164.239,424.641 L133.168,450.694 C133.168,450.694,127.975,468.87,159.134,479.627 C190.293,490.384,372.425,481.111,372.425,481.111 C372.425,481.111,424.728,492.981,453.29,444.017 C452.919,444.759,444.387,463.306,444.387,463.306 L445.871,482.595 C445.871,482.595,503.606,473.181,476.327,333.64 C480.524,324.197,484.72,318.427,484.72,318.427 L481.572,296.657 C481.572,296.657,487.23,256.322,489.455,251.128 C491.681,245.935,497.971,244.777,499.099,240 C501.168,231.244,496.317,219.598,492.422,213.849 C491.68,210.511,499.284,178.795,494.462,155.797 C487.414,143.927,489.64,143.927,475.544,130.202 C475.544,130.573,484.447,85.3181,474.802,56.7556 C471.834,56.7556,442.53,45.9983,377.986,80.4958 C377.615,81.6086,351.649,50.4496,224.416,64.5453 C223.674,64.5453,181.016,26.7093,157.647,24.1127 C156.534,23.7418,135.02,20.0323,132.423,73.0769 C132.423,74.1897,88.281,89.0274,76.4109,137.992 C64.5408,186.956,65.2827,218.857,65.2827,218.857 C65.2827,218.857,46.3778,246.52,55.4846,243.89 C60.8314,242.346,60.4605,267.45,60.4605,267.45 L58.2349,306.77 C58.2349,306.77,43.7682,342.009,43.3972,366.492 C43.0263,390.974,42.6553,400.619,48.2194,415.085 C53.7835,429.552,68.9921,461.824,90.8776,478.145 C99.7802,478.516,109.796,480,109.796,480 L113.505,459.227 C113.505,459.227,132.423,475.177,145.777,474.065 C159.131,472.952,145.035,473.323,145.035,473.323 L131.31,455.518 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M197.508,220.066 L215.869,207.738" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M327.541,234.249 C327.541,234.249,321.269,239.154,311.683,233.258" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M322.623,86.0328 C322.623,86.0328,398.056,112.153,432.787,175.213 C466.23,235.934,465.836,237.639,465.836,237.639 C465.836,237.639,466.361,246.032,445.902,249.18 C443.279,249.18,460.591,280.131,465.836,286.426 C451.147,293.77,449.049,295.344,449.049,295.344 C449.049,295.344,455.344,303.213,453.77,311.082 C436.459,310.557,431.213,310.033,431.213,310.033 C431.213,310.033,427.016,327.344,415.475,343.082 C410.23,333.115,410.23,320,410.23,320 C410.23,320,386.098,356.721,337.836,361.443 C336.262,358.82,350.426,347.279,355.672,333.115 C344.131,334.689,340.983,335.213,340.983,335.213 L351.475,318.426 C351.475,318.426,362.491,294.295,360.918,290.098 C359.869,287.475,328.918,232.393,328.918,232.393 C328.918,232.393,304.262,265.442,285.377,282.229 C278.557,278.032,271.738,267.54,271.738,267.54 L259.148,279.081 C259.148,279.081,210.71,228.317,217.054,188.898 C213.906,200.964,217.181,245.507,211.411,251.278 C206.165,249.18,195.149,236.589,197.247,210.36 C196.722,209.835,167.345,251.803,167.345,251.803 C167.345,251.803,163.148,300.59,183.607,325.246 C185.181,327.869,182.033,341.508,152.132,322.623 C153.181,321.049,151.083,332.59,151.083,332.59 C151.083,332.59,104.394,334.688,105.444,271.738 C102.821,269.115,91.8047,305.836,91.8047,305.836 C91.8047,305.836,67.6735,273.836,91.2801,212.984 C103.083,182.558,114.624,160.132,123.215,145.312 C131.805,130.492,137.445,123.279,137.445,123.279" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#a88a8f"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="2.8623"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M216.292,255.539 A8.8904896,7.4928694,0,0,1,207.402,263.032 A8.8904896,7.4928694,0,0,1,198.512,255.539 A8.8904896,7.4928694,0,0,1,207.402,248.046 A8.8904896,7.4928694,0,0,1,216.292,255.539 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#a88a8f"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="2.8623"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M336.169,270.547 A8.8904896,7.4928694,0,0,1,327.279,278.04 A8.8904896,7.4928694,0,0,1,318.389,270.547 A8.8904896,7.4928694,0,0,1,327.279,263.054 A8.8904896,7.4928694,0,0,1,336.169,270.547 Z" />
|
||||||
|
<path
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#a18f90"
|
||||||
|
android:strokeWidth="10.4"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M318.719,85.4618 C318.719,85.4618,369.167,102.525,395.504,128.862 C421.841,155.199,428.147,168.182,428.147,168.182" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M186.754,224.525 L197.246,225.574" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fcbeb5"
|
||||||
|
android:strokeColor="#e99c9b"
|
||||||
|
android:strokeWidth="3.4"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M250.942,349.983 C250.942,349.983,237.032,341.08,240.927,333.291 C244.822,325.501,258.732,328.84,258.732,328.84 C258.732,328.84,271.715,327.542,278.763,324.945 C285.811,322.348,288.407,329.953,288.407,329.953 C288.407,329.953,293.172,336.018,284.141,346.46 C278.206,353.322,262.997,353.508,262.997,353.508" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e99c9b"
|
||||||
|
android:strokeWidth="1.8"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M276.209,325.765 C276.209,325.765,280.559,328.784,281.584,333.717 C282.155,333.823,284.918,330.63,284.56,326.844 C283.88,325.359,276.209,325.764,276.209,325.764 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e99c9b"
|
||||||
|
android:strokeWidth="1.8"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M245.007,329.396 L240.834,332.178 L240.741,338.206 L240.645,338.171 L247.718,329.354 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#e99c9b"
|
||||||
|
android:strokeWidth="3.4"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M250.942,349.983 C250.942,349.983,237.032,341.08,240.927,333.291 C244.822,325.501,258.732,328.84,258.732,328.84 C258.732,328.84,271.715,327.542,278.763,324.945 C285.811,322.348,288.407,329.953,288.407,329.953 C288.407,329.953,293.172,336.018,284.141,346.46 C278.206,353.322,262.997,353.508,262.997,353.508" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e89493"
|
||||||
|
android:strokeWidth="2.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M190.849,314.929 L196.97,329.952" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e89493"
|
||||||
|
android:strokeWidth="2.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M204.945,316.969 L210.509,331.25" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e89493"
|
||||||
|
android:strokeWidth="2.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M217.928,317.34 L225.347,333.847" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e89493"
|
||||||
|
android:strokeWidth="2.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M300.648,328.468 L307.51,346.644" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e89493"
|
||||||
|
android:strokeWidth="2.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M312.703,329.21 L319.38,346.273" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e89493"
|
||||||
|
android:strokeWidth="2.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M326.243,328.654 L333.291,346.645" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#e49589"
|
||||||
|
android:strokeWidth="4.6"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M218.492,348.984 C216.619,350.289,215.156,352.098,213.789,353.9 C212.764,355.251,211.787,356.65,211.017,358.164" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="3.2"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M127.475,375.082 C127.475,375.082,113.049,355.934,115.409,315.541" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:fillAlpha="0.734285"
|
||||||
|
android:strokeColor="#c1545a"
|
||||||
|
android:strokeWidth="7.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M136.393,322.098 C136.393,322.098,145.836,303.213,132.196,282.229 C129.048,281.704,159.999,254.426,137.442,205.114 C135.868,205.639,161.049,149.507,113.311,122.229 C109.114,113.836,67.6717,52.9831,24.1307,135.344 C24.1307,146.885,23.0815,171.541,23.0815,171.541 C23.0815,171.541,8.393,210.361,16.7864,243.41 C18.8848,246.558,-4.1972,293.246,27.8028,349.902 C28.3274,350.427,11.0159,407.607,40.393,432.787 C41.4422,437.508,54.0324,466.361,82.8848,472.131 C95.475,472.656,102.295,471.606,102.295,471.606 C102.295,471.606,133.77,466.885,150.033,404.458 C147.935,376.655,145.836,354.097,139.017,333.638" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:fillAlpha="0.734285"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeWidth="9"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M109.698,219.489 C109.698,219.489,94.4894,207.619,88.5543,199.829 M51.4602,219.86 L73.7167,197.974 M74.0876,183.878 L80.0227,225.794 M44.7833,201.683 L100.795,196.861 M111.923,179.427 L92.634,179.798 M92.2631,179.056 L90.7793,149.381 M51.8305,152.719 L89.6665,149.751 M64.8134,138.252 L65.5553,177.943" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:fillAlpha="0.734285"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeWidth="9"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M58.5078,352.286 L112.665,348.948 M66.2973,335.223 L101.908,332.255 M80.3934,299.983 L82.99,333.368 M64.072,317.047 L101.166,313.709 M102.65,332.256 L103.392,298.5 M103.021,298.871 L62.2175,301.097 M62.2175,300.726 L66.6688,334.111 M94.1184,285.889 L97.4569,271.422 M97.4569,269.938 L70.0072,271.422 M68.5234,286.26 L69.2653,266.229" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#d96477"
|
||||||
|
android:strokeWidth="0.00475452"
|
||||||
|
android:pathData="M69.454,376.47 C65.2333,376.691,61.3746,378.322,58.6708,381.019 C55.6903,384.001,54.4288,388.12,55.1367,392.567 C56.0415,398.241,59.9003,404.306,66.5213,410.469 C67.9264,411.773,68.9164,412.618,70.9123,414.211 C74.4198,417.006,77.5919,419.223,81.9616,421.92 C83.5211,422.888,86.5974,424.685,87.7577,425.309 L88.093,425.492 L88.5827,425.224 C90.3657,424.243,93.5432,422.361,95.4273,421.172 C102.554,416.674,108.26,412.159,112.491,407.666 C119.352,400.378,122.268,393.281,120.922,387.173 C119.991,382.968,116.877,379.49,112.459,377.723 C110.559,376.963,108.712,376.568,106.62,376.474 C103.911,376.351,101.244,376.814,98.7003,377.846 C94.3679,379.6,90.7486,383.019,88.4706,387.513 C88.3109,387.827,88.1619,388.103,88.1406,388.12 C88.0714,388.175,87.9969,388.069,87.7095,387.491 C87.0282,386.132,85.6923,384.157,84.6438,382.968 C83.5687,381.741,81.8389,380.245,80.5509,379.426 C77.2244,377.307,73.3284,376.27,69.4537,376.47 Z" />
|
||||||
</group>
|
</group>
|
||||||
</vector>
|
</vector>
|
||||||
@@ -1,22 +1,27 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="108dp"
|
android:width="512dp"
|
||||||
android:height="108dp"
|
android:height="512dp"
|
||||||
android:viewportWidth="108"
|
android:viewportWidth="512"
|
||||||
android:viewportHeight="108">
|
android:viewportHeight="512">
|
||||||
|
|
||||||
<group
|
|
||||||
android:scaleX="0.135"
|
|
||||||
android:scaleY="0.135">
|
|
||||||
<path
|
<path
|
||||||
android:pathData="M 259 259 H 541 V 541 H 259 V 259 Z"
|
android:pathData="m212.06,292.39c0,0 -14.77,-11.53 -20.53,-19.09m-36.03,19.45 l21.62,-21.26m0.36,-13.69 l5.76,40.71m-34.22,-23.42 l54.4,-4.68m10.81,-16.93 l-18.73,0.36m-0.36,-0.72 l-1.44,-28.82m-37.83,3.24 l36.75,-2.88m-24.14,-11.17 l0.72,38.55"
|
||||||
android:strokeWidth="18"
|
android:strokeLineJoin="round"
|
||||||
android:strokeColor="#000000" />
|
android:strokeWidth="8.74077"
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:fillAlpha="0.734285"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
<path
|
<path
|
||||||
|
android:pathData="m239.47,294.6 l48.58,-2.99m-41.59,-12.31 l31.94,-2.66m-19.3,-28.95 l2.33,29.94m-16.97,-14.64 l33.27,-2.99m1.33,16.64 l0.67,-30.28m-0.33,0.33 l-36.6,2m0,-0.33 l3.99,29.94m24.62,-43.25 l2.99,-12.98m0,-1.33 l-24.62,1.33m-1.33,13.31 l0.67,-17.97"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="8.07261"
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:fillAlpha="0.734285"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m319.56,229.67c-3.9,0.24 -7.46,1.99 -9.95,4.89 -2.75,3.2 -3.91,7.63 -3.26,12.41 0.84,6.1 4.4,12.62 10.51,19.24 1.3,1.4 2.21,2.31 4.05,4.02 3.24,3 6.16,5.39 10.2,8.29 1.44,1.04 4.28,2.97 5.35,3.64l0.31,0.2 0.45,-0.29c1.65,-1.05 4.58,-3.08 6.32,-4.36 6.58,-4.83 11.84,-9.69 15.75,-14.52 6.33,-7.83 9.02,-15.46 7.78,-22.03 -0.86,-4.52 -3.73,-8.26 -7.81,-10.16 -1.75,-0.82 -3.46,-1.24 -5.39,-1.34 -2.5,-0.13 -4.96,0.37 -7.31,1.47 -4,1.89 -7.34,5.56 -9.44,10.39 -0.15,0.34 -0.28,0.63 -0.3,0.65 -0.06,0.06 -0.13,-0.05 -0.4,-0.68 -0.63,-1.46 -1.86,-3.58 -2.83,-4.86 -0.99,-1.32 -2.59,-2.93 -3.78,-3.81 -3.07,-2.28 -6.67,-3.39 -10.24,-3.18z"
|
||||||
|
android:strokeWidth="0.00473542"
|
||||||
android:fillColor="#000000"
|
android:fillColor="#000000"
|
||||||
android:pathData="M 257 257 H 407 V 407 H 257 V 257 Z" />
|
android:strokeColor="#00000000"/>
|
||||||
<path
|
|
||||||
android:fillColor="#000000"
|
|
||||||
android:pathData="M 393 393 H 543 V 543 H 393 V 393 Z" />
|
|
||||||
</group>
|
|
||||||
</vector>
|
</vector>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@color/ic_launcher_background" />
|
<background android:drawable="@color/ic_launcher_background"/>
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||||
<monochrome android:drawable="@drawable/ic_launcher_monochrome" />
|
<monochrome android:drawable="@drawable/ic_launcher_monochrome" />
|
||||||
</adaptive-icon>
|
</adaptive-icon>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@color/ic_launcher_background"/>
|
||||||
|
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||||
|
</adaptive-icon>
|
||||||
|
Before Width: | Height: | Size: 235 B |
BIN
manager/app/src/main/res/mipmap-hdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
manager/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 313 B |
|
Before Width: | Height: | Size: 380 B |
BIN
manager/app/src/main/res/mipmap-mdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
manager/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 284 B |
BIN
manager/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
manager/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 304 B |
BIN
manager/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
manager/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 342 B |
BIN
manager/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
manager/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 18 KiB |
@@ -10,6 +10,9 @@
|
|||||||
<string name="home_unsupported">غير مدعوم</string>
|
<string name="home_unsupported">غير مدعوم</string>
|
||||||
<string name="home_unsupported_reason">KernelSU يدعم GKI kernels فقط</string>
|
<string name="home_unsupported_reason">KernelSU يدعم GKI kernels فقط</string>
|
||||||
<string name="home_kernel">إصدار النواة</string>
|
<string name="home_kernel">إصدار النواة</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">إصدار SuSFS</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">إصدار المدير</string>
|
<string name="home_manager_version">إصدار المدير</string>
|
||||||
<string name="home_fingerprint">البصمة</string>
|
<string name="home_fingerprint">البصمة</string>
|
||||||
<string name="home_selinux_status">وضع SELinux</string>
|
<string name="home_selinux_status">وضع SELinux</string>
|
||||||
@@ -22,7 +25,10 @@
|
|||||||
<string name="module_failed_to_disable">فشل تعطيل الإضافة : %s</string>
|
<string name="module_failed_to_disable">فشل تعطيل الإضافة : %s</string>
|
||||||
<string name="module_empty">لا توجد إضافات مثبتة</string>
|
<string name="module_empty">لا توجد إضافات مثبتة</string>
|
||||||
<string name="module">الإضافات</string>
|
<string name="module">الإضافات</string>
|
||||||
|
<string name="module_sort_action_first">فرز (الإجراء أولاً)</string>
|
||||||
|
<string name="module_sort_enabled_first">فرز (الممكن أولاً)</string>
|
||||||
<string name="uninstall">إلغاء التثبيت</string>
|
<string name="uninstall">إلغاء التثبيت</string>
|
||||||
|
<string name="restore">إسترجاع</string>
|
||||||
<string name="module_install">تثبيت الوحدة</string>
|
<string name="module_install">تثبيت الوحدة</string>
|
||||||
<string name="install">تثبيت</string>
|
<string name="install">تثبيت</string>
|
||||||
<string name="reboot">إعادة تشغيل</string>
|
<string name="reboot">إعادة تشغيل</string>
|
||||||
@@ -50,84 +56,318 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">تعرف على كيفية تثبيت KernelSU واستخدام الإضافات</string>
|
<string name="home_click_to_learn_kernelsu">تعرف على كيفية تثبيت KernelSU واستخدام الإضافات</string>
|
||||||
<string name="home_support_title">إدعمنا</string>
|
<string name="home_support_title">إدعمنا</string>
|
||||||
<string name="home_support_content">KernelSU سيظل دائماً مجانياً ومفتوح المصدر. مع ذلك، يمكنك أن تظهر لنا أنك تهتم بالتبرع.</string>
|
<string name="home_support_content">KernelSU سيظل دائماً مجانياً ومفتوح المصدر. مع ذلك، يمكنك أن تظهر لنا أنك تهتم بالتبرع.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[أنظر إلى مصدر البرمجة في %1$s<br/>إنضم إلى قناتنا في %2$s ]]></string>
|
||||||
|
<string name="profile_default">الإفتراضي</string>
|
||||||
|
<string name="profile_template">نموذج</string>
|
||||||
|
<string name="profile_custom">مُخصّص</string>
|
||||||
|
<string name="profile_name">اسم الملف الشخصي</string>
|
||||||
|
<string name="profile_namespace">تركيب مساحة الاسم</string>
|
||||||
|
<string name="profile_namespace_inherited">موروث</string>
|
||||||
|
<string name="profile_namespace_global">عالمي</string>
|
||||||
|
<string name="profile_namespace_individual">فردي</string>
|
||||||
|
<string name="profile_groups">مجموعات</string>
|
||||||
<string name="profile_capabilities">القدرات</string>
|
<string name="profile_capabilities">القدرات</string>
|
||||||
|
<string name="profile_selinux_context">سياق SELinux</string>
|
||||||
|
<string name="profile_umount_modules">الغاء تحميل الإضافات</string>
|
||||||
|
<string name="failed_to_update_app_profile">فشل تحديث ملف تعريف التطبيق لـ %s</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">إصدار KernelSU الحالي %d منخفض جدًا بحيث لا يعمل المدير بشكل صحيح. الرجاء الترقية إلى الإصدار %d أو أعلى!</string>
|
||||||
|
<string name="settings_umount_modules_default">الغاء تحميل الإضافات بشكل افتراضي</string>
|
||||||
|
<string name="settings_umount_modules_default_summary">القيمة الافتراضية العامة لـ\"إلغاء تحميل الإضافات\" في ملفات تعريف التطبيقات. إذا تم تمكينه، إزالة جميع تعديلات الإضافات على النظام للتطبيقات التي لا تحتوي على مجموعة ملف تعريف.</string>
|
||||||
|
<string name="settings_susfs_toggle">تعطيل روابط kprobe</string>
|
||||||
|
<string name="profile_umount_modules_summary">سيسمح تمكين هذا الخيار لـKernelSU باستعادة أي ملفات معدلة بواسطة الإضافات لهذا التطبيق.</string>
|
||||||
|
<string name="profile_selinux_domain">المجال</string>
|
||||||
|
<string name="profile_selinux_rules">القواعد</string>
|
||||||
<string name="module_update">تحديث</string>
|
<string name="module_update">تحديث</string>
|
||||||
<string name="module_downloading">تحميل الإضافة: %s</string>
|
<string name="module_downloading">تحميل الإضافة: %s</string>
|
||||||
<string name="module_start_downloading">ابدأ التنزيل: %s</string>
|
<string name="module_start_downloading">ابدأ التنزيل: %s</string>
|
||||||
<string name="new_version_available">الإصدار الجديد: %s متاح ، انقر للتحديث.</string>
|
<string name="new_version_available">الإصدار الجديد: %s متاح ، انقر للتحديث.</string>
|
||||||
<string name="launch_app">تشغيل</string>
|
<string name="launch_app">تشغيل</string>
|
||||||
<string name="profile_default">الإفتراضي</string>
|
<string name="force_stop_app" formatted="false">ايقاف إجباري</string>
|
||||||
<string name="profile_template">نموذج</string>
|
|
||||||
<string name="profile_namespace_inherited">موروث</string>
|
|
||||||
<string name="profile_namespace_global">عالمي</string>
|
|
||||||
<string name="profile_namespace_individual">فردي</string>
|
|
||||||
<string name="profile_groups">مجموعات</string>
|
|
||||||
<string name="profile_custom">مُخصّص</string>
|
|
||||||
<string name="profile_namespace">تركيب مساحة الاسم</string>
|
|
||||||
<string name="profile_umount_modules">الغاء تحميل الإضافات</string>
|
|
||||||
<string name="failed_to_update_app_profile">فشل تحديث ملف تعريف التطبيق لـ %s</string>
|
|
||||||
<string name="profile_selinux_context">سياق SELinux</string>
|
|
||||||
<string name="force_stop_app">ايقاف إجباري</string>
|
|
||||||
<string name="settings_umount_modules_default">الغاء تحميل الإضافات بشكل افتراضي</string>
|
|
||||||
<string name="settings_umount_modules_default_summary">القيمة الافتراضية العامة لـ\"إلغاء تحميل الإضافات\" في ملفات تعريف التطبيقات. إذا تم تمكينه، إزالة جميع تعديلات الإضافات على النظام للتطبيقات التي لا تحتوي على مجموعة ملف تعريف.</string>
|
|
||||||
<string name="profile_umount_modules_summary">سيسمح تمكين هذا الخيار لـKernelSU باستعادة أي ملفات معدلة بواسطة الإضافات لهذا التطبيق.</string>
|
|
||||||
<string name="profile_selinux_domain">المجال</string>
|
|
||||||
<string name="profile_selinux_rules" formatted="false">القواعد</string>
|
|
||||||
<string name="restart_app">إعادة تشغيل التطبيق</string>
|
<string name="restart_app">إعادة تشغيل التطبيق</string>
|
||||||
<string name="failed_to_update_sepolicy">فشل تحديث قواعد SELinux لـ %s</string>
|
<string name="failed_to_update_sepolicy">فشل تحديث قواعد SELinux لـ %s</string>
|
||||||
<string name="profile_name">اسم الملف الشخصي</string>
|
|
||||||
<string name="module_changelog">سجل التغييرات</string>
|
<string name="module_changelog">سجل التغييرات</string>
|
||||||
<string name="app_profile_template_import_success">تم الاستيراد بنجاح</string>
|
<string name="settings_profile_template">قالب ملف تعريف التطبيق</string>
|
||||||
<string name="app_profile_export_to_clipboard">تصدير إلى الحافظة</string>
|
<string name="settings_profile_template_summary">إدارة القالب المحلي وعبر الإنترنت لملف تعريف التطبيق</string>
|
||||||
<string name="app_profile_template_export_empty">لا يمكن العثور على القالب المحلي للتصدير!</string>
|
|
||||||
<string name="app_profile_template_id_exist">معرف القالب موجود بالفعل!</string>
|
|
||||||
<string name="app_profile_import_from_clipboard">استيراد من الحافظة</string>
|
|
||||||
<string name="module_changelog_failed">فشل في جلب سجل التغيير: %s</string>
|
|
||||||
<string name="app_profile_template_name">الاسم</string>
|
|
||||||
<string name="app_profile_template_id_invalid">معرف القالب غير صالح</string>
|
|
||||||
<string name="app_profile_template_sync">مزامنة القوالب عبر الإنترنت</string>
|
|
||||||
<string name="app_profile_template_create">إنشاء قالب</string>
|
<string name="app_profile_template_create">إنشاء قالب</string>
|
||||||
<string name="app_profile_template_readonly">للقراءة فقط</string>
|
|
||||||
<string name="app_profile_import_export">استيراد / تصدير</string>
|
|
||||||
<string name="app_profile_template_save_failed">فشل في حفظ القالب</string>
|
|
||||||
<string name="app_profile_template_edit">تحرير القالب</string>
|
<string name="app_profile_template_edit">تحرير القالب</string>
|
||||||
<string name="app_profile_template_id">المعرف</string>
|
<string name="app_profile_template_id">المعرف</string>
|
||||||
<string name="settings_profile_template">قالب ملف تعريف التطبيق</string>
|
<string name="app_profile_template_id_invalid">معرف القالب غير صالح</string>
|
||||||
|
<string name="app_profile_template_name">الاسم</string>
|
||||||
<string name="app_profile_template_description">الوصف</string>
|
<string name="app_profile_template_description">الوصف</string>
|
||||||
<string name="app_profile_template_save">حفظ</string>
|
<string name="app_profile_template_save">حفظ</string>
|
||||||
<string name="settings_profile_template_summary">إدارة القالب المحلي وعبر الإنترنت لملف تعريف التطبيق</string>
|
|
||||||
<string name="app_profile_template_delete">حذف</string>
|
<string name="app_profile_template_delete">حذف</string>
|
||||||
<string name="app_profile_template_import_empty">الحافظة فارغة!</string>
|
|
||||||
<string name="app_profile_template_view">عرض القالب</string>
|
<string name="app_profile_template_view">عرض القالب</string>
|
||||||
<string name="grant_root_failed">فشل في منح صلاحية الجذر!</string>
|
<string name="app_profile_template_readonly">للقراءة فقط</string>
|
||||||
<string name="open">فتح</string>
|
<string name="app_profile_template_id_exist">معرف القالب موجود بالفعل!</string>
|
||||||
<string name="settings_check_update_summary">التحقق تلقائيًا من وجود تحديثات عند فتح التطبيق</string>
|
<string name="app_profile_import_export">استيراد / تصدير</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">استيراد من الحافظة</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">تصدير إلى الحافظة</string>
|
||||||
|
<string name="app_profile_template_export_empty">لا يمكن العثور على القالب المحلي للتصدير!</string>
|
||||||
|
<string name="app_profile_template_import_success">تم الاستيراد بنجاح</string>
|
||||||
|
<string name="app_profile_template_sync">مزامنة القوالب عبر الإنترنت</string>
|
||||||
|
<string name="app_profile_template_save_failed">فشل في حفظ القالب</string>
|
||||||
|
<string name="app_profile_template_import_empty">الحافظة فارغة!</string>
|
||||||
|
<string name="module_changelog_failed">فشل في جلب سجل التغيير: %s</string>
|
||||||
<string name="settings_check_update">التحقق من التحديث</string>
|
<string name="settings_check_update">التحقق من التحديث</string>
|
||||||
|
<string name="settings_check_update_summary">التحقق تلقائيًا من وجود تحديثات عند فتح التطبيق</string>
|
||||||
|
<string name="grant_root_failed">فشل في منح صلاحية الجذر!</string>
|
||||||
|
<string name="action">إجراء</string>
|
||||||
|
<string name="open">فتح</string>
|
||||||
|
<string name="close">إغلاق</string>
|
||||||
<string name="enable_web_debugging">تمكين تصحيح أخطاء WebView</string>
|
<string name="enable_web_debugging">تمكين تصحيح أخطاء WebView</string>
|
||||||
<string name="enable_web_debugging_summary">يمكن استخدامه لتصحيح أخطاء WebUI، يرجى تمكينه فقط عند الحاجة.</string>
|
<string name="enable_web_debugging_summary">يمكن استخدامه لتصحيح أخطاء WebUI، يرجى تمكينه فقط عند الحاجة.</string>
|
||||||
<string name="install_next">التالي</string>
|
|
||||||
<string name="select_file">اختيار ملف</string>
|
|
||||||
<string name="direct_install">تثبيت مباشر (موصى به)</string>
|
<string name="direct_install">تثبيت مباشر (موصى به)</string>
|
||||||
|
<string name="select_file">اختيار ملف</string>
|
||||||
<string name="install_inactive_slot">التثبيت على فتحة غير نشطة (بعد OTA)</string>
|
<string name="install_inactive_slot">التثبيت على فتحة غير نشطة (بعد OTA)</string>
|
||||||
<string name="install_inactive_slot_warning">سيتم **إجبار** جهازك على التمهيد إلى الفتحة غير النشطة الحالية بعد إعادة التشغيل!
|
<string name="install_inactive_slot_warning">سيتم **إجبار** جهازك على التمهيد إلى الفتحة غير النشطة الحالية بعد إعادة التشغيل!
|
||||||
\nاستخدم هذا الخيار فقط بعد انتهاء التحديث.
|
\nاستخدم هذا الخيار فقط بعد انتهاء التحديث.
|
||||||
\nأستمرار؟</string>
|
\nأستمرار؟</string>
|
||||||
<string name="select_kmi">اختر KMI</string>
|
<string name="install_next">التالي</string>
|
||||||
<string name="select_file_tip">يوصى باستخدام صورة القسم %1$s</string>
|
<string name="select_file_tip">يوصى باستخدام صورة القسم %1$s</string>
|
||||||
|
<string name="select_kmi">اختر KMI</string>
|
||||||
<string name="settings_uninstall">إلغاء التثبيت</string>
|
<string name="settings_uninstall">إلغاء التثبيت</string>
|
||||||
<string name="settings_uninstall_temporary">إلغاء التثبيت مؤقتًا</string>
|
<string name="settings_uninstall_temporary">إلغاء التثبيت مؤقتًا</string>
|
||||||
<string name="settings_uninstall_permanent">إلغاء التثبيت بشكل دائم</string>
|
<string name="settings_uninstall_permanent">إلغاء التثبيت بشكل دائم</string>
|
||||||
<string name="settings_restore_stock_image">استعادة الصورة الاصلية</string>
|
<string name="settings_restore_stock_image">استعادة الصورة الاصلية</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">قم بإلغاء تثبيت KernelSU مؤقتًا، واستعد إلى حالته الأصلية بعد إعادة التشغيل التالية.</string>
|
||||||
<string name="settings_uninstall_permanent_message">إلغاء تثبيت KernelSU .(الجذر وجميع الوحدات) بشكل كامل ودائم.</string>
|
<string name="settings_uninstall_permanent_message">إلغاء تثبيت KernelSU .(الجذر وجميع الوحدات) بشكل كامل ودائم.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">استعادة صورة المصنع المخزنة (في حالة وجود نسخة احتياطية)، والتي تُستخدم عادة قبل OTA؛ إذا كنت بحاجة إلى إلغاء تثبيت KernelSU، فيرجى استخدام \"إلغاء التثبيت الدائم\".</string>
|
||||||
<string name="flashing">تركيب</string>
|
<string name="flashing">تركيب</string>
|
||||||
<string name="flash_success">نجح التركيب</string>
|
<string name="flash_success">نجح التركيب</string>
|
||||||
<string name="flash_failed">فشل التركيب</string>
|
<string name="flash_failed">فشل التركيب</string>
|
||||||
<string name="selected_lkm">LKM المحددة: %s</string>
|
<string name="selected_lkm">LKM المحددة: %s</string>
|
||||||
<string name="settings_restore_stock_image_message">استعادة صورة المصنع المخزنة (في حالة وجود نسخة احتياطية)، والتي تُستخدم عادة قبل OTA؛ إذا كنت بحاجة إلى إلغاء تثبيت KernelSU، فيرجى استخدام \"إلغاء التثبيت الدائم\".</string>
|
|
||||||
<string name="settings_uninstall_temporary_message">قم بإلغاء تثبيت KernelSU مؤقتًا، واستعد إلى حالته الأصلية بعد إعادة التشغيل التالية.</string>
|
|
||||||
<string name="save_log">حفظ السجلات</string>
|
<string name="save_log">حفظ السجلات</string>
|
||||||
<string name="action">إجراء</string>
|
|
||||||
<string name="log_saved">السجلات محفوظة</string>
|
<string name="log_saved">السجلات محفوظة</string>
|
||||||
<string name="module_sort_enabled_first">فرز (الممكن أولاً)</string>
|
<string name="status_supported">إدعمنا</string>
|
||||||
<string name="module_sort_action_first">فرز (الإجراء أولاً)</string>
|
<string name="status_not_supported">غير مدعوم</string>
|
||||||
|
<string name="status_unknown">غير معروف</string>
|
||||||
|
<string name="sus_su_mode">وضع SuS SU</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">تأكيد وحدة التثبيت %1$s؟</string>
|
||||||
|
<string name="unknown_module">وحدة غير معروفة</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">تأكيد استعادة الوحدة</string>
|
||||||
|
<string name="restore_confirm_message">هذه العملية سوف تستبدل جميع الوحدات الموجودة. هل تريد المتابعة؟</string>
|
||||||
|
<string name="confirm">تأكيد</string>
|
||||||
|
<string name="cancel">إلغاء</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">النسخ الاحتياطي ناجح (tar.gz)</string>
|
||||||
|
<string name="backup_failed">فشل النسخ الاحتياطي: %1$s</string>
|
||||||
|
<string name="backup_modules">وحدات النسخ الاحتياطي</string>
|
||||||
|
<string name="restore_modules">استعادة الوحدات</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">تم استعادة الوحدات بنجاح, إعادة التشغيل مطلوبة</string>
|
||||||
|
<string name="restore_failed">فشل الاستعادة: %1$s</string>
|
||||||
|
<string name="restart_now">أعد تشغيل التطبيق الآن</string>
|
||||||
|
<string name="unknown_error">خطأ غير معروف</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">فشل تنفيذ الأوامر: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">السماح بالنسخ الاحتياطي للقائمة بنجاح</string>
|
||||||
|
<string name="allowlist_backup_failed">فشل النسخ الاحتياطي لقائمة السماح: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">تأكيد استعادة القائمة المسموح بها</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">هذه العملية ستقوم بالكتابة فوق قائمة المسموح بها. هل تريد المتابعة؟</string>
|
||||||
|
<string name="allowlist_restore_success">تمت استعادة القائمة بنجاح</string>
|
||||||
|
<string name="allowlist_restore_failed">فشل استعادة القائمة المسموحة: %1$s</string>
|
||||||
|
<string name="backup_allowlist">قائمة النسخ الاحتياطي</string>
|
||||||
|
<string name="restore_allowlist">استعادة قائمة المسموح بها</string>
|
||||||
|
<string name="settings_custom_background">خلفية التطبيق المخصصة</string>
|
||||||
|
<string name="settings_custom_background_summary">حدد صورة كخلفية</string>
|
||||||
|
<string name="settings_card_alpha">شفافية شريط التنقل</string>
|
||||||
|
<string name="settings_restore_default">استعادة الإعدادات الافتراضية</string>
|
||||||
|
<string name="home_android_version">إصدار Android</string>
|
||||||
|
<string name="home_device_model">نوع الجهاز</string>
|
||||||
|
<string name="su_not_allowed">لا يسمح بمنح المستخدم المتميز ل %s</string>
|
||||||
|
<string name="settings_disable_su">تعطيل توافق su</string>
|
||||||
|
<string name="settings_disable_su_summary">تعطيل أي تطبيقات مؤقتًا من الحصول على امتيازات الجذر عن طريق الأمر <unk> su (لن تتأثر عمليات الجذر الحالية).</string>
|
||||||
|
<string name="using_mksu_manager">أنت تستخدم مدير Beta SukiSU</string>
|
||||||
|
<string name="module_install_multiple_confirm">هل أنت متأكد من أنك تريد تثبيت وحدات %d المحددة؟</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">هل أنت متأكد من أنك تريد تثبيت وحدات %1$d التالية؟ \n\n%2$s</string>
|
||||||
|
<string name="more_settings">المزيد من الإعدادات</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">مفعّل</string>
|
||||||
|
<string name="selinux_disabled">رفض</string>
|
||||||
|
<string name="simple_mode">وضع البساطة</string>
|
||||||
|
<string name="simple_mode_summary">إخفاء البطاقات غير الضرورية عند تشغيلها</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">إخفاء إصدار النواة</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">إخفاء إصدار النواة</string>
|
||||||
|
<string name="hide_other_info">إخفاء معلومات أخرى</string>
|
||||||
|
<string name="hide_other_info_summary">يخفي معلومات عن عدد المستخدمين المتميزين والوحدات ووحدات KPM على الصفحة الرئيسية</string>
|
||||||
|
<string name="hide_susfs_status">إخفاء حالة SuSFS</string>
|
||||||
|
<string name="hide_susfs_status_summary">إخفاء معلومات حالة SuSFS على الصفحة الرئيسية</string>
|
||||||
|
<string name="hide_link_card">إخفاء حالة بطاقة الرابط</string>
|
||||||
|
<string name="hide_link_card_summary">إخفاء معلومات البطاقة في الصفحة الرئيسية</string>
|
||||||
|
<string name="theme_mode">الثيم</string>
|
||||||
|
<string name="theme_follow_system">اتبّاع النظام</string>
|
||||||
|
<string name="theme_light">فاتح</string>
|
||||||
|
<string name="theme_dark">مظلم</string>
|
||||||
|
<string name="manual_hook">ربط يدوي</string>
|
||||||
|
<string name="dynamic_color_title">لون ديناميكية</string>
|
||||||
|
<string name="dynamic_color_summary">الألوان الديناميكية باستخدام سمات النظام</string>
|
||||||
|
<string name="choose_theme_color">اختر لون السمة</string>
|
||||||
|
<string name="color_default">أزرق</string>
|
||||||
|
<string name="color_green">أخضر</string>
|
||||||
|
<string name="color_purple">أرجواني</string>
|
||||||
|
<string name="color_orange">برتقالي</string>
|
||||||
|
<string name="color_pink">وردي</string>
|
||||||
|
<string name="color_gray">رمادي</string>
|
||||||
|
<string name="color_yellow">الأصفر</string>
|
||||||
|
<string name="flash_option">خيارات الفرشاة</string>
|
||||||
|
<string name="flash_option_tip">حدد الملف المراد إلفاؤه</string>
|
||||||
|
<string name="horizon_kernel">Anykernel3 yükle</string>
|
||||||
|
<string name="horizon_kernel_summary">فلاش AnyKernel3 ملف kernel</string>
|
||||||
|
<string name="root_required">يتطلب امتيازات الجذر</string>
|
||||||
|
<string name="copy_failed">فشل نسخ الملف</string>
|
||||||
|
<string name="reboot_complete_title">اكتمل التشويش</string>
|
||||||
|
<string name="reboot_complete_msg">هل تريد إعادة التشغيل فوراً؟</string>
|
||||||
|
<string name="yes">نعم</string>
|
||||||
|
<string name="no">لايوجد</string>
|
||||||
|
<string name="failed_reboot">فشل إعادة التشغيل</string>
|
||||||
|
<string name="batch_authorization">التمكين</string>
|
||||||
|
<string name="batch_cancel_authorization">السحب</string>
|
||||||
|
<string name="backup">النسخ الاحتياطية</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">لا توجد وحدات نواة مثبتة في هذا الوقت</string>
|
||||||
|
<string name="kpm_version">الإصدار</string>
|
||||||
|
<string name="kpm_author">المؤلف</string>
|
||||||
|
<string name="kpm_uninstall">إلغاء التثبيت</string>
|
||||||
|
<string name="kpm_uninstall_success">تم إلغاء التثبيت بنجاح</string>
|
||||||
|
<string name="kpm_uninstall_failed">فشل في إلغاء التثبيت</string>
|
||||||
|
<string name="kpm_install">تثبيت</string>
|
||||||
|
<string name="kpm_install_success">تم تحميل وحدة كيلو جزء بنجاح</string>
|
||||||
|
<string name="kpm_install_failed">فشل تحميل وحدة كيلو بايم</string>
|
||||||
|
<string name="kpm_args">العوامل المتغيرة</string>
|
||||||
|
<string name="kpm_control">تنفيذ</string>
|
||||||
|
<string name="home_kpm_version">إصدار KPM</string>
|
||||||
|
<string name="close_notice">إغلاق</string>
|
||||||
|
<string name="kernel_module_notice">تم تطوير وظائف نواة الوحدة النمطية التالية بواسطة KernelPatch وتعديلها لتشمل وظائف نواة الوحدة النمطية لـ SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">سوكيسو أولترا تتطلع إلى الأمام</string>
|
||||||
|
<string name="kpm_control_success">نجحت</string>
|
||||||
|
<string name="kpm_control_failed">فشل</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">وستشكل سوكيسو أولترا في المستقبل فرعا مستقلا نسبيا من فروع الوحدة، ولكننا لا نزال نقدر كيرنيل سو وموكسو الرسميين وما إلى ذلك. لإسهاماتهم!</string>
|
||||||
|
<string name="not_supported">غير مدعوم</string>
|
||||||
|
<string name="supported">إدعمنا</string>
|
||||||
|
<string name="home_kpm_module">"عدد وحدات KPM: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">ملف KPM غير صحيح</string>
|
||||||
|
<string name="kernel_patched">النواة غير مصحوبة</string>
|
||||||
|
<string name="kernel_not_enabled">لم يتم تكوين النواة</string>
|
||||||
|
<string name="custom_settings">الإعدادات المُخصصة</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">التحميل</string>
|
||||||
|
<string name="kpm_install_mode_embed">فسيفساء</string>
|
||||||
|
<string name="kpm_install_mode_description">الرجاء التحديد: %1\$s وضع تثبيت الوحدة \n\nالتحميل: قم بتحميل الوحدة \nمؤقتا: تثبيت دائم في النظام</string>
|
||||||
|
<string name="log_failed_to_check_module_file">فشل التحقق من وجود ملف الوحدة</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">غير قادر على التحقق من وجود ملف الوحدة</string>
|
||||||
|
<string name="confirm_uninstall_title">تأكيد إلغاء التثبيت</string>
|
||||||
|
<string name="confirm_uninstall_confirm">إلغاء التثبيت</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">إلغاء</string>
|
||||||
|
<string name="theme_color">ألوان المظهر</string>
|
||||||
|
<string name="invalid_file_type">نوع الملف غير صحيح! الرجاء تحديد ملف .kpm.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">إلغاء التثبيت</string>
|
||||||
|
<string name="confirm_uninstall_content">سيتم إلغاء تثبيت KPM التالية: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">تعطيل روابط kprobe التي أنشأتها KernelSU، باستخدام الروابط الواردة بدلاً من ذلك، والتي تشبه طريقة الربط غير GKI غير GKI.</string>
|
||||||
|
<string name="image_editor_title">ضبط صورة الخلفية</string>
|
||||||
|
<string name="image_editor_hint">استخدم إصبعين لتكبير الصورة، وأصبع واحد لسحبها لضبط الموضع</string>
|
||||||
|
<string name="background_image_error">تعذر تحميل الصورة</string>
|
||||||
|
<string name="reprovision">إعادة</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">ضرب النواة</string>
|
||||||
|
<string name="horizon_logs_label">السجلات:</string>
|
||||||
|
<string name="horizon_flash_complete">الفلاش اكتمل</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">جار التحضير</string>
|
||||||
|
<string name="horizon_cleaning_files">تنظيف الملفات…</string>
|
||||||
|
<string name="horizon_copying_files">جارٍ نسخ الملف…</string>
|
||||||
|
<string name="horizon_extracting_tool">استخراج أداة فلاش…</string>
|
||||||
|
<string name="horizon_patching_script">تعديل البرنامج النصي الفلاش…</string>
|
||||||
|
<string name="horizon_flashing">نواة رمادية…</string>
|
||||||
|
<string name="horizon_flash_complete_status">الفلاش اكتمل</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">حدد فتحة الفلاش</string>
|
||||||
|
<string name="select_slot_description">الرجاء تحديد الخانة المستهدفة للتشغيل المبطن</string>
|
||||||
|
<string name="slot_a">خانة A</string>
|
||||||
|
<string name="slot_b">الخانة B</string>
|
||||||
|
<string name="selected_slot">الفتحة المحددة: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">الحصول على الفتحة الأصلية</string>
|
||||||
|
<string name="horizon_setting_target_slot">تعيين الفتحة المحددة</string>
|
||||||
|
<string name="horizon_restoring_original_slot">استعادة الخانة الافتراضية</string>
|
||||||
|
<string name="current_slot">خانة حالية:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">فشل النسخ</string>
|
||||||
|
<string name="horizon_unknown_error">خطأ غير معروف</string>
|
||||||
|
<string name="flash_failed_message">فشل التركيب</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">إصلاح/تثبيت LKM</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">إصدار النواة:%1$s</string>
|
||||||
|
<string name="tool_version_log">استخدام أداة التصحيح:%1$s</string>
|
||||||
|
<string name="configuration">تعيين</string>
|
||||||
|
<string name="app_settings">إعدادات التطبيق </string>
|
||||||
|
<string name="tools">ادوات</string>
|
||||||
|
<string name="currently_selected">حالياً</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">إزالة</string>
|
||||||
|
<string name="apps_with_root">التطبيقات مع امتيازات الجذر</string>
|
||||||
|
<string name="apps_with_custom_profile">التطبيقات مع الإعدادات المخصصة</string>
|
||||||
|
<string name="other_apps">التطبيقات ذات الإعدادات الافتراضية بدون تغيير</string>
|
||||||
|
<string name="no_apps_found">التطبيق غير موجود</string>
|
||||||
|
<string name="selinux_enabled_toast">تم تمكين SELinux</string>
|
||||||
|
<string name="selinux_disabled_toast">تم تعطيل SELinux</string>
|
||||||
|
<string name="selinux_change_failed">فشل تغيير حالة SELinux</string>
|
||||||
|
<string name="advanced_settings">إعدادات متقدمة</string>
|
||||||
|
<string name="appearance_settings">تخصيص شريط الأدوات</string>
|
||||||
|
<string name="back">عد مرة أخرى</string>
|
||||||
|
<string name="expand">كن في طريقه كامل</string>
|
||||||
|
<string name="collapse">وضع بعيدا</string>
|
||||||
|
<string name="susfs_enabled">تم تمكين SuSFS</string>
|
||||||
|
<string name="susfs_disabled">تم تعطيل SuSFS</string>
|
||||||
|
<string name="background_set_success">تم تعيين الخلفية بنجاح</string>
|
||||||
|
<string name="background_removed">إزالة خلفيات مخصصة</string>
|
||||||
|
<string name="root_require_for_install">يتطلب امتيازات الجذر</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">عرض وظيفة KPM</string>
|
||||||
|
<string name="show_kpm_info_summary">عرض معلومات KPM ووظيفتها في الشريط المنزلي والأسفل (تحتاج إلى إعادة فتح التطبيق)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">حقن Eruda في WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">حقن وحدة التصحيح في WebUI X لجعل تصحيح الأخطاء أسهل. يتطلب تصحيح أخطاء الويب لتكون قيد التشغيل.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">إعداد DPI</string>
|
||||||
|
<string name="app_dpi_title">تم تطبيق DPI</string>
|
||||||
|
<string name="app_dpi_summary">ضبط كثافة عرض الشاشة للتطبيق الحالي فقط</string>
|
||||||
|
<string name="dpi_size_small">صغير </string>
|
||||||
|
<string name="dpi_size_medium">متوسط </string>
|
||||||
|
<string name="dpi_size_large">كبير</string>
|
||||||
|
<string name="dpi_size_extra_large">حجم كبير</string>
|
||||||
|
<string name="dpi_size_custom">قابلة للتعديل</string>
|
||||||
|
<string name="dpi_apply_settings">تطبيق إعدادات DPI</string>
|
||||||
|
<string name="dpi_confirm_title">تأكيد تغيير إدارة شؤون الإعلام</string>
|
||||||
|
<string name="dpi_confirm_message">هل أنت متأكد من أنك تريد تغيير تطبيق DPI من %1$d إلى %2$d؟</string>
|
||||||
|
<string name="dpi_confirm_summary">يحتاج التطبيق إلى إعادة تشغيل لتطبيق الإعدادات الجديدة لإدارة شؤون الإعلام، ولا يؤثر على شريط حالة النظام أو التطبيقات الأخرى</string>
|
||||||
|
<string name="dpi_applied_success">تم تعيين DPI إلى %1$d، فعلي بعد إعادة تشغيل التطبيق</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">لغة التطبيق</string>
|
||||||
|
<string name="language_follow_system">اتبع النظام</string>
|
||||||
|
<string name="language_changed">تم تغيير اللغة، إعادة التشغيل لتطبيق التغييرات</string>
|
||||||
|
<string name="settings_card_dim">تعديل ظلام البطاقة</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">في الأعلى</string>
|
||||||
|
<string name="scroll_to_bottom">أسفل</string>
|
||||||
|
<string name="scroll_to_top_description">التمرير لأعلى</string>
|
||||||
|
<string name="scroll_to_bottom_description">التمرير إلى الأسفل</string>
|
||||||
|
<string name="authorized">مصرح</string>
|
||||||
|
<string name="unauthorized">غير مصرح</string>
|
||||||
|
<string name="selected">محدد</string>
|
||||||
|
<string name="select">خيار</string>
|
||||||
|
<string name="profile_umount_modules_disable">تعطيل وحدة إلغاء التثبيت المخصصة</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">رمز الخطأ</string>
|
||||||
|
<string name="check_log">يرجى التحقق من السجل</string>
|
||||||
|
<string name="installing_module">تم تثبيت الوحدة %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">أخفق %d في تثبيت وحدة جديدة</string>
|
||||||
|
<string name="module_download_error">فشل تحميل الوحدة</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,80 +1,371 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="home">Ana səhifə</string>
|
<string name="home">Ana səhifə</string>
|
||||||
<string name="home_superuser_count">Super istifadəçilər: %d</string>
|
|
||||||
<string name="home_kernel">Nüvə</string>
|
|
||||||
<string name="home_not_installed">Yüklənmədi</string>
|
<string name="home_not_installed">Yüklənmədi</string>
|
||||||
<string name="home_click_to_install">Yükləmək üçün toxunun</string>
|
<string name="home_click_to_install">Yükləmək üçün toxunun</string>
|
||||||
<string name="home_working">İşləyir</string>
|
<string name="home_working">İşləyir</string>
|
||||||
<string name="home_working_version">Versiya: %d</string>
|
<string name="home_working_version">Versiya: %d</string>
|
||||||
|
<string name="home_superuser_count">Super istifadəçilər: %d</string>
|
||||||
<string name="home_module_count">Modullar: %d</string>
|
<string name="home_module_count">Modullar: %d</string>
|
||||||
<string name="home_unsupported_reason">Hal-hazırda KernelSU yalnız GKI nüvələrini dəstəkləyir</string>
|
|
||||||
<string name="home_unsupported">Dəstəklənmir</string>
|
<string name="home_unsupported">Dəstəklənmir</string>
|
||||||
<string name="module_install">Yüklə</string>
|
<string name="home_unsupported_reason">Hal-hazırda KernelSU yalnız GKI nüvələrini dəstəkləyir</string>
|
||||||
<string name="install">Yüklə</string>
|
<string name="home_kernel">Nüvə</string>
|
||||||
<string name="selinux_status_unknown">Naməlum</string>
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
<string name="home_fingerprint">Barmaq izi</string>
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Menecer versiyası</string>
|
<string name="home_manager_version">Menecer versiyası</string>
|
||||||
<string name="selinux_status_disabled">Qeyri-aktiv</string>
|
<string name="home_fingerprint">Barmaq izi</string>
|
||||||
<string name="home_selinux_status">SELinux vəziyyəti</string>
|
<string name="home_selinux_status">SELinux vəziyyəti</string>
|
||||||
<string name="selinux_status_permissive">Sərbəst</string>
|
<string name="selinux_status_disabled">Qeyri-aktiv</string>
|
||||||
<string name="selinux_status_enforcing">Məcburi</string>
|
<string name="selinux_status_enforcing">Məcburi</string>
|
||||||
|
<string name="selinux_status_permissive">Sərbəst</string>
|
||||||
|
<string name="selinux_status_unknown">Naməlum</string>
|
||||||
<string name="superuser">Super istifadəçi</string>
|
<string name="superuser">Super istifadəçi</string>
|
||||||
<string name="uninstall">Sil</string>
|
|
||||||
<string name="module_failed_to_enable">Modulu aktiv etmək mümkün olmadı: %s</string>
|
<string name="module_failed_to_enable">Modulu aktiv etmək mümkün olmadı: %s</string>
|
||||||
<string name="module_failed_to_disable">Modulu deaktiv etmək mümkün olmadı: %s</string>
|
<string name="module_failed_to_disable">Modulu deaktiv etmək mümkün olmadı: %s</string>
|
||||||
<string name="module_empty">Heç bir modul quraşdırılmayıb</string>
|
<string name="module_empty">Heç bir modul quraşdırılmayıb</string>
|
||||||
<string name="module">Modul</string>
|
<string name="module">Modul</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
|
<string name="uninstall">Sil</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
|
<string name="module_install">Yüklə</string>
|
||||||
|
<string name="install">Yüklə</string>
|
||||||
<string name="reboot">Yenidən başlat</string>
|
<string name="reboot">Yenidən başlat</string>
|
||||||
<string name="settings">Parametrlər</string>
|
<string name="settings">Parametrlər</string>
|
||||||
<string name="reboot_recovery">Bərpa rejimində yenidən başlat</string>
|
|
||||||
<string name="reboot_userspace">Yüngül vəziyyətdə yenodən başlat</string>
|
<string name="reboot_userspace">Yüngül vəziyyətdə yenodən başlat</string>
|
||||||
|
<string name="reboot_recovery">Bərpa rejimində yenidən başlat</string>
|
||||||
<string name="reboot_bootloader">Bootloader rejimində yenidən başlat</string>
|
<string name="reboot_bootloader">Bootloader rejimində yenidən başlat</string>
|
||||||
<string name="reboot_download">Yükləmə rejimində yenidən başlat</string>
|
<string name="reboot_download">Yükləmə rejimində yenidən başlat</string>
|
||||||
|
<string name="reboot_edl">EDL rejimində yenidən başlat</string>
|
||||||
|
<string name="about">Haqqında</string>
|
||||||
|
<string name="module_uninstall_confirm">Modulu silmək istədiyinizdən əminsiniz %s\?</string>
|
||||||
|
<string name="module_uninstall_success">%s silindi</string>
|
||||||
|
<string name="module_uninstall_failed">Silmək mümkün olmadı: %s</string>
|
||||||
<string name="module_version">Versiya</string>
|
<string name="module_version">Versiya</string>
|
||||||
<string name="module_author">Sahib</string>
|
<string name="module_author">Sahib</string>
|
||||||
<string name="module_uninstall_confirm">Modulu silmək istədiyinizdən əminsiniz %s\?</string>
|
<string name="refresh">Yenilə</string>
|
||||||
<string name="show_system_apps">Sistem proqramlarını göstər</string>
|
<string name="show_system_apps">Sistem proqramlarını göstər</string>
|
||||||
<string name="about">Haqqında</string>
|
|
||||||
<string name="reboot_edl">EDL rejimində yenidən başlat</string>
|
|
||||||
<string name="module_uninstall_failed">Silmək mümkün olmadı: %s</string>
|
|
||||||
<string name="module_uninstall_success">%s silindi</string>
|
|
||||||
<string name="hide_system_apps">Sistem proqramlarını gizlət</string>
|
<string name="hide_system_apps">Sistem proqramlarını gizlət</string>
|
||||||
<string name="send_log">Log-u göndər</string>
|
<string name="send_log">Log-u göndər</string>
|
||||||
<string name="refresh">Yenilə</string>
|
|
||||||
<string name="safe_mode">Təhlükəsiz rejimi</string>
|
<string name="safe_mode">Təhlükəsiz rejimi</string>
|
||||||
<string name="reboot_to_apply">Qüvvəyə minməsi üçün yenidən başlat</string>
|
<string name="reboot_to_apply">Qüvvəyə minməsi üçün yenidən başlat</string>
|
||||||
<string name="module_magisk_conflict">Modular deaktiv edilir,çünki o Magisk-in modulları ilə toqquşur!</string>
|
<string name="module_magisk_conflict">Modular deaktiv edilir,çünki o Magisk-in modulları ilə toqquşur!</string>
|
||||||
<string name="home_learn_kernelsu">KernelSU-yu öyrən</string>
|
<string name="home_learn_kernelsu">KernelSU-yu öyrən</string>
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
<string name="home_support_title">Bizi dəstəkləyin</string>
|
|
||||||
<string name="home_click_to_learn_kernelsu">KernelSU-yu necə quraşdırılacağını və modulların necə istifadə ediləcəyini öyrən</string>
|
<string name="home_click_to_learn_kernelsu">KernelSU-yu necə quraşdırılacağını və modulların necə istifadə ediləcəyini öyrən</string>
|
||||||
<string name="profile_template">Şablon</string>
|
<string name="home_support_title">Bizi dəstəkləyin</string>
|
||||||
<string name="profile_default">Defolt</string>
|
|
||||||
<string name="profile_custom">Özəl</string>
|
|
||||||
<string name="home_support_content">KernelSU pulsuz və açıq mənbəlidir,həmişə belə olacaqdır. Bununla belə, ianə etməklə bizə qayğı göstərdiyinizi göstərə bilərsiniz.</string>
|
<string name="home_support_content">KernelSU pulsuz və açıq mənbəlidir,həmişə belə olacaqdır. Bununla belə, ianə etməklə bizə qayğı göstərdiyinizi göstərə bilərsiniz.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
|
<string name="profile_default">Defolt</string>
|
||||||
|
<string name="profile_template">Şablon</string>
|
||||||
|
<string name="profile_custom">Özəl</string>
|
||||||
<string name="profile_name">Profil adı</string>
|
<string name="profile_name">Profil adı</string>
|
||||||
<string name="profile_capabilities">Bacarıqlar</string>
|
<string name="profile_namespace">Bölmənin ad sahəsi</string>
|
||||||
<string name="profile_umount_modules">Modulları umount et</string>
|
|
||||||
<string name="profile_namespace_inherited">Miras qalmış</string>
|
<string name="profile_namespace_inherited">Miras qalmış</string>
|
||||||
<string name="profile_namespace_global">Qlobal</string>
|
<string name="profile_namespace_global">Qlobal</string>
|
||||||
<string name="profile_namespace">Bölmənin ad sahəsi</string>
|
|
||||||
<string name="profile_namespace_individual">Fərdi</string>
|
<string name="profile_namespace_individual">Fərdi</string>
|
||||||
<string name="profile_groups">Qruplar</string>
|
<string name="profile_groups">Qruplar</string>
|
||||||
<string name="settings_umount_modules_default">Defolt olaraq modulları umount et</string>
|
<string name="profile_capabilities">Bacarıqlar</string>
|
||||||
<string name="profile_selinux_context">SELinux konteksi</string>
|
<string name="profile_selinux_context">SELinux konteksi</string>
|
||||||
|
<string name="profile_umount_modules">Modulları umount et</string>
|
||||||
<string name="failed_to_update_app_profile">%s görə tətbiq profillərini güncəlləmək mümkün olmadı</string>
|
<string name="failed_to_update_app_profile">%s görə tətbiq profillərini güncəlləmək mümkün olmadı</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
|
<string name="settings_umount_modules_default">Defolt olaraq modulları umount et</string>
|
||||||
<string name="settings_umount_modules_default_summary">Tətbiq Profillərində \"Umount modulları\" üçün qlobal standart dəyər. Aktivləşdirilərsə, o, Profil dəsti olmayan proqramlar üçün sistemdəki bütün modul dəyişikliklərini siləcək.</string>
|
<string name="settings_umount_modules_default_summary">Tətbiq Profillərində \"Umount modulları\" üçün qlobal standart dəyər. Aktivləşdirilərsə, o, Profil dəsti olmayan proqramlar üçün sistemdəki bütün modul dəyişikliklərini siləcək.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
|
<string name="profile_umount_modules_summary">Bu seçimi aktivləşdirmək KernelSU-ya bu proqram üçün modullar tərəfindən hər hansı dəyişdirilmiş faylları bərpa etməyə imkan verəcək.</string>
|
||||||
<string name="profile_selinux_domain">Domen</string>
|
<string name="profile_selinux_domain">Domen</string>
|
||||||
<string name="profile_selinux_rules">Qaydalar</string>
|
<string name="profile_selinux_rules">Qaydalar</string>
|
||||||
<string name="module_update">Güncəllə</string>
|
<string name="module_update">Güncəllə</string>
|
||||||
|
<string name="module_downloading">Modul yüklənir: %s</string>
|
||||||
<string name="module_start_downloading">Endirməni başlat: %s</string>
|
<string name="module_start_downloading">Endirməni başlat: %s</string>
|
||||||
<string name="new_version_available">Yeni versiya: %s əlçatandır, endirmək üçün toxunun</string>
|
<string name="new_version_available">Yeni versiya: %s əlçatandır, endirmək üçün toxunun</string>
|
||||||
<string name="module_downloading">Modul yüklənir: %s</string>
|
|
||||||
<string name="profile_umount_modules_summary">Bu seçimi aktivləşdirmək KernelSU-ya bu proqram üçün modullar tərəfindən hər hansı dəyişdirilmiş faylları bərpa etməyə imkan verəcək.</string>
|
|
||||||
<string name="launch_app">Aç</string>
|
<string name="launch_app">Aç</string>
|
||||||
<string name="force_stop_app">Məcburi dayandır</string>
|
<string name="force_stop_app" formatted="false">Məcburi dayandır</string>
|
||||||
<string name="restart_app">Yenidən başlat</string>
|
<string name="restart_app">Yenidən başlat</string>
|
||||||
<string name="failed_to_update_sepolicy">%s görə SELinux qaydalarını güncəlləmək mümkün olmadı</string>
|
<string name="failed_to_update_sepolicy">%s görə SELinux qaydalarını güncəlləmək mümkün olmadı</string>
|
||||||
|
<string name="module_changelog">Changelog</string>
|
||||||
|
<string name="settings_profile_template">App Profile Template</string>
|
||||||
|
<string name="settings_profile_template_summary">Manage local and online template of App Profile</string>
|
||||||
|
<string name="app_profile_template_create">Create template</string>
|
||||||
|
<string name="app_profile_template_edit">Edit template</string>
|
||||||
|
<string name="app_profile_template_id">ID</string>
|
||||||
|
<string name="app_profile_template_id_invalid">Invalid template ID</string>
|
||||||
|
<string name="app_profile_template_name">Name</string>
|
||||||
|
<string name="app_profile_template_description">Description</string>
|
||||||
|
<string name="app_profile_template_save">Save</string>
|
||||||
|
<string name="app_profile_template_delete">Delete</string>
|
||||||
|
<string name="app_profile_template_view">View template</string>
|
||||||
|
<string name="app_profile_template_readonly">Read only</string>
|
||||||
|
<string name="app_profile_template_id_exist">Template ID already exists!</string>
|
||||||
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Import from clipboard</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Export to clipboard</string>
|
||||||
|
<string name="app_profile_template_export_empty">Cannot find local template to export!</string>
|
||||||
|
<string name="app_profile_template_import_success">Imported successfully</string>
|
||||||
|
<string name="app_profile_template_sync">Sync online templates</string>
|
||||||
|
<string name="app_profile_template_save_failed">Failed to save template</string>
|
||||||
|
<string name="app_profile_template_import_empty">Clipboard is empty!</string>
|
||||||
|
<string name="module_changelog_failed">Fetch changelog failed: %s</string>
|
||||||
|
<string name="settings_check_update">Check update</string>
|
||||||
|
<string name="settings_check_update_summary">Automatically check for updates when opening the app</string>
|
||||||
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
|
<string name="select_file">Select a image that needs to be patched</string>
|
||||||
|
<string name="install_inactive_slot">Install to inactive slot (After OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
|
||||||
|
<string name="install_next">Next</string>
|
||||||
|
<string name="select_file_tip">%1$s partition image is recommended</string>
|
||||||
|
<string name="select_kmi">Select KMI</string>
|
||||||
|
<string name="settings_uninstall">Uninstall</string>
|
||||||
|
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
||||||
|
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
||||||
|
<string name="settings_restore_stock_image">Restore stock image</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
||||||
|
<string name="flashing">Flashing</string>
|
||||||
|
<string name="flash_success">Flash success</string>
|
||||||
|
<string name="flash_failed">Flash failed</string>
|
||||||
|
<string name="selected_lkm">Selected LKM: %s</string>
|
||||||
<string name="save_log">Girişləri Saxla</string>
|
<string name="save_log">Girişləri Saxla</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,5 +1,66 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="home">Početna</string>
|
||||||
|
<string name="home_not_installed">Nije instalirano</string>
|
||||||
|
<string name="home_click_to_install">Kliknite da instalirate</string>
|
||||||
|
<string name="home_working">Radi</string>
|
||||||
|
<string name="home_working_version">Verzija: %d</string>
|
||||||
|
<string name="home_superuser_count">Superkorisnici: %d</string>
|
||||||
|
<string name="home_module_count">Module: %d</string>
|
||||||
|
<string name="home_unsupported">Nepodržano</string>
|
||||||
|
<string name="home_unsupported_reason">KernelSU samo podržava GKI kernele sad</string>
|
||||||
|
<string name="home_kernel">Kernel</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
|
<string name="home_manager_version">Verzija Upravitelja</string>
|
||||||
|
<string name="home_fingerprint">Otisak prsta</string>
|
||||||
|
<string name="home_selinux_status">SELinux stanje</string>
|
||||||
|
<string name="selinux_status_disabled">Isključeno</string>
|
||||||
|
<string name="selinux_status_enforcing">U Provođenju</string>
|
||||||
|
<string name="selinux_status_permissive">Permisivno</string>
|
||||||
|
<string name="selinux_status_unknown">Nepoznato</string>
|
||||||
|
<string name="superuser">Superkorisnik</string>
|
||||||
|
<string name="module_failed_to_enable">Neuspješno uključivanje module: %s</string>
|
||||||
|
<string name="module_failed_to_disable">Neuspješno isključivanje module: %s</string>
|
||||||
|
<string name="module_empty">Nema instaliranih modula</string>
|
||||||
|
<string name="module">Modula</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
|
<string name="uninstall">Deinstalirajte</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
|
<string name="module_install">Instalirajte</string>
|
||||||
|
<string name="install">Instalirajte</string>
|
||||||
|
<string name="reboot">Ponovo pokrenite</string>
|
||||||
|
<string name="settings">Podešavanja</string>
|
||||||
|
<string name="reboot_userspace">Lagano Ponovo pokretanje</string>
|
||||||
|
<string name="reboot_recovery">Ponovo pokrenite u Oporavu</string>
|
||||||
|
<string name="reboot_bootloader">Ponovo pokrenite u Pogonski Učitavatelj</string>
|
||||||
|
<string name="reboot_download">Ponovo pokrenite u Preuzimanje</string>
|
||||||
|
<string name="reboot_edl">Ponovo pokrenite u EDL</string>
|
||||||
|
<string name="about">O</string>
|
||||||
|
<string name="module_uninstall_confirm">Jeste li sigurni da želite deinstalirati modulu %s\?</string>
|
||||||
|
<string name="module_uninstall_success">%s deinstalirana</string>
|
||||||
|
<string name="module_uninstall_failed">Neuspješna deinstalacija: %s</string>
|
||||||
|
<string name="module_version">Verzija</string>
|
||||||
|
<string name="module_author">Autor</string>
|
||||||
|
<string name="refresh">Osvježi</string>
|
||||||
|
<string name="show_system_apps">Prikažite sistemske aplikacije</string>
|
||||||
|
<string name="hide_system_apps">Sakrijte sistemske aplikacije</string>
|
||||||
|
<string name="send_log">Pošaljite Izvještaj</string>
|
||||||
|
<string name="safe_mode">Sigurnosni mod</string>
|
||||||
|
<string name="reboot_to_apply">Ponovo pokrenite da bi proradilo</string>
|
||||||
|
<string name="module_magisk_conflict">Module su isključene jer je u sukobu sa Magisk-om!</string>
|
||||||
|
<string name="home_learn_kernelsu">Naučite KernelSU</string>
|
||||||
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
|
<string name="home_click_to_learn_kernelsu">Naučite kako da instalirate KernelSU i da koristite module</string>
|
||||||
|
<string name="home_support_title">Podržite Nas</string>
|
||||||
|
<string name="home_support_content">KernelSU je, i uvijek če biti, besplatan, i otvorenog izvora. Možete nam međutim pokazati da vas je briga s time da napravite donaciju.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
|
<string name="profile_default">Zadano</string>
|
||||||
|
<string name="profile_template">Šablon</string>
|
||||||
|
<string name="profile_custom">Prilagođeno</string>
|
||||||
|
<string name="profile_name">Naziv profila</string>
|
||||||
<string name="profile_namespace">Imenski prostor nosača</string>
|
<string name="profile_namespace">Imenski prostor nosača</string>
|
||||||
<string name="profile_namespace_inherited">Naslijeđen</string>
|
<string name="profile_namespace_inherited">Naslijeđen</string>
|
||||||
<string name="profile_namespace_global">Globalan</string>
|
<string name="profile_namespace_global">Globalan</string>
|
||||||
@@ -9,9 +70,13 @@
|
|||||||
<string name="profile_selinux_context">SELinux kontekst</string>
|
<string name="profile_selinux_context">SELinux kontekst</string>
|
||||||
<string name="profile_umount_modules">Umount module</string>
|
<string name="profile_umount_modules">Umount module</string>
|
||||||
<string name="failed_to_update_app_profile">Ažuriranje Profila Aplikacije za %s nije uspjelo</string>
|
<string name="failed_to_update_app_profile">Ažuriranje Profila Aplikacije za %s nije uspjelo</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
<string name="settings_umount_modules_default">Umount module po zadanom</string>
|
<string name="settings_umount_modules_default">Umount module po zadanom</string>
|
||||||
<string name="settings_umount_modules_default_summary">Globalna zadana vrijednost za \"Umount module\" u Profilima Aplikacije. Ako je omogućeno, uklonit će sve izmjene modula na sistemu za aplikacije koje nemaju postavljen Profil.</string>
|
<string name="settings_umount_modules_default_summary">Globalna zadana vrijednost za \"Umount module\" u Profilima Aplikacije. Ako je omogućeno, uklonit će sve izmjene modula na sistemu za aplikacije koje nemaju postavljen Profil.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
<string name="profile_umount_modules_summary">Uključivanjem ove opcije omogućit će KernelSU-u da vrati sve izmjenute datoteke od strane modula za ovu aplikaciju.</string>
|
<string name="profile_umount_modules_summary">Uključivanjem ove opcije omogućit će KernelSU-u da vrati sve izmjenute datoteke od strane modula za ovu aplikaciju.</string>
|
||||||
|
<string name="profile_selinux_domain">Domena</string>
|
||||||
|
<string name="profile_selinux_rules">Pravila</string>
|
||||||
<string name="module_update">Ažuriranje</string>
|
<string name="module_update">Ažuriranje</string>
|
||||||
<string name="module_downloading">Skidanje module: %s</string>
|
<string name="module_downloading">Skidanje module: %s</string>
|
||||||
<string name="module_start_downloading">Započnite sa skidanjem: %s</string>
|
<string name="module_start_downloading">Započnite sa skidanjem: %s</string>
|
||||||
@@ -19,62 +84,288 @@
|
|||||||
<string name="launch_app">Pokrenite</string>
|
<string name="launch_app">Pokrenite</string>
|
||||||
<string name="force_stop_app" formatted="false">Prisilno Zaustavite</string>
|
<string name="force_stop_app" formatted="false">Prisilno Zaustavite</string>
|
||||||
<string name="restart_app">Resetujte</string>
|
<string name="restart_app">Resetujte</string>
|
||||||
<string name="selinux_status_enforcing">U Provođenju</string>
|
|
||||||
<string name="home">Početna</string>
|
|
||||||
<string name="home_not_installed">Nije instalirano</string>
|
|
||||||
<string name="home_click_to_install">Kliknite da instalirate</string>
|
|
||||||
<string name="home_superuser_count">Superkorisnici: %d</string>
|
|
||||||
<string name="home_module_count">Module: %d</string>
|
|
||||||
<string name="home_unsupported">Nepodržano</string>
|
|
||||||
<string name="home_unsupported_reason">KernelSU samo podržava GKI kernele sad</string>
|
|
||||||
<string name="home_manager_version">Verzija Upravitelja</string>
|
|
||||||
<string name="home_fingerprint">Otisak prsta</string>
|
|
||||||
<string name="home_selinux_status">SELinux stanje</string>
|
|
||||||
<string name="module_install">Instalirajte</string>
|
|
||||||
<string name="install">Instalirajte</string>
|
|
||||||
<string name="reboot">Ponovo pokrenite</string>
|
|
||||||
<string name="settings">Podešavanja</string>
|
|
||||||
<string name="module_version">Verzija</string>
|
|
||||||
<string name="module_author">Autor</string>
|
|
||||||
<string name="refresh">Osvježi</string>
|
|
||||||
<string name="show_system_apps">Prikažite sistemske aplikacije</string>
|
|
||||||
<string name="hide_system_apps">Sakrijte sistemske aplikacije</string>
|
|
||||||
<string name="safe_mode">Sigurnosni mod</string>
|
|
||||||
<string name="reboot_to_apply">Ponovo pokrenite da bi proradilo</string>
|
|
||||||
<string name="module_magisk_conflict">Module su isključene jer je u sukobu sa Magisk-om!</string>
|
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
|
||||||
<string name="home_click_to_learn_kernelsu">Naučite kako da instalirate KernelSU i da koristite module</string>
|
|
||||||
<string name="home_support_title">Podržite Nas</string>
|
|
||||||
<string name="send_log">Pošaljite Izvještaj</string>
|
|
||||||
<string name="home_learn_kernelsu">Naučite KernelSU</string>
|
|
||||||
<string name="profile_selinux_domain">Domena</string>
|
|
||||||
<string name="profile_selinux_rules">Pravila</string>
|
|
||||||
<string name="failed_to_update_sepolicy">Neuspješno ažuriranje SELinux pravila za: %s</string>
|
<string name="failed_to_update_sepolicy">Neuspješno ažuriranje SELinux pravila za: %s</string>
|
||||||
<string name="home_working">Radi</string>
|
<string name="module_changelog">Changelog</string>
|
||||||
<string name="home_working_version">Verzija: %d</string>
|
<string name="settings_profile_template">App Profile Template</string>
|
||||||
<string name="home_kernel">Kernel</string>
|
<string name="settings_profile_template_summary">Manage local and online template of App Profile</string>
|
||||||
<string name="selinux_status_permissive">Permisivno</string>
|
<string name="app_profile_template_create">Create template</string>
|
||||||
<string name="uninstall">Deinstalirajte</string>
|
<string name="app_profile_template_edit">Edit template</string>
|
||||||
<string name="selinux_status_unknown">Nepoznato</string>
|
<string name="app_profile_template_id">ID</string>
|
||||||
<string name="module_empty">Nema instaliranih modula</string>
|
<string name="app_profile_template_id_invalid">Invalid template ID</string>
|
||||||
<string name="superuser">Superkorisnik</string>
|
<string name="app_profile_template_name">Name</string>
|
||||||
<string name="module">Modula</string>
|
<string name="app_profile_template_description">Description</string>
|
||||||
<string name="reboot_bootloader">Ponovo pokrenite u Pogonski Učitavatelj</string>
|
<string name="app_profile_template_save">Save</string>
|
||||||
<string name="reboot_recovery">Ponovo pokrenite u Oporavu</string>
|
<string name="app_profile_template_delete">Delete</string>
|
||||||
<string name="module_uninstall_success">%s deinstalirana</string>
|
<string name="app_profile_template_view">View template</string>
|
||||||
<string name="reboot_userspace">Lagano Ponovo pokretanje</string>
|
<string name="app_profile_template_readonly">Read only</string>
|
||||||
<string name="module_failed_to_enable">Neuspješno uključivanje module: %s</string>
|
<string name="app_profile_template_id_exist">Template ID already exists!</string>
|
||||||
<string name="reboot_download">Ponovo pokrenite u Preuzimanje</string>
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
<string name="module_failed_to_disable">Neuspješno isključivanje module: %s</string>
|
<string name="app_profile_import_from_clipboard">Import from clipboard</string>
|
||||||
<string name="reboot_edl">Ponovo pokrenite u EDL</string>
|
<string name="app_profile_export_to_clipboard">Export to clipboard</string>
|
||||||
<string name="module_uninstall_failed">Neuspješna deinstalacija: %s</string>
|
<string name="app_profile_template_export_empty">Cannot find local template to export!</string>
|
||||||
<string name="selinux_status_disabled">Isključeno</string>
|
<string name="app_profile_template_import_success">Imported successfully</string>
|
||||||
<string name="about">O</string>
|
<string name="app_profile_template_sync">Sync online templates</string>
|
||||||
<string name="module_uninstall_confirm">Jeste li sigurni da želite deinstalirati modulu %s\?</string>
|
<string name="app_profile_template_save_failed">Failed to save template</string>
|
||||||
<string name="home_support_content">KernelSU je, i uvijek če biti, besplatan, i otvorenog izvora. Možete nam međutim pokazati da vas je briga s time da napravite donaciju.</string>
|
<string name="app_profile_template_import_empty">Clipboard is empty!</string>
|
||||||
<string name="profile_default">Zadano</string>
|
<string name="module_changelog_failed">Fetch changelog failed: %s</string>
|
||||||
<string name="profile_template">Šablon</string>
|
<string name="settings_check_update">Check update</string>
|
||||||
<string name="profile_custom">Prilagođeno</string>
|
<string name="settings_check_update_summary">Automatically check for updates when opening the app</string>
|
||||||
<string name="profile_name">Naziv profila</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
|
<string name="select_file">Select a image that needs to be patched</string>
|
||||||
|
<string name="install_inactive_slot">Install to inactive slot (After OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
|
||||||
|
<string name="install_next">Next</string>
|
||||||
|
<string name="select_file_tip">%1$s partition image is recommended</string>
|
||||||
|
<string name="select_kmi">Select KMI</string>
|
||||||
|
<string name="settings_uninstall">Uninstall</string>
|
||||||
|
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
||||||
|
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
||||||
|
<string name="settings_restore_stock_image">Restore stock image</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
||||||
|
<string name="flashing">Flashing</string>
|
||||||
|
<string name="flash_success">Flash success</string>
|
||||||
|
<string name="flash_failed">Flash failed</string>
|
||||||
|
<string name="selected_lkm">Selected LKM: %s</string>
|
||||||
<string name="save_log">Sačuvaj Dnevnike</string>
|
<string name="save_log">Sačuvaj Dnevnike</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,80 +1,371 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="home">Hjem</string>
|
||||||
|
<string name="home_not_installed">Ikke installeret</string>
|
||||||
|
<string name="home_click_to_install">Klik for at installere</string>
|
||||||
<string name="home_working">Arbejder</string>
|
<string name="home_working">Arbejder</string>
|
||||||
|
<string name="home_working_version">Version: %d</string>
|
||||||
|
<string name="home_superuser_count">Superbrugere: %d</string>
|
||||||
<string name="home_module_count">Moduler: %d</string>
|
<string name="home_module_count">Moduler: %d</string>
|
||||||
<string name="home_unsupported">Ikke understøttet</string>
|
<string name="home_unsupported">Ikke understøttet</string>
|
||||||
<string name="home_kernel">Kernel</string>
|
|
||||||
<string name="home_unsupported_reason">KernelSU understøtter kun GKI kernels</string>
|
<string name="home_unsupported_reason">KernelSU understøtter kun GKI kernels</string>
|
||||||
|
<string name="home_kernel">Kernel</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Manager Version</string>
|
<string name="home_manager_version">Manager Version</string>
|
||||||
|
<string name="home_fingerprint">Fingeraftryk</string>
|
||||||
<string name="home_selinux_status">SELinux-status</string>
|
<string name="home_selinux_status">SELinux-status</string>
|
||||||
<string name="selinux_status_disabled">Deaktiveret</string>
|
<string name="selinux_status_disabled">Deaktiveret</string>
|
||||||
<string name="selinux_status_permissive">Tilladende</string>
|
|
||||||
<string name="superuser">Superbruger</string>
|
|
||||||
<string name="selinux_status_enforcing">Håndhævende</string>
|
<string name="selinux_status_enforcing">Håndhævende</string>
|
||||||
|
<string name="selinux_status_permissive">Tilladende</string>
|
||||||
|
<string name="selinux_status_unknown">Ukendt</string>
|
||||||
|
<string name="superuser">Superbruger</string>
|
||||||
|
<string name="module_failed_to_enable">Aktivering af modul fejlede: %s</string>
|
||||||
<string name="module_failed_to_disable">Deaktivering af modul fejlede: %s</string>
|
<string name="module_failed_to_disable">Deaktivering af modul fejlede: %s</string>
|
||||||
<string name="module_empty">Intet modul installeret</string>
|
<string name="module_empty">Intet modul installeret</string>
|
||||||
|
<string name="module">Modul</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
<string name="uninstall">Afinstaller</string>
|
<string name="uninstall">Afinstaller</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
<string name="module_install">Installer</string>
|
<string name="module_install">Installer</string>
|
||||||
<string name="install">Installer</string>
|
<string name="install">Installer</string>
|
||||||
<string name="reboot">Genstart</string>
|
<string name="reboot">Genstart</string>
|
||||||
<string name="settings">Indstillinger</string>
|
<string name="settings">Indstillinger</string>
|
||||||
<string name="reboot_userspace">Blød Genstart</string>
|
<string name="reboot_userspace">Blød Genstart</string>
|
||||||
|
<string name="reboot_recovery">Genstart til Recovery</string>
|
||||||
|
<string name="reboot_bootloader">Genstart til Bootloader</string>
|
||||||
<string name="reboot_download">Genstart til Download</string>
|
<string name="reboot_download">Genstart til Download</string>
|
||||||
<string name="reboot_edl">Genstart til EDL</string>
|
<string name="reboot_edl">Genstart til EDL</string>
|
||||||
<string name="about">Om</string>
|
<string name="about">Om</string>
|
||||||
<string name="module_uninstall_confirm">Er du sikker på, at du vil afinstallere modulet %s\?</string>
|
<string name="module_uninstall_confirm">Er du sikker på, at du vil afinstallere modulet %s\?</string>
|
||||||
<string name="module_uninstall_success">%s afinstalleret</string>
|
<string name="module_uninstall_success">%s afinstalleret</string>
|
||||||
<string name="module_uninstall_failed">Afinstallation af: %s fejlede</string>
|
<string name="module_uninstall_failed">Afinstallation af: %s fejlede</string>
|
||||||
|
<string name="module_version">Version</string>
|
||||||
|
<string name="module_author">Forfatter</string>
|
||||||
<string name="refresh">Opdater</string>
|
<string name="refresh">Opdater</string>
|
||||||
|
<string name="show_system_apps">Vis system-apps</string>
|
||||||
|
<string name="hide_system_apps">Gem system-apps</string>
|
||||||
<string name="send_log">Send Log</string>
|
<string name="send_log">Send Log</string>
|
||||||
<string name="safe_mode">Sikker tilstand</string>
|
<string name="safe_mode">Sikker tilstand</string>
|
||||||
<string name="reboot_to_apply">Genstart for at tage effekt</string>
|
<string name="reboot_to_apply">Genstart for at tage effekt</string>
|
||||||
|
<string name="module_magisk_conflict">Moduler er deaktiveret, fordi der er konflikt med Magiskes!</string>
|
||||||
<string name="home_learn_kernelsu">Lær KernelSU</string>
|
<string name="home_learn_kernelsu">Lær KernelSU</string>
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
<string name="home_click_to_learn_kernelsu">Lær hvordan man installerer KernelSU og moduler</string>
|
<string name="home_click_to_learn_kernelsu">Lær hvordan man installerer KernelSU og moduler</string>
|
||||||
|
<string name="home_support_title">Støt Os</string>
|
||||||
|
<string name="home_support_content">KernelSU er, og vil altid være gratis og open source. Du kan stadig vise os din støtte ved at donere.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
<string name="profile_default">Standard</string>
|
<string name="profile_default">Standard</string>
|
||||||
<string name="profile_template">Skabelon</string>
|
<string name="profile_template">Skabelon</string>
|
||||||
|
<string name="profile_custom">Brugerdefineret</string>
|
||||||
|
<string name="profile_name">Profilnavn</string>
|
||||||
<string name="profile_namespace">Monter navnerum</string>
|
<string name="profile_namespace">Monter navnerum</string>
|
||||||
<string name="profile_namespace_inherited">Arvet</string>
|
<string name="profile_namespace_inherited">Arvet</string>
|
||||||
<string name="profile_namespace_global">Global</string>
|
<string name="profile_namespace_global">Global</string>
|
||||||
|
<string name="profile_namespace_individual">Individuel</string>
|
||||||
<string name="profile_groups">Grupper</string>
|
<string name="profile_groups">Grupper</string>
|
||||||
<string name="profile_capabilities">Evner</string>
|
<string name="profile_capabilities">Evner</string>
|
||||||
<string name="profile_selinux_context">SELinux-kontext</string>
|
<string name="profile_selinux_context">SELinux-kontext</string>
|
||||||
<string name="profile_umount_modules">Afmonteret moduler</string>
|
<string name="profile_umount_modules">Afmonteret moduler</string>
|
||||||
|
<string name="failed_to_update_app_profile">Opdatering af App Profil for %s fejlede</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
<string name="settings_umount_modules_default">Afmontere moduler som standard</string>
|
<string name="settings_umount_modules_default">Afmontere moduler som standard</string>
|
||||||
|
<string name="settings_umount_modules_default_summary">Den globale standard værdi for \"Afmonter moduler\" i App Profiler. Hvis aktiveret vil den fjerne alle modulers modifikationer til system applikationerne der ikke har en sat Profil.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
<string name="profile_umount_modules_summary">Aktivering af denne indstilling vil tillade KernelSU at gendanne hvilken som helst modificeret filer af modulet for denne applikation.</string>
|
<string name="profile_umount_modules_summary">Aktivering af denne indstilling vil tillade KernelSU at gendanne hvilken som helst modificeret filer af modulet for denne applikation.</string>
|
||||||
|
<string name="profile_selinux_domain">Domæne</string>
|
||||||
|
<string name="profile_selinux_rules">Regler</string>
|
||||||
<string name="module_update">Opdatering</string>
|
<string name="module_update">Opdatering</string>
|
||||||
<string name="module_downloading">Downloader modulet: %s</string>
|
<string name="module_downloading">Downloader modulet: %s</string>
|
||||||
|
<string name="module_start_downloading">Start download: %s</string>
|
||||||
<string name="new_version_available">Ny version: %s er tilgængelig, kilk for at downloade</string>
|
<string name="new_version_available">Ny version: %s er tilgængelig, kilk for at downloade</string>
|
||||||
<string name="launch_app">Start</string>
|
<string name="launch_app">Start</string>
|
||||||
<string name="force_stop_app">Tving Stop</string>
|
<string name="force_stop_app" formatted="false">Tving Stop</string>
|
||||||
<string name="failed_to_update_sepolicy">Opdatering af SELinux-regler for: %s fejlede</string>
|
|
||||||
<string name="module_start_downloading">Start download: %s</string>
|
|
||||||
<string name="home_click_to_install">Klik for at installere</string>
|
|
||||||
<string name="home_working_version">Version: %d</string>
|
|
||||||
<string name="home">Hjem</string>
|
|
||||||
<string name="home_not_installed">Ikke installeret</string>
|
|
||||||
<string name="home_superuser_count">Superbrugere: %d</string>
|
|
||||||
<string name="home_fingerprint">Fingeraftryk</string>
|
|
||||||
<string name="selinux_status_unknown">Ukendt</string>
|
|
||||||
<string name="module_failed_to_enable">Aktivering af modul fejlede: %s</string>
|
|
||||||
<string name="reboot_recovery">Genstart til Recovery</string>
|
|
||||||
<string name="module">Modul</string>
|
|
||||||
<string name="module_author">Forfatter</string>
|
|
||||||
<string name="reboot_bootloader">Genstart til Bootloader</string>
|
|
||||||
<string name="module_version">Version</string>
|
|
||||||
<string name="hide_system_apps">Gem system-apps</string>
|
|
||||||
<string name="show_system_apps">Vis system-apps</string>
|
|
||||||
<string name="module_magisk_conflict">Moduler er deaktiveret, fordi der er konflikt med Magiskes!</string>
|
|
||||||
<string name="home_support_title">Støt Os</string>
|
|
||||||
<string name="home_support_content">KernelSU er, og vil altid være gratis og open source. Du kan stadig vise os din støtte ved at donere.</string>
|
|
||||||
<string name="profile_custom">Brugerdefineret</string>
|
|
||||||
<string name="profile_name">Profilnavn</string>
|
|
||||||
<string name="profile_namespace_individual">Individuel</string>
|
|
||||||
<string name="failed_to_update_app_profile">Opdatering af App Profil for %s fejlede</string>
|
|
||||||
<string name="settings_umount_modules_default_summary">Den globale standard værdi for \"Afmonter moduler\" i App Profiler. Hvis aktiveret vil den fjerne alle modulers modifikationer til system applikationerne der ikke har en sat Profil.</string>
|
|
||||||
<string name="profile_selinux_domain">Domæne</string>
|
|
||||||
<string name="profile_selinux_rules" formatted="false">Regler</string>
|
|
||||||
<string name="restart_app">Genstart</string>
|
<string name="restart_app">Genstart</string>
|
||||||
|
<string name="failed_to_update_sepolicy">Opdatering af SELinux-regler for: %s fejlede</string>
|
||||||
|
<string name="module_changelog">Changelog</string>
|
||||||
|
<string name="settings_profile_template">App Profile Template</string>
|
||||||
|
<string name="settings_profile_template_summary">Manage local and online template of App Profile</string>
|
||||||
|
<string name="app_profile_template_create">Create template</string>
|
||||||
|
<string name="app_profile_template_edit">Edit template</string>
|
||||||
|
<string name="app_profile_template_id">ID</string>
|
||||||
|
<string name="app_profile_template_id_invalid">Invalid template ID</string>
|
||||||
|
<string name="app_profile_template_name">Name</string>
|
||||||
|
<string name="app_profile_template_description">Description</string>
|
||||||
|
<string name="app_profile_template_save">Save</string>
|
||||||
|
<string name="app_profile_template_delete">Delete</string>
|
||||||
|
<string name="app_profile_template_view">View template</string>
|
||||||
|
<string name="app_profile_template_readonly">Read only</string>
|
||||||
|
<string name="app_profile_template_id_exist">Template ID already exists!</string>
|
||||||
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Import from clipboard</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Export to clipboard</string>
|
||||||
|
<string name="app_profile_template_export_empty">Cannot find local template to export!</string>
|
||||||
|
<string name="app_profile_template_import_success">Imported successfully</string>
|
||||||
|
<string name="app_profile_template_sync">Sync online templates</string>
|
||||||
|
<string name="app_profile_template_save_failed">Failed to save template</string>
|
||||||
|
<string name="app_profile_template_import_empty">Clipboard is empty!</string>
|
||||||
|
<string name="module_changelog_failed">Fetch changelog failed: %s</string>
|
||||||
|
<string name="settings_check_update">Check update</string>
|
||||||
|
<string name="settings_check_update_summary">Automatically check for updates when opening the app</string>
|
||||||
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
|
<string name="select_file">Select a image that needs to be patched</string>
|
||||||
|
<string name="install_inactive_slot">Install to inactive slot (After OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
|
||||||
|
<string name="install_next">Next</string>
|
||||||
|
<string name="select_file_tip">%1$s partition image is recommended</string>
|
||||||
|
<string name="select_kmi">Select KMI</string>
|
||||||
|
<string name="settings_uninstall">Uninstall</string>
|
||||||
|
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
||||||
|
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
||||||
|
<string name="settings_restore_stock_image">Restore stock image</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
||||||
|
<string name="flashing">Flashing</string>
|
||||||
|
<string name="flash_success">Flash success</string>
|
||||||
|
<string name="flash_failed">Flash failed</string>
|
||||||
|
<string name="selected_lkm">Selected LKM: %s</string>
|
||||||
<string name="save_log">Gem Logfiler</string>
|
<string name="save_log">Gem Logfiler</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -2,130 +2,372 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<string name="home">Startseite</string>
|
<string name="home">Startseite</string>
|
||||||
<string name="home_not_installed">Nicht installiert</string>
|
<string name="home_not_installed">Nicht installiert</string>
|
||||||
<string name="selinux_status_permissive">Permissiv</string>
|
<string name="home_click_to_install">Tippe zum Installieren</string>
|
||||||
<string name="home_working">Funktioniert</string>
|
<string name="home_working">Funktioniert</string>
|
||||||
<string name="home_working_version">Version: %d</string>
|
<string name="home_working_version">Version: %d</string>
|
||||||
<string name="superuser">Superuser</string>
|
|
||||||
<string name="home_click_to_install">Tippe zum Installieren</string>
|
|
||||||
<string name="home_superuser_count">Superuser: %d</string>
|
<string name="home_superuser_count">Superuser: %d</string>
|
||||||
<string name="selinux_status_unknown">Unbekannt</string>
|
|
||||||
<string name="selinux_status_enforcing">Erzwingen</string>
|
|
||||||
<string name="reboot_bootloader">In den Bootloader-Modus neustarten</string>
|
|
||||||
<string name="reboot_download">In den Download-Modus neustarten</string>
|
|
||||||
<string name="reboot_edl">In den EDL-Modus neustarten</string>
|
|
||||||
<string name="module_author">Autor</string>
|
|
||||||
<string name="about">Über KernelSU</string>
|
|
||||||
<string name="module_magisk_conflict">Module sind aufgrund eines Konfliktes mit Magisk nicht verfügbar!</string>
|
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
|
||||||
<string name="home_click_to_learn_kernelsu">Erfahre, wie KernelSU installiert wird und wie Module verwendet werden</string>
|
|
||||||
<string name="home_support_title">Unterstütze uns</string>
|
|
||||||
<string name="home_support_content">KernelSU ist und wird immer frei und quelloffen sein. Du kannst uns jedoch deine Unterstützung zeigen, indem du eine Spende tätigst.</string>
|
|
||||||
<string name="profile_selinux_context">SELinux-Kontext</string>
|
|
||||||
<string name="settings_umount_modules_default">Module standardmäßig aushängen</string>
|
|
||||||
<string name="settings_umount_modules_default_summary">Globaler Standardwert für \"Module aushängen\" im App-Profil. Falls er aktiviert ist, werden alle Moduländerungen im System für alle Apps entfernt, für die kein Profil festgelegt ist.</string>
|
|
||||||
<string name="profile_default">Standard</string>
|
|
||||||
<string name="profile_template">Vorlage</string>
|
|
||||||
<string name="profile_custom">Benutzerdefiniert</string>
|
|
||||||
<string name="failed_to_update_app_profile">App-Profilaktualisierung für %s fehlgeschlagen</string>
|
|
||||||
<string name="profile_namespace_inherited">Geerbt</string>
|
|
||||||
<string name="profile_namespace_global">Global</string>
|
|
||||||
<string name="profile_namespace_individual">Individuell</string>
|
|
||||||
<string name="profile_selinux_domain">Domäne</string>
|
|
||||||
<string name="module_update">Aktualisieren</string>
|
|
||||||
<string name="profile_umount_modules_summary">Wenn du diese Option aktivierst, kann KernelSU alle von den Modulen für diese App geänderten Dateien wiederherstellen.</string>
|
|
||||||
<string name="profile_selinux_rules">Regeln</string>
|
|
||||||
<string name="module_start_downloading">Starte Download: %s</string>
|
|
||||||
<string name="failed_to_update_sepolicy">Aktualisieren der SELinux-Regeln schlug fehl für: %s</string>
|
|
||||||
<string name="launch_app">Starten</string>
|
|
||||||
<string name="new_version_available">Neue Version %s verfügbar, tippen zum Aktualisieren.</string>
|
|
||||||
<string name="force_stop_app" formatted="false">Stopp erzwingen</string>
|
|
||||||
<string name="restart_app">Neustarten</string>
|
|
||||||
<string name="home_module_count">Module: %d</string>
|
<string name="home_module_count">Module: %d</string>
|
||||||
|
<string name="home_unsupported">Nicht unterstützt</string>
|
||||||
|
<string name="home_unsupported_reason">KernelSU unterstützt derzeit nur GKI-Kernel</string>
|
||||||
|
<string name="home_kernel">Kernel</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Manager-Version</string>
|
<string name="home_manager_version">Manager-Version</string>
|
||||||
|
<string name="home_fingerprint">Fingerabdruck</string>
|
||||||
<string name="home_selinux_status">SELinux Status</string>
|
<string name="home_selinux_status">SELinux Status</string>
|
||||||
<string name="selinux_status_disabled">Deaktiviert</string>
|
<string name="selinux_status_disabled">Deaktiviert</string>
|
||||||
|
<string name="selinux_status_enforcing">Erzwingen</string>
|
||||||
|
<string name="selinux_status_permissive">Permissiv</string>
|
||||||
|
<string name="selinux_status_unknown">Unbekannt</string>
|
||||||
|
<string name="superuser">Superuser</string>
|
||||||
<string name="module_failed_to_enable">Modulaktivierung fehlgeschlagen: %s</string>
|
<string name="module_failed_to_enable">Modulaktivierung fehlgeschlagen: %s</string>
|
||||||
<string name="module_failed_to_disable">Moduldeaktivierung fehlgeschlagen: %s</string>
|
<string name="module_failed_to_disable">Moduldeaktivierung fehlgeschlagen: %s</string>
|
||||||
<string name="module_empty">Keine Modul installiert</string>
|
<string name="module_empty">Keine Modul installiert</string>
|
||||||
<string name="module">Modul</string>
|
<string name="module">Modul</string>
|
||||||
|
<string name="module_sort_action_first">Sortiere zuerst (Aktion)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sortieren (zuerst aktiviert)</string>
|
||||||
<string name="uninstall">Deinstallieren</string>
|
<string name="uninstall">Deinstallieren</string>
|
||||||
|
<string name="restore">Wiederherstellen</string>
|
||||||
|
<string name="module_install">Installieren</string>
|
||||||
<string name="install">Installieren</string>
|
<string name="install">Installieren</string>
|
||||||
<string name="reboot">Neustarten</string>
|
<string name="reboot">Neustarten</string>
|
||||||
<string name="settings">Einstellungen</string>
|
<string name="settings">Einstellungen</string>
|
||||||
|
<string name="reboot_userspace">Soft-Reboot</string>
|
||||||
<string name="reboot_recovery">In den Recovery-Modus neustarten</string>
|
<string name="reboot_recovery">In den Recovery-Modus neustarten</string>
|
||||||
|
<string name="reboot_bootloader">In den Bootloader-Modus neustarten</string>
|
||||||
|
<string name="reboot_download">In den Download-Modus neustarten</string>
|
||||||
|
<string name="reboot_edl">In den EDL-Modus neustarten</string>
|
||||||
|
<string name="about">Über KernelSU</string>
|
||||||
|
<string name="module_uninstall_confirm">Möchtest du wirklich Modul %s deinstallieren?</string>
|
||||||
<string name="module_uninstall_success">%s deinstalliert</string>
|
<string name="module_uninstall_success">%s deinstalliert</string>
|
||||||
|
<string name="module_uninstall_failed">Deinstallation fehlgeschlagen: %s</string>
|
||||||
<string name="module_version">Version</string>
|
<string name="module_version">Version</string>
|
||||||
|
<string name="module_author">Autor</string>
|
||||||
<string name="refresh">Aktualisieren</string>
|
<string name="refresh">Aktualisieren</string>
|
||||||
<string name="show_system_apps">System-Apps anzeigen</string>
|
<string name="show_system_apps">System-Apps anzeigen</string>
|
||||||
<string name="hide_system_apps">System-Apps ausblenden</string>
|
<string name="hide_system_apps">System-Apps ausblenden</string>
|
||||||
<string name="send_log">Protokoll senden</string>
|
<string name="send_log">Protokoll senden</string>
|
||||||
<string name="home_learn_kernelsu">KernelSU verstehen</string>
|
|
||||||
<string name="safe_mode">Sicherer Modus</string>
|
<string name="safe_mode">Sicherer Modus</string>
|
||||||
<string name="reboot_to_apply">Neustarten, damit Änderungen wirksam werden</string>
|
<string name="reboot_to_apply">Neustarten, damit Änderungen wirksam werden</string>
|
||||||
|
<string name="module_magisk_conflict">Module sind aufgrund eines Konfliktes mit Magisk nicht verfügbar!</string>
|
||||||
|
<string name="home_learn_kernelsu">KernelSU verstehen</string>
|
||||||
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
|
<string name="home_click_to_learn_kernelsu">Erfahre, wie KernelSU installiert wird und wie Module verwendet werden</string>
|
||||||
|
<string name="home_support_title">Unterstütze uns</string>
|
||||||
|
<string name="home_support_content">KernelSU ist und wird immer frei und quelloffen sein. Du kannst uns jedoch deine Unterstützung zeigen, indem du eine Spende tätigst.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[Den Quellcode finden Sie unter %1$s<br/>Begleiten Sie uns %2$s-Kanal]]></string>
|
||||||
|
<string name="profile_default">Standard</string>
|
||||||
|
<string name="profile_template">Vorlage</string>
|
||||||
|
<string name="profile_custom">Benutzerdefiniert</string>
|
||||||
<string name="profile_name">Profilname</string>
|
<string name="profile_name">Profilname</string>
|
||||||
<string name="profile_namespace">Namespace einhängen</string>
|
<string name="profile_namespace">Namespace einhängen</string>
|
||||||
|
<string name="profile_namespace_inherited">Geerbt</string>
|
||||||
|
<string name="profile_namespace_global">Global</string>
|
||||||
|
<string name="profile_namespace_individual">Individuell</string>
|
||||||
<string name="profile_groups">Gruppen</string>
|
<string name="profile_groups">Gruppen</string>
|
||||||
<string name="profile_capabilities">Fähigkeiten</string>
|
<string name="profile_capabilities">Fähigkeiten</string>
|
||||||
|
<string name="profile_selinux_context">SELinux-Kontext</string>
|
||||||
<string name="profile_umount_modules">Module aushängen</string>
|
<string name="profile_umount_modules">Module aushängen</string>
|
||||||
|
<string name="failed_to_update_app_profile">App-Profilaktualisierung für %s fehlgeschlagen</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">Die aktuelle KernelSU-Version %d ist zu alt für diese Manager-Version. Bitte auf Version %d oder höher aktualisieren!</string>
|
||||||
|
<string name="settings_umount_modules_default">Module standardmäßig aushängen</string>
|
||||||
|
<string name="settings_umount_modules_default_summary">Globaler Standardwert für \"Module aushängen\" im App-Profil. Falls er aktiviert ist, werden alle Moduländerungen im System für alle Apps entfernt, für die kein Profil festgelegt ist.</string>
|
||||||
|
<string name="settings_susfs_toggle">Kprobe-Hooks deaktivieren</string>
|
||||||
|
<string name="profile_umount_modules_summary">Wenn du diese Option aktivierst, kann KernelSU alle von den Modulen für diese App geänderten Dateien wiederherstellen.</string>
|
||||||
|
<string name="profile_selinux_domain">Domäne</string>
|
||||||
|
<string name="profile_selinux_rules">Regeln</string>
|
||||||
|
<string name="module_update">Aktualisieren</string>
|
||||||
<string name="module_downloading">Lädt Modul %s herunter</string>
|
<string name="module_downloading">Lädt Modul %s herunter</string>
|
||||||
<string name="home_unsupported">Nicht unterstützt</string>
|
<string name="module_start_downloading">Starte Download: %s</string>
|
||||||
<string name="home_unsupported_reason">KernelSU unterstützt derzeit nur GKI-Kernel</string>
|
<string name="new_version_available">Neue Version %s verfügbar, tippen zum Aktualisieren.</string>
|
||||||
<string name="home_kernel">Kernel</string>
|
<string name="launch_app">Starten</string>
|
||||||
<string name="home_fingerprint">Fingerabdruck</string>
|
<string name="force_stop_app" formatted="false">Stopp erzwingen</string>
|
||||||
<string name="module_install">Installieren</string>
|
<string name="restart_app">Neustarten</string>
|
||||||
<string name="reboot_userspace">Soft-Reboot</string>
|
<string name="failed_to_update_sepolicy">Aktualisieren der SELinux-Regeln schlug fehl für: %s</string>
|
||||||
<string name="module_uninstall_confirm">Möchtest du wirklich Modul %s deinstallieren?</string>
|
|
||||||
<string name="module_uninstall_failed">Deinstallation fehlgeschlagen: %s</string>
|
|
||||||
<string name="module_changelog">Änderungsprotokoll</string>
|
<string name="module_changelog">Änderungsprotokoll</string>
|
||||||
<string name="app_profile_template_import_success">Erfolgreich importiert</string>
|
<string name="settings_profile_template">App-Profil-Vorlage</string>
|
||||||
<string name="app_profile_export_to_clipboard">In Zwischenablage exportieren</string>
|
<string name="settings_profile_template_summary">Verwalte die lokale und online Vorlage des App-Profils</string>
|
||||||
<string name="app_profile_template_export_empty">Kann lokale Vorlage nicht finden!</string>
|
|
||||||
<string name="app_profile_template_id_exist">Vorlagen-ID existiert bereits!</string>
|
|
||||||
<string name="app_profile_import_from_clipboard">Aus Zwischenablage importieren</string>
|
|
||||||
<string name="module_changelog_failed">Konnte Veränderungs-Protokoll nicht laden: %s</string>
|
|
||||||
<string name="app_profile_template_name">Name</string>
|
|
||||||
<string name="app_profile_template_id_invalid">Ungültige Vorlagen-ID</string>
|
|
||||||
<string name="app_profile_template_sync">Online-Vorlagen synchronisieren</string>
|
|
||||||
<string name="app_profile_template_create">Vorlage erstellen</string>
|
<string name="app_profile_template_create">Vorlage erstellen</string>
|
||||||
<string name="app_profile_template_readonly">Schreibgeschützt</string>
|
|
||||||
<string name="app_profile_import_export">Import/Export</string>
|
|
||||||
<string name="app_profile_template_save_failed">Schlug beim Speichern der Vorlage fehl</string>
|
|
||||||
<string name="app_profile_template_edit">Vorlage bearbeiten</string>
|
<string name="app_profile_template_edit">Vorlage bearbeiten</string>
|
||||||
<string name="app_profile_template_id">ID</string>
|
<string name="app_profile_template_id">ID</string>
|
||||||
<string name="settings_profile_template">App-Profil-Vorlage</string>
|
<string name="app_profile_template_id_invalid">Ungültige Vorlagen-ID</string>
|
||||||
|
<string name="app_profile_template_name">Name</string>
|
||||||
<string name="app_profile_template_description">Beschreibung</string>
|
<string name="app_profile_template_description">Beschreibung</string>
|
||||||
<string name="app_profile_template_save">Speichern</string>
|
<string name="app_profile_template_save">Speichern</string>
|
||||||
<string name="settings_profile_template_summary">Verwalte die lokale und online Vorlage des App-Profils</string>
|
|
||||||
<string name="app_profile_template_delete">Löschen</string>
|
<string name="app_profile_template_delete">Löschen</string>
|
||||||
<string name="app_profile_template_import_empty">Zwischenablage ist leer!</string>
|
|
||||||
<string name="app_profile_template_view">Vorlage ansehen</string>
|
<string name="app_profile_template_view">Vorlage ansehen</string>
|
||||||
|
<string name="app_profile_template_readonly">Schreibgeschützt</string>
|
||||||
|
<string name="app_profile_template_id_exist">Vorlagen-ID existiert bereits!</string>
|
||||||
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Aus Zwischenablage importieren</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">In Zwischenablage exportieren</string>
|
||||||
|
<string name="app_profile_template_export_empty">Kann lokale Vorlage nicht finden!</string>
|
||||||
|
<string name="app_profile_template_import_success">Erfolgreich importiert</string>
|
||||||
|
<string name="app_profile_template_sync">Online-Vorlagen synchronisieren</string>
|
||||||
|
<string name="app_profile_template_save_failed">Schlug beim Speichern der Vorlage fehl</string>
|
||||||
|
<string name="app_profile_template_import_empty">Zwischenablage ist leer!</string>
|
||||||
|
<string name="module_changelog_failed">Konnte Veränderungs-Protokoll nicht laden: %s</string>
|
||||||
|
<string name="settings_check_update">Auf Aktualisierung prüfen</string>
|
||||||
|
<string name="settings_check_update_summary">Prüfe automatisch auf Aktualisierungen, wenn die App geöffnet wird</string>
|
||||||
|
<string name="grant_root_failed">Root-Zugriff konnte nicht gewährt werden!</string>
|
||||||
|
<string name="action">Aktion</string>
|
||||||
|
<string name="open">Öffnen</string>
|
||||||
|
<string name="close">Schließen</string>
|
||||||
<string name="enable_web_debugging">WebView-Debugging aktivieren</string>
|
<string name="enable_web_debugging">WebView-Debugging aktivieren</string>
|
||||||
<string name="enable_web_debugging_summary">Kann zum Fehlerbeheben der WebUI verwendet werden, bitte nur im Notfall aktivieren.</string>
|
<string name="enable_web_debugging_summary">Kann zum Fehlerbeheben der WebUI verwendet werden, bitte nur im Notfall aktivieren.</string>
|
||||||
<string name="select_file_tip">%1$s Partitionsabbild empfohlen</string>
|
|
||||||
<string name="select_kmi">KMI auswählen</string>
|
|
||||||
<string name="install_next">Weiter</string>
|
|
||||||
<string name="direct_install">Direkte Installation (empfohlen)</string>
|
<string name="direct_install">Direkte Installation (empfohlen)</string>
|
||||||
<string name="select_file">Datei auswählen</string>
|
<string name="select_file">Datei auswählen</string>
|
||||||
<string name="install_inactive_slot">In inaktiven Slot installieren (nach OTA)</string>
|
<string name="install_inactive_slot">In inaktiven Slot installieren (nach OTA)</string>
|
||||||
<string name="install_inactive_slot_warning">Nach einem Neustart wird dein Gerät **GEZWUNGEN** in den derzeit inaktiven Slot zu starten!
|
<string name="install_inactive_slot_warning">Nach einem Neustart wird dein Gerät **GEZWUNGEN** in den derzeit inaktiven Slot zu starten!
|
||||||
\nBenutze dies nur nach Fertigstellung des OTA.
|
\nBenutze dies nur nach Fertigstellung des OTA.
|
||||||
\nFortfahren?</string>
|
\nFortfahren?</string>
|
||||||
<string name="grant_root_failed">Root-Zugriff konnte nicht gewährt werden!</string>
|
<string name="install_next">Weiter</string>
|
||||||
<string name="open">Öffnen</string>
|
<string name="select_file_tip">%1$s Partitionsabbild empfohlen</string>
|
||||||
<string name="settings_check_update">Auf Aktualisierung prüfen</string>
|
<string name="select_kmi">KMI auswählen</string>
|
||||||
<string name="settings_check_update_summary">Prüfe automatisch auf Aktualisierungen, wenn die App geöffnet wird</string>
|
|
||||||
<string name="settings_uninstall_temporary">Temporär deinstallieren</string>
|
|
||||||
<string name="settings_uninstall">Deinstallieren</string>
|
<string name="settings_uninstall">Deinstallieren</string>
|
||||||
<string name="settings_uninstall_permanent_message">KernelSU (Root und alle Module) vollständig und dauerhaft deinstallieren.</string>
|
<string name="settings_uninstall_temporary">Temporär deinstallieren</string>
|
||||||
<string name="save_log">Protokolle Speichern</string>
|
|
||||||
<string name="settings_uninstall_permanent">Permanent deinstallieren</string>
|
<string name="settings_uninstall_permanent">Permanent deinstallieren</string>
|
||||||
<string name="settings_restore_stock_image">Standard-Abbild wiederherstellen</string>
|
<string name="settings_restore_stock_image">Standard-Abbild wiederherstellen</string>
|
||||||
<string name="settings_uninstall_temporary_message">KernelSU temporär deinstallieren, originalen Status nach dem nächsten Neustart wiederherstellen.</string>
|
<string name="settings_uninstall_temporary_message">KernelSU temporär deinstallieren, originalen Status nach dem nächsten Neustart wiederherstellen.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">KernelSU (Root und alle Module) vollständig und dauerhaft deinstallieren.</string>
|
||||||
<string name="settings_restore_stock_image_message">Das Standard Werksabbild wiederherstellen (falls ein Backup existiert), normalerweise vor einem OTA zu verwenden; falls Sie KernelSU deinstallieren müssen, nutzen Sie bitte \"Permanent deinstallieren\".</string>
|
<string name="settings_restore_stock_image_message">Das Standard Werksabbild wiederherstellen (falls ein Backup existiert), normalerweise vor einem OTA zu verwenden; falls Sie KernelSU deinstallieren müssen, nutzen Sie bitte \"Permanent deinstallieren\".</string>
|
||||||
<string name="flashing">Schreibt</string>
|
<string name="flashing">Schreibt</string>
|
||||||
<string name="flash_success">Schreiben erfolgreich</string>
|
<string name="flash_success">Schreiben erfolgreich</string>
|
||||||
<string name="flash_failed">Schreiben fehlgeschlagen</string>
|
<string name="flash_failed">Schreiben fehlgeschlagen</string>
|
||||||
<string name="selected_lkm">Wähle LKM: %s</string>
|
<string name="selected_lkm">Wähle LKM: %s</string>
|
||||||
<string name="action">Aktion</string>
|
<string name="save_log">Protokolle Speichern</string>
|
||||||
<string name="log_saved">Protokolle gespeichert</string>
|
<string name="log_saved">Protokolle gespeichert</string>
|
||||||
|
<string name="status_supported">Unterstützt:</string>
|
||||||
|
<string name="status_not_supported">Nicht unterstützt</string>
|
||||||
|
<string name="status_unknown">Unbekannt</string>
|
||||||
|
<string name="sus_su_mode">SuS SU-Modus:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">das Installationsmodul %1$s bestätigen ?</string>
|
||||||
|
<string name="unknown_module">unbekannter Modul</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Modul-Wiederherstellung bestätigen</string>
|
||||||
|
<string name="restore_confirm_message">Diese Operation wird alle vorhandenen Module überschreiben. Fortfahren?</string>
|
||||||
|
<string name="confirm">Bestätigen</string>
|
||||||
|
<string name="cancel">Abbrechen</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Sicherung erfolgreich (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Sicherung fehlgeschlagen: %1$s</string>
|
||||||
|
<string name="backup_modules">sicherungsmodule</string>
|
||||||
|
<string name="restore_modules">wiederherstellen</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Module erfolgreich wiederhergestellt, Neustart erforderlich</string>
|
||||||
|
<string name="restore_failed">Wiederherstellung fehlgeschlagen: %1$s</string>
|
||||||
|
<string name="restart_now">Jetzt Neustarten</string>
|
||||||
|
<string name="unknown_error">Ein unbekannter Fehler ist aufgetreten</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Befehlsausführung fehlgeschlagen: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Sicherung erfolgreich erlaubt</string>
|
||||||
|
<string name="allowlist_backup_failed">Sicherung der erlaubten Liste fehlgeschlagen: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Allowlist-Wiederherstellung bestätigen</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">Dieser Vorgang wird die aktuelle Berechtigungsliste überschreiben. Fortfahren?</string>
|
||||||
|
<string name="allowlist_restore_success">Liste erfolgreich wiederhergestellt</string>
|
||||||
|
<string name="allowlist_restore_failed">Wiederherstellung der erlaubten Liste fehlgeschlagen: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Sicherungsliste</string>
|
||||||
|
<string name="restore_allowlist">Allowlist wiederherstellen</string>
|
||||||
|
<string name="settings_custom_background">Eigener App-Hintergrund</string>
|
||||||
|
<string name="settings_custom_background_summary">Wählen Sie ein Bild als Hintergrund</string>
|
||||||
|
<string name="settings_card_alpha">Transparenz der Navigationsleiste</string>
|
||||||
|
<string name="settings_restore_default">Standard wiederherstellen</string>
|
||||||
|
<string name="home_android_version">Androidversion</string>
|
||||||
|
<string name="home_device_model">Geräteausführung</string>
|
||||||
|
<string name="su_not_allowed">Superuser %s zu erlauben ist nicht erlaubt</string>
|
||||||
|
<string name="settings_disable_su">Su Kompatibilität deaktivieren</string>
|
||||||
|
<string name="settings_disable_su_summary">Deaktivieren Sie temporär alle Anwendungen, die root-Privilegien über den Befehl <unk> su zu erhalten (bestehende root-Prozesse werden nicht beeinflusst).</string>
|
||||||
|
<string name="using_mksu_manager">Sie verwenden den SukiSU Beta-Manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Sind Sie sicher, dass Sie die ausgewählten %d -Module installieren möchten?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Möchten Sie die folgenden %1$d Module installieren? \n\n\n%2$s</string>
|
||||||
|
<string name="more_settings">Weitere Einstellungen</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Aktiviert</string>
|
||||||
|
<string name="selinux_disabled">Deaktiviert</string>
|
||||||
|
<string name="simple_mode">Einfachheit Modus</string>
|
||||||
|
<string name="simple_mode_summary">Versteckt unnötige Karten beim Einschalten</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Kernel-Version ausblenden</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Kernel-Version ausblenden</string>
|
||||||
|
<string name="hide_other_info">Andere Infos ausblenden</string>
|
||||||
|
<string name="hide_other_info_summary">Versteckt Informationen über die Anzahl der Supernutzer, Module und KPM-Module auf der Startseite</string>
|
||||||
|
<string name="hide_susfs_status">SuSFS-Status ausblenden</string>
|
||||||
|
<string name="hide_susfs_status_summary">SuSFS Statusinformationen auf der Startseite ausblenden</string>
|
||||||
|
<string name="hide_link_card">Link-Kartenstatus ausblenden</string>
|
||||||
|
<string name="hide_link_card_summary">Link Karteninformationen auf der Startseite ausblenden</string>
|
||||||
|
<string name="theme_mode">Thema</string>
|
||||||
|
<string name="theme_follow_system">Systemkonform</string>
|
||||||
|
<string name="theme_light">Licht</string>
|
||||||
|
<string name="theme_dark">Dunkel</string>
|
||||||
|
<string name="manual_hook">Manueller Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamische Farbe</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamische Farben mit System-Themes</string>
|
||||||
|
<string name="choose_theme_color">Wähle eine Theme-Farbe</string>
|
||||||
|
<string name="color_default">Blau</string>
|
||||||
|
<string name="color_green">Grün</string>
|
||||||
|
<string name="color_purple">Lila</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Grau</string>
|
||||||
|
<string name="color_yellow">Gelb</string>
|
||||||
|
<string name="flash_option">Pinseloptionen</string>
|
||||||
|
<string name="flash_option_tip">Wählen Sie die zu flashende Datei</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 Kernel-Datei</string>
|
||||||
|
<string name="root_required">Erfordert Root-Rechte</string>
|
||||||
|
<string name="copy_failed">Datei-Kopierfehler</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing abgeschlossen</string>
|
||||||
|
<string name="reboot_complete_msg">Ob sofort neu gestartet werden soll?</string>
|
||||||
|
<string name="yes">Ja</string>
|
||||||
|
<string name="no">Nein</string>
|
||||||
|
<string name="failed_reboot">Neustart fehlgeschlagen</string>
|
||||||
|
<string name="batch_authorization">empowern</string>
|
||||||
|
<string name="batch_cancel_authorization">abheben</string>
|
||||||
|
<string name="backup">Sicherung</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">Keine installierten Kernelmodule</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Autor</string>
|
||||||
|
<string name="kpm_uninstall">Deinstallieren</string>
|
||||||
|
<string name="kpm_uninstall_success">Erfolgreich deinstalliert</string>
|
||||||
|
<string name="kpm_uninstall_failed">Deinstallation fehlgeschlagen</string>
|
||||||
|
<string name="kpm_install">Installieren</string>
|
||||||
|
<string name="kpm_install_success">Laden des kpm Moduls erfolgreich</string>
|
||||||
|
<string name="kpm_install_failed">Laden des kpm-Moduls fehlgeschlagen</string>
|
||||||
|
<string name="kpm_args">Parameter</string>
|
||||||
|
<string name="kpm_control">Ausführen</string>
|
||||||
|
<string name="home_kpm_version">KPM-Version</string>
|
||||||
|
<string name="close_notice">Schließen</string>
|
||||||
|
<string name="kernel_module_notice">Die folgenden Kernel-Modulfunktionen wurden von KernelPatch entwickelt und so modifiziert, dass die Funktionen des Kernel-Moduls von SukiSU Ultra enthalten sind</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra freut sich auf</string>
|
||||||
|
<string name="kpm_control_success">Erfolgreich</string>
|
||||||
|
<string name="kpm_control_failed">Fehlgeschlagen</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra wird in Zukunft ein relativ unabhängiger Zweig der KSU sein, aber wir schätzen immer noch die offiziellen KernelSU und MKSU usw. für ihre Beiträge!</string>
|
||||||
|
<string name="not_supported">Nicht unterstützt</string>
|
||||||
|
<string name="supported">Unterstützt:</string>
|
||||||
|
<string name="home_kpm_module">"Anzahl der KPM-Module: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Ungültige KPM-Datei</string>
|
||||||
|
<string name="kernel_patched">Kernel nicht gepatcht</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel nicht konfiguriert</string>
|
||||||
|
<string name="custom_settings">Eigene Einstellungen</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Laden</string>
|
||||||
|
<string name="kpm_install_mode_embed">Einbetten</string>
|
||||||
|
<string name="kpm_install_mode_description">Bitte wählen: %1\$s Modul-Installationsmodus \n\nLaden: Das Modul \ntemporär laden: Dauerhaft in das System installieren</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Fehler beim Prüfen der Moduldatei-Existenz</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Kann nicht überprüfen, ob die Moduldatei existiert</string>
|
||||||
|
<string name="confirm_uninstall_title">Deinstallation bestätigen.</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Deinstallieren</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Abbrechen</string>
|
||||||
|
<string name="theme_color">Themenfarbe</string>
|
||||||
|
<string name="invalid_file_type">Falscher Dateityp! Bitte wählen Sie eine .kpm Datei.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Deinstallieren</string>
|
||||||
|
<string name="confirm_uninstall_content">Folgende KPM wird deinstalliert: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Deaktiviere kprobe Hooks die von KernelSU erstellt wurden und stattdessen inline Hooks verwenden, was der Nicht-GKI-Kernel-Hooking Methode ähnlich ist.</string>
|
||||||
|
<string name="image_editor_title">Hintergrundbild anpassen</string>
|
||||||
|
<string name="image_editor_hint">Verwende zwei Finger um das Bild zu vergrößern und einen Finger um die Position anzupassen</string>
|
||||||
|
<string name="background_image_error">Bild konnte nicht geladen werden</string>
|
||||||
|
<string name="reprovision">Rückzahlung</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel-Flashen</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Blitz abgeschlossen</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Vorbereiten…</string>
|
||||||
|
<string name="horizon_cleaning_files">Bereinigung von Dateien…</string>
|
||||||
|
<string name="horizon_copying_files">Kopiere Datei…</string>
|
||||||
|
<string name="horizon_extracting_tool">Entpacken des Flash-Tools…</string>
|
||||||
|
<string name="horizon_patching_script">Patcht Flash-Skript…</string>
|
||||||
|
<string name="horizon_flashing">Flashen des Kernels…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Blitz abgeschlossen</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Wähle Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Bitte wählen Sie den Ziel-Slot zum Blinken des Boots aus</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Steckplatz B</string>
|
||||||
|
<string name="selected_slot">Wähle LKM: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Den ursprünglichen Slot erhalten</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setze den angegebenen Slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Standard wiederherstellen</string>
|
||||||
|
<string name="current_slot">Aktueller Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Kopieren fehlgeschlagen</string>
|
||||||
|
<string name="horizon_unknown_error">Ein unbekannter Fehler ist aufgetreten</string>
|
||||||
|
<string name="flash_failed_message">Schreiben fehlgeschlagen</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM Reparatur/Installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel</string>
|
||||||
|
<string name="tool_version_log">Benutze das Patchwerkzeug:%1$s</string>
|
||||||
|
<string name="configuration">Konfigurieren</string>
|
||||||
|
<string name="app_settings">Anwendungs-Einstellungen</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Derzeit</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Entfernen</string>
|
||||||
|
<string name="apps_with_root">Anwendungen mit Root-Rechten</string>
|
||||||
|
<string name="apps_with_custom_profile">Anwendungen mit angepassten Konfigurationen</string>
|
||||||
|
<string name="other_apps">Anwendungen mit unveränderten Standardeinstellungen</string>
|
||||||
|
<string name="no_apps_found">Anwendung nicht gefunden</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux aktiviert</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux deaktiviert</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Statusänderung fehlgeschlagen</string>
|
||||||
|
<string name="advanced_settings">Erweiterte Einstellungen</string>
|
||||||
|
<string name="appearance_settings">Passt die Symbolleiste an.</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Seien Sie in vollem Gange</string>
|
||||||
|
<string name="collapse">wegziehen</string>
|
||||||
|
<string name="susfs_enabled">SuSFS aktiviert</string>
|
||||||
|
<string name="susfs_disabled">SuSFS deaktiviert</string>
|
||||||
|
<string name="background_set_success">Hintergrund erfolgreich gesetzt</string>
|
||||||
|
<string name="background_removed">Eigene Hintergründe entfernt</string>
|
||||||
|
<string name="root_require_for_install">Erfordert Root-Rechte</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">KPM-Funktion anzeigen</string>
|
||||||
|
<string name="show_kpm_info_summary">KPM-Informationen und Funktion in der Home- und unteren Leiste anzeigen (muss die App erneut öffnen)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Eruda in WebUI X injizieren</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Fügen Sie eine Debug-Konsole in WebUI X ein, um das Debuggen zu vereinfachen. Benötigt Debugging im WebUI X.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI-Einstellung</string>
|
||||||
|
<string name="app_dpi_title">Angewendeter DPI</string>
|
||||||
|
<string name="app_dpi_summary">Bildschirmanzahl nur für die aktuelle Anwendung anpassen</string>
|
||||||
|
<string name="dpi_size_small">Klein </string>
|
||||||
|
<string name="dpi_size_medium">Mittel </string>
|
||||||
|
<string name="dpi_size_large">Groß</string>
|
||||||
|
<string name="dpi_size_extra_large">übergröße</string>
|
||||||
|
<string name="dpi_size_custom">anpassbar</string>
|
||||||
|
<string name="dpi_apply_settings">DPI-Einstellungen anwenden</string>
|
||||||
|
<string name="dpi_confirm_title">DPI-Änderung bestätigen</string>
|
||||||
|
<string name="dpi_confirm_message">Sind Sie sicher, dass Sie die Anwendung DPI von %1$d auf %2$d ändern möchten?</string>
|
||||||
|
<string name="dpi_confirm_summary">Die Anwendung muss neu gestartet werden, um die neuen DPI-Einstellungen zu übernehmen, hat keine Auswirkungen auf die System-Statusleiste oder andere Anwendungen</string>
|
||||||
|
<string name="dpi_applied_success">DPI wurde auf %1$dgesetzt, wirksam nach dem Neustart der Anwendung</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Sprache</string>
|
||||||
|
<string name="language_follow_system">Folge Systemeinstellung</string>
|
||||||
|
<string name="language_changed">Sprache geändert, Neustart um Änderungen zu übernehmen</string>
|
||||||
|
<string name="settings_card_dim">Kartenfinsternis Anpassung</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Unten</string>
|
||||||
|
<string name="scroll_to_top_description">Bildlauf nach oben scrollen</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scrolle zum Ende</string>
|
||||||
|
<string name="authorized">Autorisiert</string>
|
||||||
|
<string name="unauthorized">Unberechtigt</string>
|
||||||
|
<string name="selected">Ausgewählt</string>
|
||||||
|
<string name="select">variieren</string>
|
||||||
|
<string name="profile_umount_modules_disable">Eigenes Deinstallationsmodul deaktivieren</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">fehlercode</string>
|
||||||
|
<string name="check_log">Bitte überprüfen Sie das Log</string>
|
||||||
|
<string name="installing_module">Modul wird installiert %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Fehler bei der Installation eines neuen Moduls</string>
|
||||||
|
<string name="module_download_error">Modul-Download fehlgeschlagen</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -10,10 +10,12 @@
|
|||||||
<string name="home_unsupported">Sin soporte</string>
|
<string name="home_unsupported">Sin soporte</string>
|
||||||
<string name="home_unsupported_reason">KernelSU solo admite kernels GKI por ahora</string>
|
<string name="home_unsupported_reason">KernelSU solo admite kernels GKI por ahora</string>
|
||||||
<string name="home_kernel">Versión del kernel</string>
|
<string name="home_kernel">Versión del kernel</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">Versión SuSFS</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Versión del gestor</string>
|
<string name="home_manager_version">Versión del gestor</string>
|
||||||
<string name="home_fingerprint">Huella del dispositivo</string>
|
<string name="home_fingerprint">Huella del dispositivo</string>
|
||||||
<string name="home_selinux_status">Estado de SELinux</string>
|
<string name="home_selinux_status">Estado de SELinux</string>
|
||||||
<!-- It may be better to leave SELinux statuses untranslated -->
|
|
||||||
<string name="selinux_status_disabled">Desactivado</string>
|
<string name="selinux_status_disabled">Desactivado</string>
|
||||||
<string name="selinux_status_enforcing">Estricto</string>
|
<string name="selinux_status_enforcing">Estricto</string>
|
||||||
<string name="selinux_status_permissive">Permisivo</string>
|
<string name="selinux_status_permissive">Permisivo</string>
|
||||||
@@ -23,7 +25,10 @@
|
|||||||
<string name="module_failed_to_disable">Error al desactivar el módulo: %s</string>
|
<string name="module_failed_to_disable">Error al desactivar el módulo: %s</string>
|
||||||
<string name="module_empty">Ningún módulo instalado</string>
|
<string name="module_empty">Ningún módulo instalado</string>
|
||||||
<string name="module">Módulo</string>
|
<string name="module">Módulo</string>
|
||||||
|
<string name="module_sort_action_first">Ordenar (Acción primero)</string>
|
||||||
|
<string name="module_sort_enabled_first">Ordenar (Activado primero)</string>
|
||||||
<string name="uninstall">Desinstalar</string>
|
<string name="uninstall">Desinstalar</string>
|
||||||
|
<string name="restore">Restaurar</string>
|
||||||
<string name="module_install">Instalar</string>
|
<string name="module_install">Instalar</string>
|
||||||
<string name="install">Instalar</string>
|
<string name="install">Instalar</string>
|
||||||
<string name="reboot">Reiniciar</string>
|
<string name="reboot">Reiniciar</string>
|
||||||
@@ -51,6 +56,7 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">Aprende a instalar KernelSU y a utilizar módulos</string>
|
<string name="home_click_to_learn_kernelsu">Aprende a instalar KernelSU y a utilizar módulos</string>
|
||||||
<string name="home_support_title">Apóyanos</string>
|
<string name="home_support_title">Apóyanos</string>
|
||||||
<string name="home_support_content">KernelSU es, y siempre será, gratuito y de código abierto. Sin embargo, puedes demostrarnos que te importamos haciendo una donación.</string>
|
<string name="home_support_content">KernelSU es, y siempre será, gratuito y de código abierto. Sin embargo, puedes demostrarnos que te importamos haciendo una donación.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[Ver el código fuente en %1$s<br/>Únete a nuestro canal %2$s]]></string>
|
||||||
<string name="profile_default">Predeterminado</string>
|
<string name="profile_default">Predeterminado</string>
|
||||||
<string name="profile_template">Plantilla</string>
|
<string name="profile_template">Plantilla</string>
|
||||||
<string name="profile_custom">Personalizado</string>
|
<string name="profile_custom">Personalizado</string>
|
||||||
@@ -64,8 +70,10 @@
|
|||||||
<string name="profile_selinux_context">Contexto SELinux</string>
|
<string name="profile_selinux_context">Contexto SELinux</string>
|
||||||
<string name="profile_umount_modules">Desmontar módulos</string>
|
<string name="profile_umount_modules">Desmontar módulos</string>
|
||||||
<string name="failed_to_update_app_profile">Error al actualizar el perfil de la aplicación para %s</string>
|
<string name="failed_to_update_app_profile">Error al actualizar el perfil de la aplicación para %s</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">La versión %d actual de KernelSU es demasiado baja para que el gestor funcione correctamente. Por favor, ¡actualice a la versión %d o superior!</string>
|
||||||
<string name="settings_umount_modules_default">Desmontar módulos por defecto</string>
|
<string name="settings_umount_modules_default">Desmontar módulos por defecto</string>
|
||||||
<string name="settings_umount_modules_default_summary">El valor global predeterminado para \"Umount modules\" en App Profile. Si está activado, eliminará todas las modificaciones de módulos del sistema para las apps que no tengan un perfil establecido.</string>
|
<string name="settings_umount_modules_default_summary">El valor global predeterminado para \"Umount modules\" en App Profile. Si está activado, eliminará todas las modificaciones de módulos del sistema para las apps que no tengan un perfil establecido.</string>
|
||||||
|
<string name="settings_susfs_toggle">Desactivar kprobe hooks</string>
|
||||||
<string name="profile_umount_modules_summary">Activar esta opción permitirá a KernelSU restaurar cualquier archivo modificado por los módulos para esta aplicación.</string>
|
<string name="profile_umount_modules_summary">Activar esta opción permitirá a KernelSU restaurar cualquier archivo modificado por los módulos para esta aplicación.</string>
|
||||||
<string name="profile_selinux_domain">Dominio</string>
|
<string name="profile_selinux_domain">Dominio</string>
|
||||||
<string name="profile_selinux_rules">Reglas</string>
|
<string name="profile_selinux_rules">Reglas</string>
|
||||||
@@ -78,50 +86,286 @@
|
|||||||
<string name="restart_app">Reiniciar</string>
|
<string name="restart_app">Reiniciar</string>
|
||||||
<string name="failed_to_update_sepolicy">Error al actualizar las reglas SELinux para: %s</string>
|
<string name="failed_to_update_sepolicy">Error al actualizar las reglas SELinux para: %s</string>
|
||||||
<string name="module_changelog">Registro de cambios</string>
|
<string name="module_changelog">Registro de cambios</string>
|
||||||
<string name="app_profile_template_import_success">Importado con éxito</string>
|
<string name="settings_profile_template">Plantilla de perfil de aplicación</string>
|
||||||
<string name="app_profile_export_to_clipboard">Exportar al portapapeles</string>
|
<string name="settings_profile_template_summary">Gestionar la plantilla local y en línea de App Profile</string>
|
||||||
<string name="app_profile_template_export_empty">¡No se encuentra la plantilla local para exportar!</string>
|
|
||||||
<string name="app_profile_template_id_exist">¡El ID de plantilla ya existe!</string>
|
|
||||||
<string name="app_profile_import_from_clipboard">Importar desde el portapapeles</string>
|
|
||||||
<string name="module_changelog_failed">Fallo en la obtención del registro de cambios: %s</string>
|
|
||||||
<string name="app_profile_template_name">Nombre</string>
|
|
||||||
<string name="app_profile_template_id_invalid">ID de plantilla no válida</string>
|
|
||||||
<string name="app_profile_template_sync">Sincronizar plantillas en línea</string>
|
|
||||||
<string name="app_profile_template_create">Crear plantilla</string>
|
<string name="app_profile_template_create">Crear plantilla</string>
|
||||||
<string name="app_profile_template_readonly">Sólo lectura</string>
|
|
||||||
<string name="app_profile_import_export">Importar/Exportar</string>
|
|
||||||
<string name="app_profile_template_save_failed">No se ha podido guardar la plantilla</string>
|
|
||||||
<string name="app_profile_template_edit">Editar plantilla</string>
|
<string name="app_profile_template_edit">Editar plantilla</string>
|
||||||
<string name="app_profile_template_id">ID</string>
|
<string name="app_profile_template_id">ID</string>
|
||||||
<string name="settings_profile_template">Plantilla de perfil de aplicación</string>
|
<string name="app_profile_template_id_invalid">ID de plantilla no válida</string>
|
||||||
|
<string name="app_profile_template_name">Nombre</string>
|
||||||
<string name="app_profile_template_description">Descripción</string>
|
<string name="app_profile_template_description">Descripción</string>
|
||||||
<string name="app_profile_template_save">Guardar</string>
|
<string name="app_profile_template_save">Guardar</string>
|
||||||
<string name="settings_profile_template_summary">Gestionar la plantilla local y en línea de App Profile</string>
|
|
||||||
<string name="app_profile_template_delete">Eliminar</string>
|
<string name="app_profile_template_delete">Eliminar</string>
|
||||||
<string name="app_profile_template_import_empty">¡El portapapeles está vacío!</string>
|
|
||||||
<string name="app_profile_template_view">Ver plantilla</string>
|
<string name="app_profile_template_view">Ver plantilla</string>
|
||||||
<string name="save_log">Guardar registros</string>
|
<string name="app_profile_template_readonly">Sólo lectura</string>
|
||||||
<string name="enable_web_debugging">Activar la depuración de WebView</string>
|
<string name="app_profile_template_id_exist">¡El ID de plantilla ya existe!</string>
|
||||||
<string name="select_file_tip">Se recomienda la imagen de partición %1$s</string>
|
<string name="app_profile_import_export">Importar/Exportar</string>
|
||||||
<string name="select_kmi">Selecciona KMI</string>
|
<string name="app_profile_import_from_clipboard">Importar desde el portapapeles</string>
|
||||||
<string name="install_next">Siguiente</string>
|
<string name="app_profile_export_to_clipboard">Exportar al portapapeles</string>
|
||||||
<string name="direct_install">Instalación directa (Recomendada)</string>
|
<string name="app_profile_template_export_empty">¡No se encuentra la plantilla local para exportar!</string>
|
||||||
<string name="install_inactive_slot_warning">¡Su dispositivo será **FORZADO** a arrancar en la ranura inactiva actual después de un reinicio!\nUtilice esta opción sólo después de que la OTA se haya realizado.\n¿Continuar?</string>
|
<string name="app_profile_template_import_success">Importado con éxito</string>
|
||||||
<string name="settings_uninstall">Desinstalar</string>
|
<string name="app_profile_template_sync">Sincronizar plantillas en línea</string>
|
||||||
<string name="settings_restore_stock_image">Restaurar imagen de archivo</string>
|
<string name="app_profile_template_save_failed">No se ha podido guardar la plantilla</string>
|
||||||
<string name="settings_uninstall_temporary_message">Desinstalar temporalmente KernelSU, restaurar al estado original tras el siguiente reinicio.</string>
|
<string name="app_profile_template_import_empty">¡El portapapeles está vacío!</string>
|
||||||
<string name="selected_lkm">LKM seleccionado: %s</string>
|
<string name="module_changelog_failed">Fallo en la obtención del registro de cambios: %s</string>
|
||||||
<string name="flash_failed">Flash falló</string>
|
|
||||||
<string name="flash_success">Éxito de Flash</string>
|
|
||||||
<string name="grant_root_failed">¡No se ha podido conceder el acceso root!</string>
|
|
||||||
<string name="open">Abrir</string>
|
|
||||||
<string name="select_file">Seleccione un archivo</string>
|
|
||||||
<string name="install_inactive_slot">Instalar en ranura inactiva (Después de OTA)</string>
|
|
||||||
<string name="settings_uninstall_temporary">Desinstalar temporalmente</string>
|
|
||||||
<string name="settings_uninstall_permanent">Desinstalar permanentemente</string>
|
|
||||||
<string name="settings_uninstall_permanent_message">Desinstalar KernelSU (Root y todos los módulos) completa y permanentemente.</string>
|
|
||||||
<string name="settings_check_update">Comprobar actualización</string>
|
<string name="settings_check_update">Comprobar actualización</string>
|
||||||
<string name="settings_check_update_summary">Comprobación automática de actualizaciones al abrir la aplicación</string>
|
<string name="settings_check_update_summary">Comprobación automática de actualizaciones al abrir la aplicación</string>
|
||||||
|
<string name="grant_root_failed">¡No se ha podido conceder el acceso root!</string>
|
||||||
|
<string name="action">Aktion</string>
|
||||||
|
<string name="open">Abrir</string>
|
||||||
|
<string name="close">Cancelar</string>
|
||||||
|
<string name="enable_web_debugging">Activar la depuración de WebView</string>
|
||||||
<string name="enable_web_debugging_summary">Puede ser usado para depurar WebUI, por favor habilítalo sólo cuando sea necesario.</string>
|
<string name="enable_web_debugging_summary">Puede ser usado para depurar WebUI, por favor habilítalo sólo cuando sea necesario.</string>
|
||||||
|
<string name="direct_install">Instalación directa (Recomendada)</string>
|
||||||
|
<string name="select_file">Seleccione un archivo</string>
|
||||||
|
<string name="install_inactive_slot">Instalar en ranura inactiva (Después de OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">¡Su dispositivo será **FORZADO** a arrancar en la ranura inactiva actual después de un reinicio!\nUtilice esta opción sólo después de que la OTA se haya realizado.\n¿Continuar?</string>
|
||||||
|
<string name="install_next">Siguiente</string>
|
||||||
|
<string name="select_file_tip">Se recomienda la imagen de partición %1$s</string>
|
||||||
|
<string name="select_kmi">Selecciona KMI</string>
|
||||||
|
<string name="settings_uninstall">Desinstalar</string>
|
||||||
|
<string name="settings_uninstall_temporary">Desinstalar temporalmente</string>
|
||||||
|
<string name="settings_uninstall_permanent">Desinstalar permanentemente</string>
|
||||||
|
<string name="settings_restore_stock_image">Restaurar imagen de archivo</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Desinstalar temporalmente KernelSU, restaurar al estado original tras el siguiente reinicio.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Desinstalar KernelSU (Root y todos los módulos) completa y permanentemente.</string>
|
||||||
<string name="settings_restore_stock_image_message">Restaurar la imagen de fábrica stock (Si existe una copia de seguridad), por lo general se utiliza antes de OTA; si necesita desinstalar KernelSU, por favor, utilice \"Desinstalar permanentemente\".</string>
|
<string name="settings_restore_stock_image_message">Restaurar la imagen de fábrica stock (Si existe una copia de seguridad), por lo general se utiliza antes de OTA; si necesita desinstalar KernelSU, por favor, utilice \"Desinstalar permanentemente\".</string>
|
||||||
|
<string name="flashing">Intermitencia</string>
|
||||||
|
<string name="flash_success">Éxito de Flash</string>
|
||||||
|
<string name="flash_failed">Flash falló</string>
|
||||||
|
<string name="selected_lkm">LKM seleccionado: %s</string>
|
||||||
|
<string name="save_log">Guardar registros</string>
|
||||||
|
<string name="log_saved">Registro guardado</string>
|
||||||
|
<string name="status_supported">Apóyanos</string>
|
||||||
|
<string name="status_not_supported">No soportado</string>
|
||||||
|
<string name="status_unknown">Desconocido</string>
|
||||||
|
<string name="sus_su_mode">Modo SuS SU:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">¿confirmar la instalación del módulo %1$s?</string>
|
||||||
|
<string name="unknown_module">módulo desconocido</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirmar restauración del módulo</string>
|
||||||
|
<string name="restore_confirm_message">Esta operación sobrescribirá todos los módulos existentes. ¿Continuar?</string>
|
||||||
|
<string name="confirm">Confirmar</string>
|
||||||
|
<string name="cancel">Cancelar</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Copia de seguridad exitosa (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Copia de seguridad fallida: %1$s</string>
|
||||||
|
<string name="backup_modules">módulos de respaldo</string>
|
||||||
|
<string name="restore_modules">restaurar módulos</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Módulos restaurados con éxito, se requiere reiniciar</string>
|
||||||
|
<string name="restore_failed">Restauración fallida: %1$s</string>
|
||||||
|
<string name="restart_now">Reiniciar ahora</string>
|
||||||
|
<string name="unknown_error">Error desconocido</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Ejecución del comando fallida: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Copia de seguridad correcta</string>
|
||||||
|
<string name="allowlist_backup_failed">Copia de seguridad de lista fallida: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirmar restauración de lista de permisos</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">Esta operación sobrescribirá la lista permitida actual. ¿Continuar?</string>
|
||||||
|
<string name="allowlist_restore_success">Lista restaurada correctamente</string>
|
||||||
|
<string name="allowlist_restore_failed">Restauración de lista de permisos falló: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Copia de seguridad lista</string>
|
||||||
|
<string name="restore_allowlist">Restaurar lista de permisos</string>
|
||||||
|
<string name="settings_custom_background">Fondo de aplicación personalizado</string>
|
||||||
|
<string name="settings_custom_background_summary">Seleccionar una imagen como fondo</string>
|
||||||
|
<string name="settings_card_alpha">Transparencia de la barra de navegación</string>
|
||||||
|
<string name="settings_restore_default">Restaurar</string>
|
||||||
|
<string name="home_android_version">Versión de Android</string>
|
||||||
|
<string name="home_device_model">Modelo del dispositivo</string>
|
||||||
|
<string name="su_not_allowed">No se permite conceder superusuario a %s</string>
|
||||||
|
<string name="settings_disable_su">Desactivar compatibilidad su</string>
|
||||||
|
<string name="settings_disable_su_summary">Deshabilita temporalmente cualquier aplicación para obtener privilegios de root a través del comando de \"it\" (los procesos de root existentes no se verán afectados).</string>
|
||||||
|
<string name="using_mksu_manager">Estás usando el administrador de la Beta de SukiSU</string>
|
||||||
|
<string name="module_install_multiple_confirm">¿Está seguro que desea instalar los módulos %d seleccionados?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">¿Seguro que quieres instalar los siguientes módulos %1$d ? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">Opciones avanzadas</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Habilitado</string>
|
||||||
|
<string name="selinux_disabled">Desactivado</string>
|
||||||
|
<string name="simple_mode">Modo de simplicidad</string>
|
||||||
|
<string name="simple_mode_summary">Ocultar tarjetas innecesarias al encender</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Ocultar versión del núcleo</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Ocultar versión del núcleo</string>
|
||||||
|
<string name="hide_other_info">Ocultar otra información</string>
|
||||||
|
<string name="hide_other_info_summary">Oculta información sobre el número de superusuarios, módulos y módulos KPM en la página de inicio</string>
|
||||||
|
<string name="hide_susfs_status">Ocultar estado SuSFS</string>
|
||||||
|
<string name="hide_susfs_status_summary">Ocultar información de estado de SuSFS en la página de inicio</string>
|
||||||
|
<string name="hide_link_card">Ocultar el estado de la tarjeta de enlace</string>
|
||||||
|
<string name="hide_link_card_summary">Ocultar información de la tarjeta de enlace en la página de inicio</string>
|
||||||
|
<string name="theme_mode">Temas</string>
|
||||||
|
<string name="theme_follow_system">Predeterminado del sistema</string>
|
||||||
|
<string name="theme_light">Claro</string>
|
||||||
|
<string name="theme_dark">Oscuro</string>
|
||||||
|
<string name="manual_hook">Gancho manual</string>
|
||||||
|
<string name="dynamic_color_title">Color dinámico</string>
|
||||||
|
<string name="dynamic_color_summary">Colores dinámicos usando temas del sistema</string>
|
||||||
|
<string name="choose_theme_color">Elegir un color de tema</string>
|
||||||
|
<string name="color_default">Azul</string>
|
||||||
|
<string name="color_green">Verde</string>
|
||||||
|
<string name="color_purple">Morado</string>
|
||||||
|
<string name="color_orange">Naranjo</string>
|
||||||
|
<string name="color_pink">Rosa</string>
|
||||||
|
<string name="color_gray">Gris</string>
|
||||||
|
<string name="color_yellow">Amarillo</string>
|
||||||
|
<string name="flash_option">Opciones de flash</string>
|
||||||
|
<string name="flash_option_tip">Seleccione el archivo a flashear</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash archivo del kernel AnyKernel3</string>
|
||||||
|
<string name="root_required">Requiere privilegios de root</string>
|
||||||
|
<string name="copy_failed">Fallo al copiar archivo</string>
|
||||||
|
<string name="reboot_complete_title">Desguace completo</string>
|
||||||
|
<string name="reboot_complete_msg">¿Reiniciar inmediatamente?</string>
|
||||||
|
<string name="yes">Si</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reinicio fallido</string>
|
||||||
|
<string name="batch_authorization">empoderar</string>
|
||||||
|
<string name="batch_cancel_authorization">gasto</string>
|
||||||
|
<string name="backup">Copia de seguridad</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No hay módulos del núcleo instalados en este momento</string>
|
||||||
|
<string name="kpm_version">Versión</string>
|
||||||
|
<string name="kpm_author">Autor</string>
|
||||||
|
<string name="kpm_uninstall">Desinstalar</string>
|
||||||
|
<string name="kpm_uninstall_success">Desinstalado con éxito</string>
|
||||||
|
<string name="kpm_uninstall_failed">Error al desinstalar</string>
|
||||||
|
<string name="kpm_install">Instalar</string>
|
||||||
|
<string name="kpm_install_success">Carga exitosa del módulo kpm</string>
|
||||||
|
<string name="kpm_install_failed">Error al cargar el módulo kpm</string>
|
||||||
|
<string name="kpm_args">Parámetros</string>
|
||||||
|
<string name="kpm_control">Empezar</string>
|
||||||
|
<string name="home_kpm_version">Versión de KPM</string>
|
||||||
|
<string name="close_notice">Cancelar</string>
|
||||||
|
<string name="kernel_module_notice">Las siguientes funciones del módulo del núcleo fueron desarrolladas por KernelPatch y modificadas para incluir las funciones del módulo del núcleo de SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra espera a</string>
|
||||||
|
<string name="kpm_control_success">Correctamente realizado</string>
|
||||||
|
<string name="kpm_control_failed">Fallido</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra será una rama relativamente independiente de KSU en el futuro, pero todavía apreciamos el KernelSU oficial y MKSU etc. ¡por sus contribuciones!</string>
|
||||||
|
<string name="not_supported">Sin soporte</string>
|
||||||
|
<string name="supported">Apoyado</string>
|
||||||
|
<string name="home_kpm_module">"Número de módulos KPM: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Archivo KPM inválido</string>
|
||||||
|
<string name="kernel_patched">Kernel no parcheado</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel no configurado</string>
|
||||||
|
<string name="custom_settings">Ajustes personalizados</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Cargar</string>
|
||||||
|
<string name="kpm_install_mode_embed">Insertar</string>
|
||||||
|
<string name="kpm_install_mode_description">Por favor seleccione: %1\$s Modo de instalación del Módulo \n\nCarga: Cargar temporalmente el módulo \nInsertar: Instalar permanentemente en el sistema</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Error al comprobar la existencia del archivo de módulo</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">No se puede comprobar si el archivo de módulo existe</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirme las desinstalaciones</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Desinstalar</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancelar</string>
|
||||||
|
<string name="theme_color">Color del tema</string>
|
||||||
|
<string name="invalid_file_type">¡Tipo de archivo incorrecto! Por favor seleccione el archivo .kpm.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Desinstalar</string>
|
||||||
|
<string name="confirm_uninstall_content">El siguiente KPM será desinstalado: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Deshabilita los ganchos kprobe creados por KernelSU, usando ganchos en línea en su lugar, que es similar al método de enganche del núcleo no GKI.</string>
|
||||||
|
<string name="image_editor_title">Ajustar imagen de fondo</string>
|
||||||
|
<string name="image_editor_hint">Usa dos dedos para acercar la imagen, y un dedo para arrastrarla para ajustar la posición</string>
|
||||||
|
<string name="background_image_error">Imposible cargar imagen</string>
|
||||||
|
<string name="reprovision">Reaprovisionamiento</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Parpadeo Kernel</string>
|
||||||
|
<string name="horizon_logs_label">Registros:</string>
|
||||||
|
<string name="horizon_flash_complete">Flashear completo</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparando…</string>
|
||||||
|
<string name="horizon_cleaning_files">Limpiando archivos…</string>
|
||||||
|
<string name="horizon_copying_files">Copiando archivos…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extrayendo herramienta flash…</string>
|
||||||
|
<string name="horizon_patching_script">Parcheando script flash…</string>
|
||||||
|
<string name="horizon_flashing">Flashear kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completado</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Seleccionar Ranura Flash</string>
|
||||||
|
<string name="select_slot_description">Por favor, seleccione la ranura de destino para flashear el arranque</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Slot selectionada</string>
|
||||||
|
<string name="horizon_getting_original_slot">Obteniendo la ranura original</string>
|
||||||
|
<string name="horizon_setting_target_slot">Establecer la ranura especificada</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restaurar Ranura Predeterminada</string>
|
||||||
|
<string name="current_slot">Ranura actual:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Hubo un fallo al copiar</string>
|
||||||
|
<string name="horizon_unknown_error">Error desconocido</string>
|
||||||
|
<string name="flash_failed_message">Flash falló</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">Reparación/instalación de LKM</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Versión del kernel</string>
|
||||||
|
<string name="tool_version_log">Usando la herramienta de parches:%1$s</string>
|
||||||
|
<string name="configuration">Configurar</string>
|
||||||
|
<string name="app_settings">Configuración de la Aplicación</string>
|
||||||
|
<string name="tools">Herramientas</string>
|
||||||
|
<string name="currently_selected">Actualmente</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Eliminaciones</string>
|
||||||
|
<string name="apps_with_root">Aplicaciones con privilegios de root</string>
|
||||||
|
<string name="apps_with_custom_profile">Aplicaciones con configuraciones personalizadas</string>
|
||||||
|
<string name="other_apps">Aplicaciones con valores por defecto sin cambios</string>
|
||||||
|
<string name="no_apps_found">No se ha encontrado la solicitud</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux habilitado</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux desactivado</string>
|
||||||
|
<string name="selinux_change_failed">Error al cambiar el estado de SELinux</string>
|
||||||
|
<string name="advanced_settings">Configuraciones avanzadas</string>
|
||||||
|
<string name="appearance_settings">Personalizar la barra de herramientas.</string>
|
||||||
|
<string name="back">Retorno</string>
|
||||||
|
<string name="expand">Estar en pleno swing</string>
|
||||||
|
<string name="collapse">poner</string>
|
||||||
|
<string name="susfs_enabled">SuSFS activado</string>
|
||||||
|
<string name="susfs_disabled">SuSFS desactivado</string>
|
||||||
|
<string name="background_set_success">Fondo establecido correctamente</string>
|
||||||
|
<string name="background_removed">Eliminar fondo personalizado</string>
|
||||||
|
<string name="root_require_for_install">Requiere privilegios de root</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Mostrar función KPM</string>
|
||||||
|
<string name="show_kpm_info_summary">Mostrar información y función KPM en la barra de inicio e inferior (Necesita reabrir la aplicación)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inyectar Eruda en WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inyecta una consola de depuración en WebUI X para facilitar la depuración. Requiere que la depuración web esté encendida.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">Configuración DPI</string>
|
||||||
|
<string name="app_dpi_title">DPI aplicado</string>
|
||||||
|
<string name="app_dpi_summary">Ajustar la densidad de pantalla para la aplicación actual</string>
|
||||||
|
<string name="dpi_size_small">Pequeño </string>
|
||||||
|
<string name="dpi_size_medium">Medio </string>
|
||||||
|
<string name="dpi_size_large">Original</string>
|
||||||
|
<string name="dpi_size_extra_large">sobretamaño</string>
|
||||||
|
<string name="dpi_size_custom">personalizable</string>
|
||||||
|
<string name="dpi_apply_settings">Aplicando ajustes de DPI</string>
|
||||||
|
<string name="dpi_confirm_title">Confirmar cambio DPI</string>
|
||||||
|
<string name="dpi_confirm_message">¿Estás seguro de que quieres cambiar el DPI de la aplicación de %1$d a %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">La aplicación necesita reiniciarse para aplicar la nueva configuración DPI, no afecta a la barra de estado del sistema u otras aplicaciones</string>
|
||||||
|
<string name="dpi_applied_success">DPI ha sido establecido a %1$d, efectivo después de reiniciar la aplicación</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">Idioma de la aplicación</string>
|
||||||
|
<string name="language_follow_system">Seguir sistema</string>
|
||||||
|
<string name="language_changed">Idioma cambiado, reiniciando para aplicar cambios</string>
|
||||||
|
<string name="settings_card_dim">Ajuste de oscuridad de tarjeta</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Arriba</string>
|
||||||
|
<string name="scroll_to_bottom">Abajo</string>
|
||||||
|
<string name="scroll_to_top_description">Ir arriba</string>
|
||||||
|
<string name="scroll_to_bottom_description">Desplazar hacia abajo</string>
|
||||||
|
<string name="authorized">autorizado</string>
|
||||||
|
<string name="unauthorized">Sin Autorización</string>
|
||||||
|
<string name="selected">Seleccionados</string>
|
||||||
|
<string name="select">opción</string>
|
||||||
|
<string name="profile_umount_modules_disable">Desactivar módulo personalizado de desinstalación</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">código de error</string>
|
||||||
|
<string name="check_log">Por favor, compruebe el registro</string>
|
||||||
|
<string name="installing_module">Módulo instalado %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d falló al instalar un nuevo módulo</string>
|
||||||
|
<string name="module_download_error">La descarga del modelo falló</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,116 +1,132 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="home">Kodu</string>
|
||||||
|
<string name="home_not_installed">Pole paigaldatud</string>
|
||||||
|
<string name="home_click_to_install">Klõpsa paigaldamiseks</string>
|
||||||
<string name="home_working">Töötamine</string>
|
<string name="home_working">Töötamine</string>
|
||||||
<string name="home_working_version">Versioon: %d</string>
|
<string name="home_working_version">Versioon: %d</string>
|
||||||
|
<string name="home_superuser_count">Superkasutajaid: %d</string>
|
||||||
<string name="home_module_count">Mooduleid: %d</string>
|
<string name="home_module_count">Mooduleid: %d</string>
|
||||||
|
<string name="home_unsupported">Mittetoetatud</string>
|
||||||
|
<string name="home_unsupported_reason">KernelSU toetab hetkel vaid GSI tuumasid</string>
|
||||||
<string name="home_kernel">Tuum</string>
|
<string name="home_kernel">Tuum</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Manageri versioon</string>
|
<string name="home_manager_version">Manageri versioon</string>
|
||||||
<string name="home_fingerprint">Sõrmejälg</string>
|
<string name="home_fingerprint">Sõrmejälg</string>
|
||||||
<string name="selinux_status_permissive">Lubav</string>
|
|
||||||
<string name="module_failed_to_enable">Mooduli lubamine ebaõnnestus: %s</string>
|
|
||||||
<string name="module_empty">Mooduleid pole paigaldatud</string>
|
|
||||||
<string name="reboot">Taaskäivita</string>
|
|
||||||
<string name="reboot_recovery">Taaskäivita taastusesse</string>
|
|
||||||
<string name="module_uninstall_confirm">Kas soovid kindlasti eemaldada mooduli %s?</string>
|
|
||||||
<string name="module_uninstall_success">%s eemaldatud</string>
|
|
||||||
<string name="send_log">Saada logid</string>
|
|
||||||
<string name="safe_mode">Turvarežiim</string>
|
|
||||||
<string name="reboot_to_apply">Muudatuste rakendamiseks taaskäivita</string>
|
|
||||||
<string name="home_learn_kernelsu">Õpi KernelSUd</string>
|
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
|
||||||
<string name="profile_default">Vaikimisi</string>
|
|
||||||
<string name="profile_namespace">Haagi nimeruum</string>
|
|
||||||
<string name="profile_umount_modules">Lahtihaagitud moodulid</string>
|
|
||||||
<string name="failed_to_update_app_profile">Rakenduseprofiili uuendamine %s jaoks ebaõnnestus</string>
|
|
||||||
<string name="settings_umount_modules_default">Haagi moodulid vaikimisi lahti</string>
|
|
||||||
<string name="module_start_downloading">Allalaadimise alustamine: %s</string>
|
|
||||||
<string name="failed_to_update_sepolicy">SELinux reeglite uuendamine ebaõnnestus: %s</string>
|
|
||||||
<string name="app_profile_template_edit">Muuda malli</string>
|
|
||||||
<string name="settings_profile_template">Rakenduseprofiili mall</string>
|
|
||||||
<string name="app_profile_template_id">ID</string>
|
|
||||||
<string name="app_profile_template_readonly">Vaid lugemiseks</string>
|
|
||||||
<string name="app_profile_template_id_exist">Malli ID juba eksisteerib!</string>
|
|
||||||
<string name="app_profile_export_to_clipboard">Ekspordi lõikelauale</string>
|
|
||||||
<string name="app_profile_template_sync">Sünkrooni võrgumallid</string>
|
|
||||||
<string name="module_changelog_failed">Muudatuste logi hankimine ebaõnnestus: %s</string>
|
|
||||||
<string name="home">Kodu</string>
|
|
||||||
<string name="home_click_to_install">Klõpsa paigaldamiseks</string>
|
|
||||||
<string name="home_not_installed">Pole paigaldatud</string>
|
|
||||||
<string name="home_unsupported">Mittetoetatud</string>
|
|
||||||
<string name="home_superuser_count">Superkasutajaid: %d</string>
|
|
||||||
<string name="home_unsupported_reason">KernelSU toetab hetkel vaid GSI tuumasid</string>
|
|
||||||
<string name="home_selinux_status">SELinuxi olek</string>
|
<string name="home_selinux_status">SELinuxi olek</string>
|
||||||
<string name="selinux_status_disabled">Keelatud</string>
|
<string name="selinux_status_disabled">Keelatud</string>
|
||||||
<string name="selinux_status_enforcing">Jõustav</string>
|
<string name="selinux_status_enforcing">Jõustav</string>
|
||||||
|
<string name="selinux_status_permissive">Lubav</string>
|
||||||
<string name="selinux_status_unknown">Teadmata</string>
|
<string name="selinux_status_unknown">Teadmata</string>
|
||||||
<string name="superuser">Superkasutaja</string>
|
<string name="superuser">Superkasutaja</string>
|
||||||
|
<string name="module_failed_to_enable">Mooduli lubamine ebaõnnestus: %s</string>
|
||||||
<string name="module_failed_to_disable">Mooduli keelamine ebaõnnestus: %s</string>
|
<string name="module_failed_to_disable">Mooduli keelamine ebaõnnestus: %s</string>
|
||||||
|
<string name="module_empty">Mooduleid pole paigaldatud</string>
|
||||||
<string name="module">Moodul</string>
|
<string name="module">Moodul</string>
|
||||||
<string name="reboot_bootloader">Taaskäivita käivituslaadurisse</string>
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
<string name="uninstall">Eemalda</string>
|
<string name="uninstall">Eemalda</string>
|
||||||
<string name="install">Paigalda</string>
|
<string name="restore">Restore</string>
|
||||||
<string name="about">Teave</string>
|
|
||||||
<string name="module_install">Paigalda</string>
|
<string name="module_install">Paigalda</string>
|
||||||
|
<string name="install">Paigalda</string>
|
||||||
|
<string name="reboot">Taaskäivita</string>
|
||||||
<string name="settings">Seaded</string>
|
<string name="settings">Seaded</string>
|
||||||
<string name="reboot_userspace">Pehme taaskäivitus</string>
|
<string name="reboot_userspace">Pehme taaskäivitus</string>
|
||||||
|
<string name="reboot_recovery">Taaskäivita taastusesse</string>
|
||||||
|
<string name="reboot_bootloader">Taaskäivita käivituslaadurisse</string>
|
||||||
<string name="reboot_download">Taaskäivita allalaadimisrežiimi</string>
|
<string name="reboot_download">Taaskäivita allalaadimisrežiimi</string>
|
||||||
<string name="reboot_edl">Taaskäivita EDL-i</string>
|
<string name="reboot_edl">Taaskäivita EDL-i</string>
|
||||||
<string name="refresh">Värskenda</string>
|
<string name="about">Teave</string>
|
||||||
<string name="module_author">Autor</string>
|
<string name="module_uninstall_confirm">Kas soovid kindlasti eemaldada mooduli %s?</string>
|
||||||
|
<string name="module_uninstall_success">%s eemaldatud</string>
|
||||||
<string name="module_uninstall_failed">Eemaldamine ebaõnnestus: %s</string>
|
<string name="module_uninstall_failed">Eemaldamine ebaõnnestus: %s</string>
|
||||||
<string name="module_version">Versioon</string>
|
<string name="module_version">Versioon</string>
|
||||||
|
<string name="module_author">Autor</string>
|
||||||
|
<string name="refresh">Värskenda</string>
|
||||||
<string name="show_system_apps">Kuva süsteemirakendused</string>
|
<string name="show_system_apps">Kuva süsteemirakendused</string>
|
||||||
<string name="hide_system_apps">Peida süsteemirakendused</string>
|
<string name="hide_system_apps">Peida süsteemirakendused</string>
|
||||||
|
<string name="send_log">Saada logid</string>
|
||||||
|
<string name="safe_mode">Turvarežiim</string>
|
||||||
|
<string name="reboot_to_apply">Muudatuste rakendamiseks taaskäivita</string>
|
||||||
<string name="module_magisk_conflict">Moodulid pole saadaval Magiski konflikti tõttu!</string>
|
<string name="module_magisk_conflict">Moodulid pole saadaval Magiski konflikti tõttu!</string>
|
||||||
|
<string name="home_learn_kernelsu">Õpi KernelSUd</string>
|
||||||
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
<string name="home_click_to_learn_kernelsu">Õpi KernelSUd paigaldama ja mooduleid kasutama</string>
|
<string name="home_click_to_learn_kernelsu">Õpi KernelSUd paigaldama ja mooduleid kasutama</string>
|
||||||
<string name="home_support_title">Toeta meid</string>
|
<string name="home_support_title">Toeta meid</string>
|
||||||
<string name="profile_groups">Grupid</string>
|
|
||||||
<string name="home_support_content">KernelSU on, ja alati jääb, tasuta ning avatud lähtekoodiga kättesaadavaks. Sellegipoolest võid sa näidata, et hoolid, ning teha annetuse.</string>
|
<string name="home_support_content">KernelSU on, ja alati jääb, tasuta ning avatud lähtekoodiga kättesaadavaks. Sellegipoolest võid sa näidata, et hoolid, ning teha annetuse.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
|
<string name="profile_default">Vaikimisi</string>
|
||||||
<string name="profile_template">Mall</string>
|
<string name="profile_template">Mall</string>
|
||||||
<string name="profile_name">Profiili nimi</string>
|
|
||||||
<string name="profile_custom">Kohandatud</string>
|
<string name="profile_custom">Kohandatud</string>
|
||||||
|
<string name="profile_name">Profiili nimi</string>
|
||||||
|
<string name="profile_namespace">Haagi nimeruum</string>
|
||||||
<string name="profile_namespace_inherited">Päritud</string>
|
<string name="profile_namespace_inherited">Päritud</string>
|
||||||
<string name="profile_namespace_global">Globaalne</string>
|
<string name="profile_namespace_global">Globaalne</string>
|
||||||
<string name="profile_namespace_individual">Individuaalne</string>
|
<string name="profile_namespace_individual">Individuaalne</string>
|
||||||
|
<string name="profile_groups">Grupid</string>
|
||||||
<string name="profile_capabilities">Võimekused</string>
|
<string name="profile_capabilities">Võimekused</string>
|
||||||
<string name="app_profile_template_id_invalid">Sobimatu malli ID</string>
|
|
||||||
<string name="profile_selinux_context">SELinux kontekst</string>
|
<string name="profile_selinux_context">SELinux kontekst</string>
|
||||||
|
<string name="profile_umount_modules">Lahtihaagitud moodulid</string>
|
||||||
|
<string name="failed_to_update_app_profile">Rakenduseprofiili uuendamine %s jaoks ebaõnnestus</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
|
<string name="settings_umount_modules_default">Haagi moodulid vaikimisi lahti</string>
|
||||||
|
<string name="settings_umount_modules_default_summary">Globaalne vaikeväärtus \"Lahtihaagitud moodulitele\" rakenduseprofiilis. Lubamisel eemaldab see kõik moodulite süsteemimuudatused rakendustele, millel ei ole profiili määratud.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
|
<string name="profile_umount_modules_summary">Selle valiku lubamine lubab KernelSU-l taastada selle rakenduse moodulite poolt mistahes muudetud faile.</string>
|
||||||
<string name="profile_selinux_domain">Domeen</string>
|
<string name="profile_selinux_domain">Domeen</string>
|
||||||
<string name="launch_app">Käivita</string>
|
|
||||||
<string name="force_stop_app">Sundpeata</string>
|
|
||||||
<string name="profile_selinux_rules">Reeglid</string>
|
<string name="profile_selinux_rules">Reeglid</string>
|
||||||
<string name="module_update">Uuenda</string>
|
<string name="module_update">Uuenda</string>
|
||||||
<string name="module_downloading">Mooduli allalaadimine: %s</string>
|
<string name="module_downloading">Mooduli allalaadimine: %s</string>
|
||||||
<string name="new_version_available" formatted="false">Uus versioon %s on saadaval, klõpsa täiendamiseks.</string>
|
<string name="module_start_downloading">Allalaadimise alustamine: %s</string>
|
||||||
|
<string name="new_version_available">Uus versioon %s on saadaval, klõpsa täiendamiseks.</string>
|
||||||
|
<string name="launch_app">Käivita</string>
|
||||||
|
<string name="force_stop_app" formatted="false">Sundpeata</string>
|
||||||
<string name="restart_app">Taaskäivita</string>
|
<string name="restart_app">Taaskäivita</string>
|
||||||
|
<string name="failed_to_update_sepolicy">SELinux reeglite uuendamine ebaõnnestus: %s</string>
|
||||||
<string name="module_changelog">Muudatuste logi</string>
|
<string name="module_changelog">Muudatuste logi</string>
|
||||||
|
<string name="settings_profile_template">Rakenduseprofiili mall</string>
|
||||||
|
<string name="settings_profile_template_summary">Halda kohalikke ja võrgusolevaid rakenduseprofiili malle</string>
|
||||||
|
<string name="app_profile_template_create">Loo mall</string>
|
||||||
|
<string name="app_profile_template_edit">Muuda malli</string>
|
||||||
|
<string name="app_profile_template_id">ID</string>
|
||||||
|
<string name="app_profile_template_id_invalid">Sobimatu malli ID</string>
|
||||||
<string name="app_profile_template_name">Nimi</string>
|
<string name="app_profile_template_name">Nimi</string>
|
||||||
<string name="app_profile_template_description">Kirjeldus</string>
|
<string name="app_profile_template_description">Kirjeldus</string>
|
||||||
<string name="app_profile_template_import_success">Edukalt imporditud</string>
|
|
||||||
<string name="app_profile_template_save">Salvesta</string>
|
<string name="app_profile_template_save">Salvesta</string>
|
||||||
<string name="app_profile_template_import_empty">Lõikelaud on tühi!</string>
|
|
||||||
<string name="app_profile_template_delete">Kustuta</string>
|
<string name="app_profile_template_delete">Kustuta</string>
|
||||||
<string name="app_profile_template_view">Vaata malli</string>
|
<string name="app_profile_template_view">Vaata malli</string>
|
||||||
|
<string name="app_profile_template_readonly">Vaid lugemiseks</string>
|
||||||
|
<string name="app_profile_template_id_exist">Malli ID juba eksisteerib!</string>
|
||||||
<string name="app_profile_import_export">Impordi/ekspordi</string>
|
<string name="app_profile_import_export">Impordi/ekspordi</string>
|
||||||
<string name="app_profile_import_from_clipboard">Impordi lõikelaualt</string>
|
<string name="app_profile_import_from_clipboard">Impordi lõikelaualt</string>
|
||||||
<string name="app_profile_template_save_failed">Malli salvestamine ebaõnnestus</string>
|
<string name="app_profile_export_to_clipboard">Ekspordi lõikelauale</string>
|
||||||
<string name="app_profile_template_create">Loo mall</string>
|
|
||||||
<string name="settings_profile_template_summary">Halda kohalikke ja võrgusolevaid rakenduseprofiili malle</string>
|
|
||||||
<string name="profile_umount_modules_summary">Selle valiku lubamine lubab KernelSU-l taastada selle rakenduse moodulite poolt mistahes muudetud faile.</string>
|
|
||||||
<string name="app_profile_template_export_empty">Ei saa eksportida, kohalikku malli ei leitud!</string>
|
<string name="app_profile_template_export_empty">Ei saa eksportida, kohalikku malli ei leitud!</string>
|
||||||
<string name="settings_umount_modules_default_summary">Globaalne vaikeväärtus \"Lahtihaagitud moodulitele\" rakenduseprofiilis. Lubamisel eemaldab see kõik moodulite süsteemimuudatused rakendustele, millel ei ole profiili määratud.</string>
|
<string name="app_profile_template_import_success">Edukalt imporditud</string>
|
||||||
<string name="enable_web_debugging_summary">Saab kasutada WebUI silumiseks, palun luba ainult vajadusel.</string>
|
<string name="app_profile_template_sync">Sünkrooni võrgumallid</string>
|
||||||
<string name="grant_root_failed">Juurkasutaja andmine ebaõnnestus!</string>
|
<string name="app_profile_template_save_failed">Malli salvestamine ebaõnnestus</string>
|
||||||
|
<string name="app_profile_template_import_empty">Lõikelaud on tühi!</string>
|
||||||
|
<string name="module_changelog_failed">Muudatuste logi hankimine ebaõnnestus: %s</string>
|
||||||
<string name="settings_check_update">Kontrolli uuendusi</string>
|
<string name="settings_check_update">Kontrolli uuendusi</string>
|
||||||
<string name="settings_check_update_summary">Rakenduse avamisel kontrolli automaatselt uuendusi</string>
|
<string name="settings_check_update_summary">Rakenduse avamisel kontrolli automaatselt uuendusi</string>
|
||||||
|
<string name="grant_root_failed">Juurkasutaja andmine ebaõnnestus!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
<string name="open">Ava</string>
|
<string name="open">Ava</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Luba WebView silumine</string>
|
<string name="enable_web_debugging">Luba WebView silumine</string>
|
||||||
<string name="save_log">Salvesta Logid</string>
|
<string name="enable_web_debugging_summary">Saab kasutada WebUI silumiseks, palun luba ainult vajadusel.</string>
|
||||||
<string name="select_kmi">Vali KMI</string>
|
<string name="direct_install">Otsene paigaldus (soovitatud)</string>
|
||||||
<string name="select_file_tip">%1$s partitsioonitõmmis on soovitatud</string>
|
<string name="select_file">Vali fail</string>
|
||||||
<string name="install_next">Edasi</string>
|
<string name="install_inactive_slot">Paigalda ebaaktiivsesse lahtrisse (pärast üle-õhu uuendust)</string>
|
||||||
<string name="install_inactive_slot_warning">Sinu seade **SUNNITAKSE** pärast taaskäivitust ebaaktiivsesse lahtrisse käivituma!\nKasuta seda valikut vaid siis, kui tegid üle-õhu uuenduse.\nJätkad?</string>
|
<string name="install_inactive_slot_warning">Sinu seade **SUNNITAKSE** pärast taaskäivitust ebaaktiivsesse lahtrisse käivituma!\nKasuta seda valikut vaid siis, kui tegid üle-õhu uuenduse.\nJätkad?</string>
|
||||||
|
<string name="install_next">Edasi</string>
|
||||||
|
<string name="select_file_tip">%1$s partitsioonitõmmis on soovitatud</string>
|
||||||
|
<string name="select_kmi">Vali KMI</string>
|
||||||
<string name="settings_uninstall">Eemalda</string>
|
<string name="settings_uninstall">Eemalda</string>
|
||||||
|
<string name="settings_uninstall_temporary">Eemalda ajutiselt</string>
|
||||||
|
<string name="settings_uninstall_permanent">Eemalda püsivalt</string>
|
||||||
|
<string name="settings_restore_stock_image">Taasta vaikimisi tõmmis</string>
|
||||||
<string name="settings_uninstall_temporary_message">Eemalda KernelSU ajutiselt, taasta pärast taaskäivitust algseisu.</string>
|
<string name="settings_uninstall_temporary_message">Eemalda KernelSU ajutiselt, taasta pärast taaskäivitust algseisu.</string>
|
||||||
<string name="settings_uninstall_permanent_message">KernelSU eemaldamine (juurkasutaja ja kõik moodulid) täielikult ja püsivalt.</string>
|
<string name="settings_uninstall_permanent_message">KernelSU eemaldamine (juurkasutaja ja kõik moodulid) täielikult ja püsivalt.</string>
|
||||||
<string name="settings_restore_stock_image_message">Taasta tehase-vaiketõmmis (kui varundus eksisteerib), tavaliselt kasutatakse enne üle-õhu uuendust; kui soovid KernelSU-d eemaldada, palun kasuta \"Eemalda püsivalt\".</string>
|
<string name="settings_restore_stock_image_message">Taasta tehase-vaiketõmmis (kui varundus eksisteerib), tavaliselt kasutatakse enne üle-õhu uuendust; kui soovid KernelSU-d eemaldada, palun kasuta \"Eemalda püsivalt\".</string>
|
||||||
@@ -118,10 +134,238 @@
|
|||||||
<string name="flash_success">Välgutamine õnnestus</string>
|
<string name="flash_success">Välgutamine õnnestus</string>
|
||||||
<string name="flash_failed">Välgutamine ebaõnnestus</string>
|
<string name="flash_failed">Välgutamine ebaõnnestus</string>
|
||||||
<string name="selected_lkm">Valitud LKM: %s</string>
|
<string name="selected_lkm">Valitud LKM: %s</string>
|
||||||
<string name="direct_install">Otsene paigaldus (soovitatud)</string>
|
<string name="save_log">Salvesta Logid</string>
|
||||||
<string name="select_file">Vali fail</string>
|
<string name="log_saved">Logs saved</string>
|
||||||
<string name="install_inactive_slot">Paigalda ebaaktiivsesse lahtrisse (pärast üle-õhu uuendust)</string>
|
<string name="status_supported">Supported</string>
|
||||||
<string name="settings_uninstall_temporary">Eemalda ajutiselt</string>
|
<string name="status_not_supported">Not Supported</string>
|
||||||
<string name="settings_uninstall_permanent">Eemalda püsivalt</string>
|
<string name="status_unknown">Unknown</string>
|
||||||
<string name="settings_restore_stock_image">Taasta vaikimisi tõmmis</string>
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
<string name="home_unsupported">پشتیبانی نشده</string>
|
<string name="home_unsupported">پشتیبانی نشده</string>
|
||||||
<string name="home_unsupported_reason">کرنل اس یو فقط هسته های gki را پشتیبانی میکند</string>
|
<string name="home_unsupported_reason">کرنل اس یو فقط هسته های gki را پشتیبانی میکند</string>
|
||||||
<string name="home_kernel">هسته</string>
|
<string name="home_kernel">هسته</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">نسخه برنامه</string>
|
<string name="home_manager_version">نسخه برنامه</string>
|
||||||
<string name="home_fingerprint">اثرانگشت</string>
|
<string name="home_fingerprint">اثرانگشت</string>
|
||||||
<string name="home_selinux_status">وضعیت SELinux</string>
|
<string name="home_selinux_status">وضعیت SELinux</string>
|
||||||
@@ -22,7 +25,10 @@
|
|||||||
<string name="module_failed_to_disable">غیرفعال کردن ماژول ناموفق بود: %s</string>
|
<string name="module_failed_to_disable">غیرفعال کردن ماژول ناموفق بود: %s</string>
|
||||||
<string name="module_empty">هیچ ماژولی نصب نشده است</string>
|
<string name="module_empty">هیچ ماژولی نصب نشده است</string>
|
||||||
<string name="module">ماژول</string>
|
<string name="module">ماژول</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
<string name="uninstall">لغو نصب</string>
|
<string name="uninstall">لغو نصب</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
<string name="module_install">نصب</string>
|
<string name="module_install">نصب</string>
|
||||||
<string name="install">نصب</string>
|
<string name="install">نصب</string>
|
||||||
<string name="reboot">راه اندازی دوباره</string>
|
<string name="reboot">راه اندازی دوباره</string>
|
||||||
@@ -50,6 +56,7 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">یاد بگیرید چگونه از کرنل اس یو و ماژول ها استفاده کنید</string>
|
<string name="home_click_to_learn_kernelsu">یاد بگیرید چگونه از کرنل اس یو و ماژول ها استفاده کنید</string>
|
||||||
<string name="home_support_title">از ما حمایت کنید</string>
|
<string name="home_support_title">از ما حمایت کنید</string>
|
||||||
<string name="home_support_content">KernelSU رایگان است و همیشه خواهد بود و منبع باز است. با این حال، می توانید با اهدای کمک مالی به ما نشان دهید که برایتان مهم است.</string>
|
<string name="home_support_content">KernelSU رایگان است و همیشه خواهد بود و منبع باز است. با این حال، می توانید با اهدای کمک مالی به ما نشان دهید که برایتان مهم است.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
<string name="profile_default">پیشفرض</string>
|
<string name="profile_default">پیشفرض</string>
|
||||||
<string name="profile_template">قالب</string>
|
<string name="profile_template">قالب</string>
|
||||||
<string name="profile_custom">شخصی سازی شده</string>
|
<string name="profile_custom">شخصی سازی شده</string>
|
||||||
@@ -58,6 +65,307 @@
|
|||||||
<string name="profile_namespace_inherited">اثر گرفته</string>
|
<string name="profile_namespace_inherited">اثر گرفته</string>
|
||||||
<string name="profile_namespace_global">گلوبال</string>
|
<string name="profile_namespace_global">گلوبال</string>
|
||||||
<string name="profile_namespace_individual">تکی</string>
|
<string name="profile_namespace_individual">تکی</string>
|
||||||
|
<string name="profile_groups">Groups</string>
|
||||||
|
<string name="profile_capabilities">Capabilities</string>
|
||||||
|
<string name="profile_selinux_context">SELinux context</string>
|
||||||
<string name="profile_umount_modules">جداکردن ماژول ها</string>
|
<string name="profile_umount_modules">جداکردن ماژول ها</string>
|
||||||
|
<string name="failed_to_update_app_profile">Failed to update App Profile for %s</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
|
<string name="settings_umount_modules_default">Umount modules by default</string>
|
||||||
|
<string name="settings_umount_modules_default_summary">The global default value for \"Umount modules\" in App Profile. If enabled, it will remove all module modifications to the system for apps that don\'t have a profile set.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
|
<string name="profile_umount_modules_summary">Enabling this option will allow KernelSU to restore any modified files by the modules for this app.</string>
|
||||||
|
<string name="profile_selinux_domain">Domain</string>
|
||||||
|
<string name="profile_selinux_rules">Rules</string>
|
||||||
|
<string name="module_update">Update</string>
|
||||||
|
<string name="module_downloading">Downloading module: %s</string>
|
||||||
|
<string name="module_start_downloading">Start downloading: %s</string>
|
||||||
|
<string name="new_version_available">New version %s is available, click to upgrade.</string>
|
||||||
|
<string name="launch_app">Launch</string>
|
||||||
|
<string name="force_stop_app" formatted="false">Force stop</string>
|
||||||
|
<string name="restart_app">Restart</string>
|
||||||
|
<string name="failed_to_update_sepolicy">Failed to update SELinux rules for %s</string>
|
||||||
|
<string name="module_changelog">Changelog</string>
|
||||||
|
<string name="settings_profile_template">App Profile Template</string>
|
||||||
|
<string name="settings_profile_template_summary">Manage local and online template of App Profile</string>
|
||||||
|
<string name="app_profile_template_create">Create template</string>
|
||||||
|
<string name="app_profile_template_edit">Edit template</string>
|
||||||
|
<string name="app_profile_template_id">ID</string>
|
||||||
|
<string name="app_profile_template_id_invalid">Invalid template ID</string>
|
||||||
|
<string name="app_profile_template_name">Name</string>
|
||||||
|
<string name="app_profile_template_description">Description</string>
|
||||||
|
<string name="app_profile_template_save">Save</string>
|
||||||
|
<string name="app_profile_template_delete">Delete</string>
|
||||||
|
<string name="app_profile_template_view">View template</string>
|
||||||
|
<string name="app_profile_template_readonly">Read only</string>
|
||||||
|
<string name="app_profile_template_id_exist">Template ID already exists!</string>
|
||||||
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Import from clipboard</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Export to clipboard</string>
|
||||||
|
<string name="app_profile_template_export_empty">Cannot find local template to export!</string>
|
||||||
|
<string name="app_profile_template_import_success">Imported successfully</string>
|
||||||
|
<string name="app_profile_template_sync">Sync online templates</string>
|
||||||
|
<string name="app_profile_template_save_failed">Failed to save template</string>
|
||||||
|
<string name="app_profile_template_import_empty">Clipboard is empty!</string>
|
||||||
|
<string name="module_changelog_failed">Fetch changelog failed: %s</string>
|
||||||
|
<string name="settings_check_update">Check update</string>
|
||||||
|
<string name="settings_check_update_summary">Automatically check for updates when opening the app</string>
|
||||||
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
|
<string name="select_file">Select a image that needs to be patched</string>
|
||||||
|
<string name="install_inactive_slot">Install to inactive slot (After OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
|
||||||
|
<string name="install_next">Next</string>
|
||||||
|
<string name="select_file_tip">%1$s partition image is recommended</string>
|
||||||
|
<string name="select_kmi">Select KMI</string>
|
||||||
|
<string name="settings_uninstall">Uninstall</string>
|
||||||
|
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
||||||
|
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
||||||
|
<string name="settings_restore_stock_image">Restore stock image</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
||||||
|
<string name="flashing">Flashing</string>
|
||||||
|
<string name="flash_success">Flash success</string>
|
||||||
|
<string name="flash_failed">Flash failed</string>
|
||||||
|
<string name="selected_lkm">Selected LKM: %s</string>
|
||||||
<string name="save_log">ذخیره گزارشها</string>
|
<string name="save_log">ذخیره گزارشها</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,51 +1,83 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="home">Home</string>
|
||||||
|
<string name="home_not_installed">Hindi naka-install</string>
|
||||||
|
<string name="home_click_to_install">Pindutin para mag-install</string>
|
||||||
|
<string name="home_working">Gumagana</string>
|
||||||
|
<string name="home_working_version">Bersyon: %d</string>
|
||||||
|
<string name="home_superuser_count">Superusers: %d</string>
|
||||||
|
<string name="home_module_count">Mga Modyul: %d</string>
|
||||||
|
<string name="home_unsupported">Hindi Suportado</string>
|
||||||
|
<string name="home_unsupported_reason">Sinusuportahan lang ng KernelSU ang mga kernel ng GKI ngayon</string>
|
||||||
|
<string name="home_kernel">Kernel version</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
|
<string name="home_manager_version">Bersyon ng Manager</string>
|
||||||
|
<string name="home_fingerprint">Fingerprint</string>
|
||||||
<string name="home_selinux_status">Katayuan ng SELinux</string>
|
<string name="home_selinux_status">Katayuan ng SELinux</string>
|
||||||
<string name="selinux_status_disabled">Hindi pinagana</string>
|
<string name="selinux_status_disabled">Hindi pinagana</string>
|
||||||
<string name="selinux_status_enforcing">Enforcing</string>
|
<string name="selinux_status_enforcing">Enforcing</string>
|
||||||
<string name="selinux_status_permissive">Permissive</string>
|
<string name="selinux_status_permissive">Permissive</string>
|
||||||
<string name="home_not_installed">Hindi naka-install</string>
|
|
||||||
<string name="home">Home</string>
|
|
||||||
<string name="home_click_to_install">Pindutin para mag-install</string>
|
|
||||||
<string name="home_working">Gumagana</string>
|
|
||||||
<string name="home_working_version">Bersyon: %d</string>
|
|
||||||
<string name="selinux_status_unknown">Hindi matukoy</string>
|
<string name="selinux_status_unknown">Hindi matukoy</string>
|
||||||
<string name="home_module_count">Mga Modyul: %d</string>
|
<string name="superuser">Superuser</string>
|
||||||
<string name="home_unsupported">Hindi Suportado</string>
|
|
||||||
<string name="home_unsupported_reason">Sinusuportahan lang ng KernelSU ang mga kernel ng GKI ngayon</string>
|
|
||||||
<string name="module_failed_to_enable">Nabigong paganahin ang modyul: %s</string>
|
<string name="module_failed_to_enable">Nabigong paganahin ang modyul: %s</string>
|
||||||
<string name="module_failed_to_disable">Nabigong i-disable ang modyul: %s</string>
|
<string name="module_failed_to_disable">Nabigong i-disable ang modyul: %s</string>
|
||||||
<string name="module_empty">Walang naka-install na modyul</string>
|
<string name="module_empty">Walang naka-install na modyul</string>
|
||||||
<string name="module">Modyul</string>
|
<string name="module">Modyul</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
|
<string name="uninstall">I-uninstall</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
<string name="module_install">I-install</string>
|
<string name="module_install">I-install</string>
|
||||||
<string name="install">I-install</string>
|
<string name="install">I-install</string>
|
||||||
<string name="reboot">I-reboot</string>
|
<string name="reboot">I-reboot</string>
|
||||||
|
<string name="settings">Mga setting</string>
|
||||||
<string name="reboot_userspace">I-soft Reboot</string>
|
<string name="reboot_userspace">I-soft Reboot</string>
|
||||||
|
<string name="reboot_recovery">I-reboot sa Recovery</string>
|
||||||
|
<string name="reboot_bootloader">I-reboot sa Bootloader</string>
|
||||||
<string name="reboot_download">I-reboot sa Download</string>
|
<string name="reboot_download">I-reboot sa Download</string>
|
||||||
<string name="reboot_edl">I-reboot sa EDL</string>
|
<string name="reboot_edl">I-reboot sa EDL</string>
|
||||||
<string name="about">Tungkol</string>
|
<string name="about">Tungkol</string>
|
||||||
<string name="module_uninstall_confirm">Sigurado ka bang gusto mong i-uninstall ang modyul %s\?</string>
|
<string name="module_uninstall_confirm">Sigurado ka bang gusto mong i-uninstall ang modyul %s\?</string>
|
||||||
<string name="module_uninstall_success">Na-uninstall ang %s</string>
|
<string name="module_uninstall_success">Na-uninstall ang %s</string>
|
||||||
<string name="module_uninstall_failed">Nabigong i-uninstall: %s</string>
|
<string name="module_uninstall_failed">Nabigong i-uninstall: %s</string>
|
||||||
|
<string name="module_version">Bersyon</string>
|
||||||
<string name="module_author">May-akda</string>
|
<string name="module_author">May-akda</string>
|
||||||
<string name="refresh">I-refresh</string>
|
<string name="refresh">I-refresh</string>
|
||||||
<string name="show_system_apps">Ipakita ang mga application ng system</string>
|
<string name="show_system_apps">Ipakita ang mga application ng system</string>
|
||||||
|
<string name="hide_system_apps">Itago ang mga application ng system</string>
|
||||||
<string name="send_log">Magpadala ng Log</string>
|
<string name="send_log">Magpadala ng Log</string>
|
||||||
|
<string name="safe_mode">Safe mode</string>
|
||||||
<string name="reboot_to_apply">I-reboot para umepekto</string>
|
<string name="reboot_to_apply">I-reboot para umepekto</string>
|
||||||
<string name="module_magisk_conflict">Hindi pinagana ang mga modyul dahil salungat ito sa Magisk!</string>
|
<string name="module_magisk_conflict">Hindi pinagana ang mga modyul dahil salungat ito sa Magisk!</string>
|
||||||
<string name="home_learn_kernelsu">Alamin ang KernelSU</string>
|
<string name="home_learn_kernelsu">Alamin ang KernelSU</string>
|
||||||
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
<string name="home_click_to_learn_kernelsu">Matutunan kung paano mag-install ng KernelSU at gumamit ng mga modyul</string>
|
<string name="home_click_to_learn_kernelsu">Matutunan kung paano mag-install ng KernelSU at gumamit ng mga modyul</string>
|
||||||
<string name="home_support_title">Suportahan Kami</string>
|
<string name="home_support_title">Suportahan Kami</string>
|
||||||
<string name="home_support_content">Ang KernelSU ay, at palaging magiging, libre, at open source. Gayunpaman, maaari mong ipakita sa amin na nagmamalasakit ka sa pamamagitan ng pagbibigay ng donasyon.</string>
|
<string name="home_support_content">Ang KernelSU ay, at palaging magiging, libre, at open source. Gayunpaman, maaari mong ipakita sa amin na nagmamalasakit ka sa pamamagitan ng pagbibigay ng donasyon.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
|
<string name="profile_default">Default</string>
|
||||||
|
<string name="profile_template">Template</string>
|
||||||
|
<string name="profile_custom">Custom</string>
|
||||||
|
<string name="profile_name">Pangalan ng profile</string>
|
||||||
<string name="profile_namespace">I-mount ang namespace</string>
|
<string name="profile_namespace">I-mount ang namespace</string>
|
||||||
|
<string name="profile_namespace_inherited">Minana</string>
|
||||||
|
<string name="profile_namespace_global">Global</string>
|
||||||
<string name="profile_namespace_individual">Indibidwal</string>
|
<string name="profile_namespace_individual">Indibidwal</string>
|
||||||
<string name="profile_groups">Mga Grupo</string>
|
<string name="profile_groups">Mga Grupo</string>
|
||||||
<string name="profile_capabilities">Mga Kakayanan</string>
|
<string name="profile_capabilities">Mga Kakayanan</string>
|
||||||
<string name="profile_selinux_context">Konteksto ng SELinux</string>
|
<string name="profile_selinux_context">Konteksto ng SELinux</string>
|
||||||
<string name="profile_umount_modules">I-unmount ang mga modyul</string>
|
<string name="profile_umount_modules">I-unmount ang mga modyul</string>
|
||||||
<string name="failed_to_update_app_profile">Nabigong i-update ang App Profile para sa %s</string>
|
<string name="failed_to_update_app_profile">Nabigong i-update ang App Profile para sa %s</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
|
<string name="settings_umount_modules_default">Umount modules by default</string>
|
||||||
|
<string name="settings_umount_modules_default_summary">Ang pangkalahatang default na halaga para sa \"Umount modules\" sa Mga Profile ng App. Kung pinagana, aalisin nito ang lahat ng mga pagbabago sa modyul sa system para sa mga aplikasyon na walang hanay ng Profile.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
<string name="profile_umount_modules_summary">Ang pagpapagana sa opsyong ito ay magbibigay-daan sa KernelSU na ibalik ang anumang binagong file ng mga modyul para sa aplikasyon na ito.</string>
|
<string name="profile_umount_modules_summary">Ang pagpapagana sa opsyong ito ay magbibigay-daan sa KernelSU na ibalik ang anumang binagong file ng mga modyul para sa aplikasyon na ito.</string>
|
||||||
|
<string name="profile_selinux_domain">Domain</string>
|
||||||
<string name="profile_selinux_rules">Mga Tuntunin</string>
|
<string name="profile_selinux_rules">Mga Tuntunin</string>
|
||||||
|
<string name="module_update">Update</string>
|
||||||
<string name="module_downloading">Nagda-download ng modyul: %s</string>
|
<string name="module_downloading">Nagda-download ng modyul: %s</string>
|
||||||
<string name="module_start_downloading">Simulan ang pag-download: %s</string>
|
<string name="module_start_downloading">Simulan ang pag-download: %s</string>
|
||||||
<string name="new_version_available">Bagong bersyon: Available ang %s, i-click upang i-download</string>
|
<string name="new_version_available">Bagong bersyon: Available ang %s, i-click upang i-download</string>
|
||||||
@@ -53,15 +85,287 @@
|
|||||||
<string name="force_stop_app" formatted="false">Pilit na I-hinto</string>
|
<string name="force_stop_app" formatted="false">Pilit na I-hinto</string>
|
||||||
<string name="restart_app">I-restart</string>
|
<string name="restart_app">I-restart</string>
|
||||||
<string name="failed_to_update_sepolicy">Nabigong i-update ang mga panuntunan ng SELinux para sa: %s</string>
|
<string name="failed_to_update_sepolicy">Nabigong i-update ang mga panuntunan ng SELinux para sa: %s</string>
|
||||||
<string name="home_manager_version">Bersyon ng Manager</string>
|
<string name="module_changelog">Changelog</string>
|
||||||
<string name="settings">Mga setting</string>
|
<string name="settings_profile_template">App Profile Template</string>
|
||||||
<string name="reboot_recovery">I-reboot sa Recovery</string>
|
<string name="settings_profile_template_summary">Manage local and online template of App Profile</string>
|
||||||
<string name="reboot_bootloader">I-reboot sa Bootloader</string>
|
<string name="app_profile_template_create">Create template</string>
|
||||||
<string name="module_version">Bersyon</string>
|
<string name="app_profile_template_edit">Edit template</string>
|
||||||
<string name="uninstall">I-uninstall</string>
|
<string name="app_profile_template_id">ID</string>
|
||||||
<string name="hide_system_apps">Itago ang mga application ng system</string>
|
<string name="app_profile_template_id_invalid">Invalid template ID</string>
|
||||||
<string name="profile_name">Pangalan ng profile</string>
|
<string name="app_profile_template_name">Name</string>
|
||||||
<string name="profile_namespace_inherited">Minana</string>
|
<string name="app_profile_template_description">Description</string>
|
||||||
<string name="settings_umount_modules_default_summary">Ang pangkalahatang default na halaga para sa \"Umount modules\" sa Mga Profile ng App. Kung pinagana, aalisin nito ang lahat ng mga pagbabago sa modyul sa system para sa mga aplikasyon na walang hanay ng Profile.</string>
|
<string name="app_profile_template_save">Save</string>
|
||||||
|
<string name="app_profile_template_delete">Delete</string>
|
||||||
|
<string name="app_profile_template_view">View template</string>
|
||||||
|
<string name="app_profile_template_readonly">Read only</string>
|
||||||
|
<string name="app_profile_template_id_exist">Template ID already exists!</string>
|
||||||
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Import from clipboard</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Export to clipboard</string>
|
||||||
|
<string name="app_profile_template_export_empty">Cannot find local template to export!</string>
|
||||||
|
<string name="app_profile_template_import_success">Imported successfully</string>
|
||||||
|
<string name="app_profile_template_sync">Sync online templates</string>
|
||||||
|
<string name="app_profile_template_save_failed">Failed to save template</string>
|
||||||
|
<string name="app_profile_template_import_empty">Clipboard is empty!</string>
|
||||||
|
<string name="module_changelog_failed">Fetch changelog failed: %s</string>
|
||||||
|
<string name="settings_check_update">Check update</string>
|
||||||
|
<string name="settings_check_update_summary">Automatically check for updates when opening the app</string>
|
||||||
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
|
<string name="select_file">Select a image that needs to be patched</string>
|
||||||
|
<string name="install_inactive_slot">Install to inactive slot (After OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
|
||||||
|
<string name="install_next">Next</string>
|
||||||
|
<string name="select_file_tip">%1$s partition image is recommended</string>
|
||||||
|
<string name="select_kmi">Select KMI</string>
|
||||||
|
<string name="settings_uninstall">Uninstall</string>
|
||||||
|
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
||||||
|
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
||||||
|
<string name="settings_restore_stock_image">Restore stock image</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
||||||
|
<string name="flashing">Flashing</string>
|
||||||
|
<string name="flash_success">Flash success</string>
|
||||||
|
<string name="flash_failed">Flash failed</string>
|
||||||
|
<string name="selected_lkm">Selected LKM: %s</string>
|
||||||
<string name="save_log">I-save ang mga Log</string>
|
<string name="save_log">I-save ang mga Log</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,110 +1,121 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="home">Accueil</string>
|
||||||
<string name="home_not_installed">Non installé</string>
|
<string name="home_not_installed">Non installé</string>
|
||||||
|
<string name="home_click_to_install">Appuyez ici pour installer</string>
|
||||||
<string name="home_working">Fonctionnel</string>
|
<string name="home_working">Fonctionnel</string>
|
||||||
<string name="home_working_version">Version : %d</string>
|
<string name="home_working_version">Version : %d</string>
|
||||||
<string name="home_superuser_count">Super-utilisateurs : %d</string>
|
<string name="home_superuser_count">Super-utilisateurs : %d</string>
|
||||||
<string name="home_module_count">Modules : %d</string>
|
<string name="home_module_count">Modules : %d</string>
|
||||||
|
<string name="home_unsupported">Non pris en charge</string>
|
||||||
<string name="home_unsupported_reason">KernelSU ne prend désormais en charge que les noyaux GKI</string>
|
<string name="home_unsupported_reason">KernelSU ne prend désormais en charge que les noyaux GKI</string>
|
||||||
<string name="home_kernel">Noyau</string>
|
<string name="home_kernel">Noyau</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">Version SuSFS</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS Su</string>
|
||||||
|
<string name="home_manager_version">Version du gestionnaire</string>
|
||||||
<string name="home_fingerprint">Empreinte digitale</string>
|
<string name="home_fingerprint">Empreinte digitale</string>
|
||||||
<string name="home_selinux_status">Mode SELinux</string>
|
<string name="home_selinux_status">Mode SELinux</string>
|
||||||
<string name="selinux_status_disabled">Désactivé</string>
|
<string name="selinux_status_disabled">Désactivé</string>
|
||||||
|
<string name="selinux_status_enforcing">Enforcing</string>
|
||||||
<string name="selinux_status_permissive">Permissive</string>
|
<string name="selinux_status_permissive">Permissive</string>
|
||||||
<string name="selinux_status_unknown">Inconnu</string>
|
<string name="selinux_status_unknown">Inconnu</string>
|
||||||
<string name="superuser">Super-utilisateur</string>
|
<string name="superuser">Super-utilisateur</string>
|
||||||
<string name="module_empty">Aucun module installé</string>
|
|
||||||
<string name="home">Accueil</string>
|
|
||||||
<string name="home_click_to_install">Appuyez ici pour installer</string>
|
|
||||||
<string name="home_unsupported">Non pris en charge</string>
|
|
||||||
<string name="module_uninstall_failed">Échec de la désinstallation : %s</string>
|
|
||||||
<string name="module_version">Version</string>
|
|
||||||
<string name="home_manager_version">Version du gestionnaire</string>
|
|
||||||
<string name="selinux_status_enforcing">Enforcing</string>
|
|
||||||
<string name="module_failed_to_enable">Échec de l\'activation du module : %s</string>
|
<string name="module_failed_to_enable">Échec de l\'activation du module : %s</string>
|
||||||
<string name="module">Modules</string>
|
|
||||||
<string name="uninstall">Désinstaller</string>
|
|
||||||
<string name="module_install">Installer</string>
|
|
||||||
<string name="module_failed_to_disable">Échec de la désactivation du module : %s</string>
|
<string name="module_failed_to_disable">Échec de la désactivation du module : %s</string>
|
||||||
<string name="reboot">Redémarrer</string>
|
<string name="module_empty">Aucun module installé</string>
|
||||||
|
<string name="module">Modules</string>
|
||||||
|
<string name="module_sort_action_first">Trier par action</string>
|
||||||
|
<string name="module_sort_enabled_first">Trier par activé</string>
|
||||||
|
<string name="uninstall">Désinstaller</string>
|
||||||
|
<string name="restore">Restaure</string>
|
||||||
|
<string name="module_install">Installer</string>
|
||||||
<string name="install">Installer</string>
|
<string name="install">Installer</string>
|
||||||
|
<string name="reboot">Redémarrer</string>
|
||||||
<string name="settings">Paramètres</string>
|
<string name="settings">Paramètres</string>
|
||||||
<string name="reboot_bootloader">Redémarrer en mode bootloader</string>
|
|
||||||
<string name="reboot_userspace">Redémarrage progressif</string>
|
<string name="reboot_userspace">Redémarrage progressif</string>
|
||||||
<string name="reboot_recovery">Redémarrer en mode de récupération</string>
|
<string name="reboot_recovery">Redémarrer en mode de récupération</string>
|
||||||
|
<string name="reboot_bootloader">Redémarrer en mode bootloader</string>
|
||||||
|
<string name="reboot_download">Redémarrer en mode de téléchargement</string>
|
||||||
<string name="reboot_edl">Redémarrer en mode EDL</string>
|
<string name="reboot_edl">Redémarrer en mode EDL</string>
|
||||||
<string name="about">À propos</string>
|
<string name="about">À propos</string>
|
||||||
<string name="module_uninstall_success">%s a été désinstallé</string>
|
|
||||||
<string name="reboot_download">Redémarrer en mode de téléchargement</string>
|
|
||||||
<string name="module_author">Auteur</string>
|
|
||||||
<string name="module_uninstall_confirm">Êtes-vous sûr(e) de vouloir désinstaller le module %s \?</string>
|
<string name="module_uninstall_confirm">Êtes-vous sûr(e) de vouloir désinstaller le module %s \?</string>
|
||||||
<string name="home_learn_kernelsu">Découvrir KernelSU</string>
|
<string name="module_uninstall_success">%s a été désinstallé</string>
|
||||||
|
<string name="module_uninstall_failed">Échec de la désinstallation : %s</string>
|
||||||
|
<string name="module_version">Version</string>
|
||||||
|
<string name="module_author">Auteur</string>
|
||||||
<string name="refresh">Rafraîchir</string>
|
<string name="refresh">Rafraîchir</string>
|
||||||
<string name="show_system_apps">Afficher les applications système</string>
|
<string name="show_system_apps">Afficher les applications système</string>
|
||||||
<string name="hide_system_apps">Masquer les applications système</string>
|
<string name="hide_system_apps">Masquer les applications système</string>
|
||||||
<string name="safe_mode">Mode sans échec</string>
|
|
||||||
<string name="send_log">Envoyer les journaux</string>
|
<string name="send_log">Envoyer les journaux</string>
|
||||||
|
<string name="safe_mode">Mode sans échec</string>
|
||||||
<string name="reboot_to_apply">Redémarrez pour appliquer les modifications</string>
|
<string name="reboot_to_apply">Redémarrez pour appliquer les modifications</string>
|
||||||
<string name="module_magisk_conflict">Les modules sont indisponibles en raison d\'un conflit avec Magisk !</string>
|
<string name="module_magisk_conflict">Les modules sont indisponibles en raison d\'un conflit avec Magisk !</string>
|
||||||
|
<string name="home_learn_kernelsu">Découvrir KernelSU</string>
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
<string name="home_support_title">Soutenez-nous</string>
|
|
||||||
<string name="home_click_to_learn_kernelsu">Découvrez comment installer KernelSU et utiliser les modules</string>
|
<string name="home_click_to_learn_kernelsu">Découvrez comment installer KernelSU et utiliser les modules</string>
|
||||||
|
<string name="home_support_title">Soutenez-nous</string>
|
||||||
<string name="home_support_content">KernelSU est, et restera toujours, gratuit et open source. Vous pouvez cependant nous témoigner de votre soutien en nous faisant un don.</string>
|
<string name="home_support_content">KernelSU est, et restera toujours, gratuit et open source. Vous pouvez cependant nous témoigner de votre soutien en nous faisant un don.</string>
|
||||||
<string name="profile_template">Modèle</string>
|
<string name="about_source_code"><![CDATA[Voir le code source à %1$s<br/>Rejoignez notre canal %2$s]]></string>
|
||||||
<string name="profile_default">Par défaut</string>
|
<string name="profile_default">Par défaut</string>
|
||||||
|
<string name="profile_template">Modèle</string>
|
||||||
<string name="profile_custom">Personnalisé</string>
|
<string name="profile_custom">Personnalisé</string>
|
||||||
<string name="profile_name">Nom du profil</string>
|
<string name="profile_name">Nom du profil</string>
|
||||||
<string name="profile_namespace">Espace de noms de montage</string>
|
<string name="profile_namespace">Espace de noms de montage</string>
|
||||||
<string name="profile_namespace_inherited">Hérité</string>
|
<string name="profile_namespace_inherited">Hérité</string>
|
||||||
<string name="profile_namespace_individual">Individuel</string>
|
|
||||||
<string name="profile_selinux_context">Contexte SELinux</string>
|
|
||||||
<string name="profile_namespace_global">Global</string>
|
<string name="profile_namespace_global">Global</string>
|
||||||
|
<string name="profile_namespace_individual">Individuel</string>
|
||||||
<string name="profile_groups">Groupes</string>
|
<string name="profile_groups">Groupes</string>
|
||||||
<string name="profile_capabilities">Capacités</string>
|
<string name="profile_capabilities">Capacités</string>
|
||||||
|
<string name="profile_selinux_context">Contexte SELinux</string>
|
||||||
<string name="profile_umount_modules">Démonter les modules</string>
|
<string name="profile_umount_modules">Démonter les modules</string>
|
||||||
<string name="failed_to_update_app_profile">Échec de la modification du profil d\'application de %s</string>
|
<string name="failed_to_update_app_profile">Échec de la modification du profil d\'application de %s</string>
|
||||||
<string name="profile_umount_modules_summary">L\'activation de cette option permettra à KernelSU de restaurer tous les fichiers modifiés par les modules pour cette application.</string>
|
<string name="require_kernel_version" formatted="false">La version actuelle de KernelSU (%d) est trop ancienne pour que le gestionnaire fonctionne correctement. Veuillez passer à la version %d ou à une version supérieure !</string>
|
||||||
<string name="settings_umount_modules_default">Démonter les modules par défaut</string>
|
<string name="settings_umount_modules_default">Démonter les modules par défaut</string>
|
||||||
<string name="settings_umount_modules_default_summary">Valeur globale par défaut pour l\'option \"Démonter les modules\" dans les profils d\'application. Lorsque l\'option est activée, les modifications apportées au système par les modules sont supprimées pour les applications qui n\'ont pas de profil défini.</string>
|
<string name="settings_umount_modules_default_summary">Valeur globale par défaut pour l\'option \"Démonter les modules\" dans les profils d\'application. Lorsque l\'option est activée, les modifications apportées au système par les modules sont supprimées pour les applications qui n\'ont pas de profil défini.</string>
|
||||||
|
<string name="settings_susfs_toggle">Désactiver les crochets kprobe</string>
|
||||||
|
<string name="profile_umount_modules_summary">L\'activation de cette option permettra à KernelSU de restaurer tous les fichiers modifiés par les modules pour cette application.</string>
|
||||||
<string name="profile_selinux_domain">Domaine</string>
|
<string name="profile_selinux_domain">Domaine</string>
|
||||||
<string name="profile_selinux_rules">Règles</string>
|
<string name="profile_selinux_rules">Règles</string>
|
||||||
<string name="module_update">Mettre à jour</string>
|
<string name="module_update">Mettre à jour</string>
|
||||||
<string name="module_downloading">Téléchargement du module : %s</string>
|
<string name="module_downloading">Téléchargement du module : %s</string>
|
||||||
<string name="launch_app">Lancer</string>
|
|
||||||
<string name="new_version_available">La nouvelle version %s est disponible, appuyez ici pour mettre à jour.</string>
|
|
||||||
<string name="module_start_downloading">Début du téléchargement de : %s</string>
|
<string name="module_start_downloading">Début du téléchargement de : %s</string>
|
||||||
|
<string name="new_version_available">La nouvelle version %s est disponible, appuyez ici pour mettre à jour.</string>
|
||||||
|
<string name="launch_app">Lancer</string>
|
||||||
<string name="force_stop_app" formatted="false">Forcer l\'arrêt</string>
|
<string name="force_stop_app" formatted="false">Forcer l\'arrêt</string>
|
||||||
<string name="restart_app">Relancer l\'application</string>
|
<string name="restart_app">Relancer l\'application</string>
|
||||||
<string name="failed_to_update_sepolicy">Échec de la mise à jour des règles SELinux pour : %s</string>
|
<string name="failed_to_update_sepolicy">Échec de la mise à jour des règles SELinux pour : %s</string>
|
||||||
<string name="app_profile_template_import_success">Importation réussie</string>
|
|
||||||
<string name="app_profile_export_to_clipboard">Exporter vers le presse-papiers</string>
|
|
||||||
<string name="app_profile_template_export_empty">Impossible de trouver un modèle local à exporter !</string>
|
|
||||||
<string name="app_profile_template_id_exist">L\'ID du modèle existe déjà !</string>
|
|
||||||
<string name="module_changelog">Journal des modifications</string>
|
<string name="module_changelog">Journal des modifications</string>
|
||||||
<string name="app_profile_import_from_clipboard">Importer à partir du presse-papiers</string>
|
<string name="settings_profile_template">Modèles de profils d\'application</string>
|
||||||
<string name="module_changelog_failed">Échec de récupération du journal des modifications : %s</string>
|
<string name="settings_profile_template_summary">Gérer les modèles de profils d\'application locaux et en ligne</string>
|
||||||
<string name="app_profile_template_name">Nom</string>
|
|
||||||
<string name="app_profile_template_id_invalid">ID de modèle invalide</string>
|
|
||||||
<string name="app_profile_template_sync">Synchroniser les modèles en ligne</string>
|
|
||||||
<string name="app_profile_template_create">Créer un modèle</string>
|
<string name="app_profile_template_create">Créer un modèle</string>
|
||||||
<string name="app_profile_template_readonly">Lecture seule</string>
|
|
||||||
<string name="app_profile_import_export">Importer/exporter</string>
|
|
||||||
<string name="app_profile_template_save_failed">Échec de l\'enregistrement du modèle</string>
|
|
||||||
<string name="app_profile_template_edit">Modifier le modèle</string>
|
<string name="app_profile_template_edit">Modifier le modèle</string>
|
||||||
<string name="app_profile_template_id">ID</string>
|
<string name="app_profile_template_id">ID</string>
|
||||||
<string name="settings_profile_template">Modèles de profils d\'application</string>
|
<string name="app_profile_template_id_invalid">ID de modèle invalide</string>
|
||||||
|
<string name="app_profile_template_name">Nom</string>
|
||||||
<string name="app_profile_template_description">Description</string>
|
<string name="app_profile_template_description">Description</string>
|
||||||
<string name="app_profile_template_save">Enregistrer</string>
|
<string name="app_profile_template_save">Enregistrer</string>
|
||||||
<string name="settings_profile_template_summary">Gérer les modèles de profils d\'application locaux et en ligne</string>
|
|
||||||
<string name="app_profile_template_delete">Supprimer</string>
|
<string name="app_profile_template_delete">Supprimer</string>
|
||||||
<string name="app_profile_template_import_empty">Le presse-papiers est vide !</string>
|
|
||||||
<string name="app_profile_template_view">Voir le modèle</string>
|
<string name="app_profile_template_view">Voir le modèle</string>
|
||||||
<string name="settings_check_update_summary">Vérifier automatiquement les mises à jour à l\'ouverture de l\'application</string>
|
<string name="app_profile_template_readonly">Lecture seule</string>
|
||||||
|
<string name="app_profile_template_id_exist">L\'ID du modèle existe déjà !</string>
|
||||||
|
<string name="app_profile_import_export">Importer/exporter</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Importer à partir du presse-papiers</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Exporter vers le presse-papiers</string>
|
||||||
|
<string name="app_profile_template_export_empty">Impossible de trouver un modèle local à exporter !</string>
|
||||||
|
<string name="app_profile_template_import_success">Importation réussie</string>
|
||||||
|
<string name="app_profile_template_sync">Synchroniser les modèles en ligne</string>
|
||||||
|
<string name="app_profile_template_save_failed">Échec de l\'enregistrement du modèle</string>
|
||||||
|
<string name="app_profile_template_import_empty">Le presse-papiers est vide !</string>
|
||||||
|
<string name="module_changelog_failed">Échec de récupération du journal des modifications : %s</string>
|
||||||
<string name="settings_check_update">Vérifier les mises à jour</string>
|
<string name="settings_check_update">Vérifier les mises à jour</string>
|
||||||
|
<string name="settings_check_update_summary">Vérifier automatiquement les mises à jour à l\'ouverture de l\'application</string>
|
||||||
|
<string name="grant_root_failed">Échec de l\'octroi des privilèges root !</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Ouvrir</string>
|
||||||
|
<string name="close">Fermer</string>
|
||||||
<string name="enable_web_debugging">Activer le débogage WebView</string>
|
<string name="enable_web_debugging">Activer le débogage WebView</string>
|
||||||
<string name="enable_web_debugging_summary">Peut être utilisé pour déboguer WebUI. Activez uniquement cette option si nécessaire.</string>
|
<string name="enable_web_debugging_summary">Peut être utilisé pour déboguer WebUI. Activez uniquement cette option si nécessaire.</string>
|
||||||
<string name="grant_root_failed">Échec de l\'octroi des privilèges root !</string>
|
|
||||||
<string name="open">Ouvrir</string>
|
|
||||||
<string name="direct_install">Installation directe (recommandé)</string>
|
<string name="direct_install">Installation directe (recommandé)</string>
|
||||||
<string name="select_file">Sélectionner un fichier</string>
|
<string name="select_file">Sélectionner un fichier</string>
|
||||||
<string name="install_inactive_slot">Installer dans l\'emplacement inactif (après OTA)</string>
|
<string name="install_inactive_slot">Installer dans l\'emplacement inactif (après OTA)</string>
|
||||||
@@ -118,16 +129,245 @@
|
|||||||
<string name="settings_uninstall_temporary">Désinstaller temporairement</string>
|
<string name="settings_uninstall_temporary">Désinstaller temporairement</string>
|
||||||
<string name="settings_uninstall_permanent">Désinstaller définitivement</string>
|
<string name="settings_uninstall_permanent">Désinstaller définitivement</string>
|
||||||
<string name="settings_restore_stock_image">Restaurer l\'image d\'origine</string>
|
<string name="settings_restore_stock_image">Restaurer l\'image d\'origine</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Désinstaller KernelSU temporairement et rétablir l\'état original au redémarrage suivant.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Désinstallation complète et permanente de KernelSU (root et tous les modules).</string>
|
||||||
<string name="settings_restore_stock_image_message">Restaurer l\'image d\'origine d\'usine (s\'il en existe une sauvegarde). Utilisé généralement avant une mise à jour OTA ; si vous devez désinstaller KernelSU, utilisez plutôt l\'option \"Désinstaller définitivement\".</string>
|
<string name="settings_restore_stock_image_message">Restaurer l\'image d\'origine d\'usine (s\'il en existe une sauvegarde). Utilisé généralement avant une mise à jour OTA ; si vous devez désinstaller KernelSU, utilisez plutôt l\'option \"Désinstaller définitivement\".</string>
|
||||||
<string name="flashing">Flash en cours</string>
|
<string name="flashing">Flash en cours</string>
|
||||||
<string name="flash_success">Flash réussi</string>
|
<string name="flash_success">Flash réussi</string>
|
||||||
<string name="flash_failed">Échec du flash</string>
|
<string name="flash_failed">Échec du flash</string>
|
||||||
<string name="selected_lkm">LKM sélectionné : %s</string>
|
<string name="selected_lkm">LKM sélectionné : %s</string>
|
||||||
<string name="settings_uninstall_permanent_message">Désinstallation complète et permanente de KernelSU (root et tous les modules).</string>
|
|
||||||
<string name="settings_uninstall_temporary_message">Désinstaller KernelSU temporairement et rétablir l\'état original au redémarrage suivant.</string>
|
|
||||||
<string name="save_log">Enregistrer les journaux</string>
|
<string name="save_log">Enregistrer les journaux</string>
|
||||||
<string name="module_sort_action_first">Trier par action</string>
|
|
||||||
<string name="module_sort_enabled_first">Trier par activé</string>
|
|
||||||
<string name="action">Action</string>
|
|
||||||
<string name="log_saved">Journaux enregistrés</string>
|
<string name="log_saved">Journaux enregistrés</string>
|
||||||
|
<string name="status_supported">Supporté</string>
|
||||||
|
<string name="status_not_supported">Non supporté</string>
|
||||||
|
<string name="status_unknown">Inconnu</string>
|
||||||
|
<string name="sus_su_mode">Mode Sus</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirmer l\'installation du module %1$s?</string>
|
||||||
|
<string name="unknown_module">module inconnu</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirmer la restauration</string>
|
||||||
|
<string name="restore_confirm_message">Cette opération va écraser les modules existants. Continuer ?</string>
|
||||||
|
<string name="confirm">Confirmer</string>
|
||||||
|
<string name="cancel">Annuler</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Sauvegarde réussie (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Échec de la sauvegarde : %1$s</string>
|
||||||
|
<string name="backup_modules">modules de sauvegarde</string>
|
||||||
|
<string name="restore_modules">Restaurer les modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Succès de la sauvegarde, redémarrer</string>
|
||||||
|
<string name="restore_failed">Échec de la restauration : %1$s</string>
|
||||||
|
<string name="restart_now">Redémarrer</string>
|
||||||
|
<string name="unknown_error">Erreur inconnue</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">L\'exécution de la commande a échoué : %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Sauvegarde de la liste blanche réussie</string>
|
||||||
|
<string name="allowlist_backup_failed">La sauvegarde de la liste d\'autorisations a échoué : %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirmer la restauration de la liste blanche</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">Cette opération écrasera la liste blanche actuelle. Continuer ?</string>
|
||||||
|
<string name="allowlist_restore_success">Liste blanche restaurée avec succès</string>
|
||||||
|
<string name="allowlist_restore_failed">La restauration de la liste d\'autorisations a échoué : %1$s</string>
|
||||||
|
<string name="backup_allowlist">Sauvegarder la liste blanche</string>
|
||||||
|
<string name="restore_allowlist">Restaurer la liste blanche</string>
|
||||||
|
<string name="settings_custom_background">Arrière-plan personnalisé de l\'application</string>
|
||||||
|
<string name="settings_custom_background_summary">Image as arrière-plan</string>
|
||||||
|
<string name="settings_card_alpha">Transparence de la barre de navigation</string>
|
||||||
|
<string name="settings_restore_default">Restaurer par défaut</string>
|
||||||
|
<string name="home_android_version">Version Android</string>
|
||||||
|
<string name="home_device_model">Modèle du téléphone</string>
|
||||||
|
<string name="su_not_allowed">Donner un super-utilisateur à %s n\'est pas autorisé</string>
|
||||||
|
<string name="settings_disable_su">Désactiver la compatibilité su</string>
|
||||||
|
<string name="settings_disable_su_summary">Désactiver temporairement l\'accès des applications aux privilèges root via la commande su (les processus root existants ne seront pas affectés).</string>
|
||||||
|
<string name="using_mksu_manager">Vous utilisez le gestionnaire SukiSU Beta</string>
|
||||||
|
<string name="module_install_multiple_confirm">Êtes-vous sûr de vouloir installer les modules %d sélectionnés ?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Êtes-vous sûr de vouloir installer les modules %1$d suivants ? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">Autres configurations</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Activé</string>
|
||||||
|
<string name="selinux_disabled">Désactivé</string>
|
||||||
|
<string name="simple_mode">Me simple</string>
|
||||||
|
<string name="simple_mode_summary">Masque les cartes inutiles lorsqu\'il est activé</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Masquer la version du noyau</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Masquer la version du noyau</string>
|
||||||
|
<string name="hide_other_info">Masquer les autres infos</string>
|
||||||
|
<string name="hide_other_info_summary">Masque des informations sur le nombre de super utilisateurs, de modules et de modules KPM sur la page d\'accueil</string>
|
||||||
|
<string name="hide_susfs_status">Masquer le statut SuSFS</string>
|
||||||
|
<string name="hide_susfs_status_summary">Masquer les informations de la carte de lien sur la page d\'accueil</string>
|
||||||
|
<string name="hide_link_card">Masquer le statut du lien de la carte</string>
|
||||||
|
<string name="hide_link_card_summary">Masquer les informations de la carte de lien sur la page d\'accueil</string>
|
||||||
|
<string name="theme_mode">Thème</string>
|
||||||
|
<string name="theme_follow_system">Suivre le système</string>
|
||||||
|
<string name="theme_light">Clair</string>
|
||||||
|
<string name="theme_dark">Sombre</string>
|
||||||
|
<string name="manual_hook">Crochet manuel</string>
|
||||||
|
<string name="dynamic_color_title">Couleur dynamique</string>
|
||||||
|
<string name="dynamic_color_summary">Couleurs dynamiques en utilisant des thèmes système</string>
|
||||||
|
<string name="choose_theme_color">Choisir une couleur de thème</string>
|
||||||
|
<string name="color_default">Bleu</string>
|
||||||
|
<string name="color_green">Vert</string>
|
||||||
|
<string name="color_purple">Violet</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Rose</string>
|
||||||
|
<string name="color_gray">Gris</string>
|
||||||
|
<string name="color_yellow">Jaune</string>
|
||||||
|
<string name="flash_option">Options du flash</string>
|
||||||
|
<string name="flash_option_tip">Sélectionnez le fichier à installer</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Fichier noyau AnyKernel3</string>
|
||||||
|
<string name="root_required">Nécessite les privilèges root</string>
|
||||||
|
<string name="copy_failed">Échec de la copie du fichier</string>
|
||||||
|
<string name="reboot_complete_title">Traitement terminé</string>
|
||||||
|
<string name="reboot_complete_msg">Redémarrer immédiatement ?</string>
|
||||||
|
<string name="yes">Oui</string>
|
||||||
|
<string name="no">Non</string>
|
||||||
|
<string name="failed_reboot">Échec du redémarrage</string>
|
||||||
|
<string name="batch_authorization">ePouvoir</string>
|
||||||
|
<string name="batch_cancel_authorization">retirer</string>
|
||||||
|
<string name="backup">Sauvegarder</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">Aucun module de noyau installé pour le moment</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Auteur</string>
|
||||||
|
<string name="kpm_uninstall">Désinstaller</string>
|
||||||
|
<string name="kpm_uninstall_success">Désinstallé avec succès</string>
|
||||||
|
<string name="kpm_uninstall_failed">Échec de la désinstallation : </string>
|
||||||
|
<string name="kpm_install">Installer</string>
|
||||||
|
<string name="kpm_install_success">Chargement du module kpm réussi</string>
|
||||||
|
<string name="kpm_install_failed">Le chargement du module kpm a échoué</string>
|
||||||
|
<string name="kpm_args">Paramètres</string>
|
||||||
|
<string name="kpm_control">Exécuter</string>
|
||||||
|
<string name="home_kpm_version">Version de KPM</string>
|
||||||
|
<string name="close_notice">Fermer</string>
|
||||||
|
<string name="kernel_module_notice">Les fonctions suivantes du module du noyau ont été développées par KernelPatch et modifiées pour inclure les fonctions du module du noyau de SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra attend avec impatience</string>
|
||||||
|
<string name="kpm_control_success">Succès</string>
|
||||||
|
<string name="kpm_control_failed">Echoué</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra sera une branche relativement indépendante de KSU dans le futur, mais nous apprécions toujours le KernelSU officiel, MKSU etc. pour leurs contributions!</string>
|
||||||
|
<string name="not_supported">Non pris en charge</string>
|
||||||
|
<string name="supported">Pris en charge</string>
|
||||||
|
<string name="home_kpm_module">"Nombre de modules KPM : %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Fichier KPM invalide</string>
|
||||||
|
<string name="kernel_patched">Noyau non corrigé</string>
|
||||||
|
<string name="kernel_not_enabled">Noyau non configuré</string>
|
||||||
|
<string name="custom_settings">Paramètres personnalisés</string>
|
||||||
|
<string name="kpm_install_mode">KPM Installé</string>
|
||||||
|
<string name="kpm_install_mode_load">Charger</string>
|
||||||
|
<string name="kpm_install_mode_embed">Intégrer</string>
|
||||||
|
<string name="kpm_install_mode_description">Veuillez sélectionner : %1\$s Mode d\'installation du module \n\nCharge : Chargez temporairement le module \nIntégré: Installez définitivement dans le système</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Impossible de vérifier l\'existence du fichier du module</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Impossible de vérifier si le fichier du module existe</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirmer la désinstallation.</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Désinstaller</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Annuler</string>
|
||||||
|
<string name="theme_color">Couleur du thème</string>
|
||||||
|
<string name="invalid_file_type">Type de fichier incorrect ! Veuillez sélectionner un fichier .kpm.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Désinstaller</string>
|
||||||
|
<string name="confirm_uninstall_content">Le KPM suivant sera désinstallé : %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Désactivez les crochets kprobe créés par KernelSU, en utilisant des crochets en ligne à la place, ce qui est similaire à la méthode de crochet du noyau non-GKI.</string>
|
||||||
|
<string name="image_editor_title">Ajuster l\'image de fond</string>
|
||||||
|
<string name="image_editor_hint">Utilisez deux doigts pour zoomer l\'image, et un doigt pour le faire glisser pour ajuster la position</string>
|
||||||
|
<string name="background_image_error">Impossible de charger l\'image</string>
|
||||||
|
<string name="reprovision">Remise à disposition</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Clignotement du noyau</string>
|
||||||
|
<string name="horizon_logs_label">Journaux:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash terminé</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Préparation de…</string>
|
||||||
|
<string name="horizon_cleaning_files">Nettoyage des fichiers…</string>
|
||||||
|
<string name="horizon_copying_files">Copie des fichiers…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extraction de l\'outil flash…</string>
|
||||||
|
<string name="horizon_patching_script">Mise à jour du script…</string>
|
||||||
|
<string name="horizon_flashing">Flash du noyau…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash complété</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Sélectionnez l\'emplacement de Flash</string>
|
||||||
|
<string name="select_slot_description">Veuillez sélectionner l\'emplacement cible pour le démarrage du flash</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">LKM sélectionné : %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Obtention de l\'emplacement original</string>
|
||||||
|
<string name="horizon_setting_target_slot">Définition de l\'emplacement spécifié</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restaurer l\'emplacement par défaut</string>
|
||||||
|
<string name="current_slot">Emplacement actuel</string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copie échouée</string>
|
||||||
|
<string name="horizon_unknown_error">Erreur inconnue</string>
|
||||||
|
<string name="flash_failed_message">Échec du flash</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">Réparation/installation LKM</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Version du noyau:%1$s</string>
|
||||||
|
<string name="tool_version_log">Utilisation de l\'outil de correctifs:%1$s</string>
|
||||||
|
<string name="configuration">Configurer</string>
|
||||||
|
<string name="app_settings">Paramètres de l\'application</string>
|
||||||
|
<string name="tools">Outils</string>
|
||||||
|
<string name="currently_selected">Actuellement</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Suppressions</string>
|
||||||
|
<string name="apps_with_root">Applications avec droits root</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications avec configurations personnalisées</string>
|
||||||
|
<string name="other_apps">Applications avec valeurs par défaut non modifiées</string>
|
||||||
|
<string name="no_apps_found">Application introuvable</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux activé</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux désactivé</string>
|
||||||
|
<string name="selinux_change_failed">La modification du statut SELinux a échoué</string>
|
||||||
|
<string name="advanced_settings">Paramètres avancés</string>
|
||||||
|
<string name="appearance_settings">Choisir les boutons à afficher</string>
|
||||||
|
<string name="back">Reviens</string>
|
||||||
|
<string name="expand">Etre en plein swing</string>
|
||||||
|
<string name="collapse">rangé</string>
|
||||||
|
<string name="susfs_enabled">SuSFS activé</string>
|
||||||
|
<string name="susfs_disabled">SuSFS désactivé</string>
|
||||||
|
<string name="background_set_success">Fond d\'écran défini avec succès</string>
|
||||||
|
<string name="background_removed">Fond d\'écran personnalisé supprimé</string>
|
||||||
|
<string name="root_require_for_install">Nécessite les privilèges root</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Afficher la fonction KPM</string>
|
||||||
|
<string name="show_kpm_info_summary">Afficher les informations et fonctions KPM dans la barre d\'accueil et du bas (nécessite de rouvrir l\'application)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Injecter Eruda dans WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Injectez une console de débogage dans WebUI X pour faciliter le débogage. Nécessite que le débogage soit activé.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">Réglage du DPI</string>
|
||||||
|
<string name="app_dpi_title">DPI appliqué</string>
|
||||||
|
<string name="app_dpi_summary">Ajuster la densité d\'affichage de l\'écran pour l\'application actuelle uniquement</string>
|
||||||
|
<string name="dpi_size_small">Petit </string>
|
||||||
|
<string name="dpi_size_medium">Moyenne </string>
|
||||||
|
<string name="dpi_size_large">Grand</string>
|
||||||
|
<string name="dpi_size_extra_large">surtaille</string>
|
||||||
|
<string name="dpi_size_custom">Personnalisable</string>
|
||||||
|
<string name="dpi_apply_settings">Application des paramètres DPI</string>
|
||||||
|
<string name="dpi_confirm_title">Confirmer le changement de DPI</string>
|
||||||
|
<string name="dpi_confirm_message">Êtes-vous sûr de vouloir changer le DPI de l\'application de %1$d à %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">L\'application doit être redémarrée pour appliquer les nouveaux paramètres de DPI, n\'affecte pas la barre d\'état du système ou d\'autres applications</string>
|
||||||
|
<string name="dpi_applied_success">Le DPI a été réglé sur %1$d, effectif après le redémarrage de l\'application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">Langue de l\'application</string>
|
||||||
|
<string name="language_follow_system">Suivre le paramètre système</string>
|
||||||
|
<string name="language_changed">Langue modifiée, redémarrage pour appliquer les modifications</string>
|
||||||
|
<string name="settings_card_dim">Ajustement de l\'obscurité de la carte</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">En haut</string>
|
||||||
|
<string name="scroll_to_bottom">En Bas</string>
|
||||||
|
<string name="scroll_to_top_description">Aller en haut</string>
|
||||||
|
<string name="scroll_to_bottom_description">Faire défiler vers le bas</string>
|
||||||
|
<string name="authorized">Autorisé</string>
|
||||||
|
<string name="unauthorized">non autorisé</string>
|
||||||
|
<string name="selected">Sélectionné</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Désactiver le module de désinstallation personnalisé</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">code d\'erreur</string>
|
||||||
|
<string name="check_log">Veuillez vérifier le journal</string>
|
||||||
|
<string name="installing_module">Module en cours d\'installation %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d a échoué à installer un nouveau module</string>
|
||||||
|
<string name="module_download_error">Le téléchargement du modèle a échoué</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,81 +1,371 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="reboot_to_apply">प्रभाव में होने के लिए रीबूट करें</string>
|
|
||||||
<string name="home_click_to_learn_kernelsu">जानें कि KernelSU कैसे स्थापित करें और मॉड्यूल का उपयोग कैसे करें</string>
|
|
||||||
<string name="selinux_status_unknown">अज्ञात</string>
|
|
||||||
<string name="show_system_apps">सिस्टम एप्प दिखाए</string>
|
|
||||||
<string name="module_uninstall_success">%s अनइंस्टॉल सफल हुआ</string>
|
|
||||||
<string name="profile_umount_modules">मॉड्यूल्स अनमाउंट करें</string>
|
|
||||||
<string name="send_log">लॉग भेजे</string>
|
|
||||||
<string name="selinux_status_disabled">डिसेबल्ड (बंद)</string>
|
|
||||||
<string name="home_support_title">हमें प्रोत्साहन दें</string>
|
|
||||||
<string name="profile_namespace_inherited">Inherited</string>
|
|
||||||
<string name="module_magisk_conflict">मॉड्यूल बंद कर दिए गए हैं क्योंकि यह मैजिक के साथ टकरा रहे है!</string>
|
|
||||||
<string name="module_changelog">क्या बदलाव हुए है</string>
|
|
||||||
<string name="selinux_status_permissive">पर्मिसिव</string>
|
|
||||||
<string name="reboot_download">डाउनलोड में रिबूट करें</string>
|
|
||||||
<string name="settings_umount_modules_default">डिफ़ॉल्ट रूप से मॉड्यूल अनमाउन्ट करें</string>
|
|
||||||
<string name="profile_umount_modules_summary">इस विकल्प को चालू करने से KernelSU को इस एप्लिकेशन के लिए मॉड्यूल द्वारा किसी भी मोडिफाइड फ़ाइल को रिस्टोर करें।</string>
|
|
||||||
<string name="profile_namespace_individual">Individual</string>
|
|
||||||
<string name="module_failed_to_enable">%s मॉड्यूल चालू करने में विफल</string>
|
|
||||||
<string name="force_stop_app">जबर्दस्ती बंद करें</string>
|
|
||||||
<string name="reboot_edl" formatted="false">EDL मोड में रिबूट करें</string>
|
|
||||||
<string name="restart_app">फिर से चालू करें</string>
|
|
||||||
<string name="profile_capabilities">क्षमताएं</string>
|
|
||||||
<string name="home_superuser_count">सुपरयूजर : %d</string>
|
|
||||||
<string name="module_start_downloading">%s की डाउनलोडिंग स्टार्ट करें</string>
|
|
||||||
<string name="profile_namespace_global">Global</string>
|
|
||||||
<string name="settings_umount_modules_default_summary">ऐप प्रोफाइल में \"अनमाउंट मॉड्यूल\" के लिए ग्लोबल डिफ़ॉल्ट वैल्यू। यदि चालू किया गया है, तो यह एप्लीकेशंस के लिऐ सिस्टम के सभी मॉड्यूल मोडिफिकेशन को हटा देगा जिनकी प्रोफ़ाइल सेट नहीं है।</string>
|
|
||||||
<string name="home_module_count">मॉड्यूल्स : %d</string>
|
|
||||||
<string name="selinux_status_enforcing">एनफोर्सिंग</string>
|
|
||||||
<string name="profile_selinux_context">SELinux context</string>
|
|
||||||
<string name="home_fingerprint">फिंगरप्रिंट</string>
|
|
||||||
<string name="profile_default">डिफॉल्ट</string>
|
|
||||||
<string name="launch_app">लॉन्च करें</string>
|
|
||||||
<string name="safe_mode">सेफ मोड</string>
|
|
||||||
<string name="reboot_recovery">रिकवरी में रिबूट करें</string>
|
|
||||||
<string name="reboot_userspace">सॉफ्ट रिबूट</string>
|
|
||||||
<string name="profile_name">प्रोफाइल का नाम</string>
|
|
||||||
<string name="home_support_content">KernelSU मुफ़्त और ओपन सोर्स और हमेशा रहेगा। हालाँकि आप दान देकर हमें दिखा सकते हैं कि आप संरक्षण करते हैं।</string>
|
|
||||||
<string name="uninstall">अनइंस्टॉल करें</string>
|
|
||||||
<string name="profile_namespace">Namspace माउंट करें</string>
|
|
||||||
<string name="module_install">इंस्टाल करें</string>
|
|
||||||
<string name="home_click_to_install">इंस्टाल करने के लिए क्लिक करें</string>
|
|
||||||
<string name="profile_selinux_rules">नियम</string>
|
|
||||||
<string name="profile_groups">समूह</string>
|
|
||||||
<string name="module">मॉड्यूल</string>
|
|
||||||
<string name="module_author">निर्माता</string>
|
|
||||||
<string name="about">हमारे बारे में</string>
|
|
||||||
<string name="home_working_version">वर्जन: %d</string>
|
|
||||||
<string name="reboot">रीबूट करें</string>
|
|
||||||
<string name="home_unsupported_reason">KernelSU अभी केवल GKI कर्नल्स को सपोर्ट करता है</string>
|
|
||||||
<string name="home_selinux_status">SELinux स्थिति</string>
|
|
||||||
<string name="hide_system_apps">सिस्टम एप्प छिपाए</string>
|
|
||||||
<string name="module_version">वर्जन</string>
|
|
||||||
<string name="home_unsupported">सपोर्ट नहीं करता है</string>
|
|
||||||
<string name="profile_selinux_domain">डोमेन</string>
|
|
||||||
<string name="home">होम</string>
|
<string name="home">होम</string>
|
||||||
<string name="profile_custom">कस्टम</string>
|
<string name="home_not_installed">इंस्टाल नहीं हुआ</string>
|
||||||
<string name="profile_template">टेम्पलेट</string>
|
<string name="home_click_to_install">इंस्टाल करने के लिए क्लिक करें</string>
|
||||||
<string name="refresh">रिफ्रेश</string>
|
|
||||||
<string name="module_downloading">%s मॉड्यूल डाउनलोड हो रहा है</string>
|
|
||||||
<string name="module_update">अपडेट</string>
|
|
||||||
<string name="home_learn_kernelsu">KernelSU सीखें</string>
|
|
||||||
<string name="module_uninstall_confirm">क्या आप सच में मॉड्यूल %s को अनइंस्टॉल करना चाहते हैं\?</string>
|
|
||||||
<string name="module_uninstall_failed">%s अनइंस्टल करने में असफल</string>
|
|
||||||
<string name="superuser">सुपरयूजर</string>
|
|
||||||
<string name="settings">सेटिंग</string>
|
|
||||||
<string name="home_working">काम कर रहा है</string>
|
<string name="home_working">काम कर रहा है</string>
|
||||||
|
<string name="home_working_version">वर्जन: %d</string>
|
||||||
|
<string name="home_superuser_count">सुपरयूजर : %d</string>
|
||||||
|
<string name="home_module_count">मॉड्यूल्स : %d</string>
|
||||||
|
<string name="home_unsupported">सपोर्ट नहीं करता है</string>
|
||||||
|
<string name="home_unsupported_reason">KernelSU अभी केवल GKI कर्नल्स को सपोर्ट करता है</string>
|
||||||
|
<string name="home_kernel">कर्नल</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
|
<string name="home_manager_version">मैनेजर वर्जन</string>
|
||||||
|
<string name="home_fingerprint">फिंगरप्रिंट</string>
|
||||||
|
<string name="home_selinux_status">SELinux स्थिति</string>
|
||||||
|
<string name="selinux_status_disabled">डिसेबल्ड (बंद)</string>
|
||||||
|
<string name="selinux_status_enforcing">एनफोर्सिंग</string>
|
||||||
|
<string name="selinux_status_permissive">पर्मिसिव</string>
|
||||||
|
<string name="selinux_status_unknown">अज्ञात</string>
|
||||||
|
<string name="superuser">सुपरयूजर</string>
|
||||||
|
<string name="module_failed_to_enable">%s मॉड्यूल चालू करने में विफल</string>
|
||||||
<string name="module_failed_to_disable">%s मॉड्यूल बंद करने में विफल</string>
|
<string name="module_failed_to_disable">%s मॉड्यूल बंद करने में विफल</string>
|
||||||
<string name="module_empty">कोई मॉड्यूल इंस्टाल नहीं हुआ</string>
|
<string name="module_empty">कोई मॉड्यूल इंस्टाल नहीं हुआ</string>
|
||||||
|
<string name="module">मॉड्यूल</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
|
<string name="uninstall">अनइंस्टॉल करें</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
|
<string name="module_install">इंस्टाल करें</string>
|
||||||
<string name="install">इंस्टाल करें</string>
|
<string name="install">इंस्टाल करें</string>
|
||||||
<string name="home_kernel">कर्नल</string>
|
<string name="reboot">रीबूट करें</string>
|
||||||
<string name="home_not_installed">इंस्टाल नहीं हुआ</string>
|
<string name="settings">सेटिंग</string>
|
||||||
<string name="failed_to_update_app_profile">%s के लिए ऐप प्रोफ़ाइल अपडेट करने में विफल</string>
|
<string name="reboot_userspace">सॉफ्ट रिबूट</string>
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
<string name="reboot_recovery">रिकवरी में रिबूट करें</string>
|
||||||
<string name="failed_to_update_sepolicy">%s के लिए SELinux नियमों को अपटेड करने में विफल</string>
|
|
||||||
<string name="reboot_bootloader">बुटलोडर में रिबूट करें</string>
|
<string name="reboot_bootloader">बुटलोडर में रिबूट करें</string>
|
||||||
<string name="home_manager_version">मैनेजर वर्जन</string>
|
<string name="reboot_download">डाउनलोड में रिबूट करें</string>
|
||||||
|
<string name="reboot_edl">EDL मोड में रिबूट करें</string>
|
||||||
|
<string name="about">हमारे बारे में</string>
|
||||||
|
<string name="module_uninstall_confirm">क्या आप सच में मॉड्यूल %s को अनइंस्टॉल करना चाहते हैं\?</string>
|
||||||
|
<string name="module_uninstall_success">%s अनइंस्टॉल सफल हुआ</string>
|
||||||
|
<string name="module_uninstall_failed">%s अनइंस्टल करने में असफल</string>
|
||||||
|
<string name="module_version">वर्जन</string>
|
||||||
|
<string name="module_author">निर्माता</string>
|
||||||
|
<string name="refresh">रिफ्रेश</string>
|
||||||
|
<string name="show_system_apps">सिस्टम एप्प दिखाए</string>
|
||||||
|
<string name="hide_system_apps">सिस्टम एप्प छिपाए</string>
|
||||||
|
<string name="send_log">लॉग भेजे</string>
|
||||||
|
<string name="safe_mode">सेफ मोड</string>
|
||||||
|
<string name="reboot_to_apply">प्रभाव में होने के लिए रीबूट करें</string>
|
||||||
|
<string name="module_magisk_conflict">मॉड्यूल बंद कर दिए गए हैं क्योंकि यह मैजिक के साथ टकरा रहे है!</string>
|
||||||
|
<string name="home_learn_kernelsu">KernelSU सीखें</string>
|
||||||
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
|
<string name="home_click_to_learn_kernelsu">जानें कि KernelSU कैसे स्थापित करें और मॉड्यूल का उपयोग कैसे करें</string>
|
||||||
|
<string name="home_support_title">हमें प्रोत्साहन दें</string>
|
||||||
|
<string name="home_support_content">KernelSU मुफ़्त और ओपन सोर्स और हमेशा रहेगा। हालाँकि आप दान देकर हमें दिखा सकते हैं कि आप संरक्षण करते हैं।</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
|
<string name="profile_default">डिफॉल्ट</string>
|
||||||
|
<string name="profile_template">टेम्पलेट</string>
|
||||||
|
<string name="profile_custom">कस्टम</string>
|
||||||
|
<string name="profile_name">प्रोफाइल का नाम</string>
|
||||||
|
<string name="profile_namespace">Namspace माउंट करें</string>
|
||||||
|
<string name="profile_namespace_inherited">Inherited</string>
|
||||||
|
<string name="profile_namespace_global">Global</string>
|
||||||
|
<string name="profile_namespace_individual">Individual</string>
|
||||||
|
<string name="profile_groups">समूह</string>
|
||||||
|
<string name="profile_capabilities">क्षमताएं</string>
|
||||||
|
<string name="profile_selinux_context">SELinux context</string>
|
||||||
|
<string name="profile_umount_modules">मॉड्यूल्स अनमाउंट करें</string>
|
||||||
|
<string name="failed_to_update_app_profile">%s के लिए ऐप प्रोफ़ाइल अपडेट करने में विफल</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
|
<string name="settings_umount_modules_default">डिफ़ॉल्ट रूप से मॉड्यूल अनमाउन्ट करें</string>
|
||||||
|
<string name="settings_umount_modules_default_summary">ऐप प्रोफाइल में \"अनमाउंट मॉड्यूल\" के लिए ग्लोबल डिफ़ॉल्ट वैल्यू। यदि चालू किया गया है, तो यह एप्लीकेशंस के लिऐ सिस्टम के सभी मॉड्यूल मोडिफिकेशन को हटा देगा जिनकी प्रोफ़ाइल सेट नहीं है।</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
|
<string name="profile_umount_modules_summary">इस विकल्प को चालू करने से KernelSU को इस एप्लिकेशन के लिए मॉड्यूल द्वारा किसी भी मोडिफाइड फ़ाइल को रिस्टोर करें।</string>
|
||||||
|
<string name="profile_selinux_domain">डोमेन</string>
|
||||||
|
<string name="profile_selinux_rules">नियम</string>
|
||||||
|
<string name="module_update">अपडेट</string>
|
||||||
|
<string name="module_downloading">%s मॉड्यूल डाउनलोड हो रहा है</string>
|
||||||
|
<string name="module_start_downloading">%s की डाउनलोडिंग स्टार्ट करें</string>
|
||||||
<string name="new_version_available">नया वर्जन: %s उपलब्ध है,अपग्रेड के लिए क्लिक करें</string>
|
<string name="new_version_available">नया वर्जन: %s उपलब्ध है,अपग्रेड के लिए क्लिक करें</string>
|
||||||
|
<string name="launch_app">लॉन्च करें</string>
|
||||||
|
<string name="force_stop_app" formatted="false">जबर्दस्ती बंद करें</string>
|
||||||
|
<string name="restart_app">फिर से चालू करें</string>
|
||||||
|
<string name="failed_to_update_sepolicy">%s के लिए SELinux नियमों को अपटेड करने में विफल</string>
|
||||||
|
<string name="module_changelog">क्या बदलाव हुए है</string>
|
||||||
|
<string name="settings_profile_template">App Profile Template</string>
|
||||||
|
<string name="settings_profile_template_summary">Manage local and online template of App Profile</string>
|
||||||
|
<string name="app_profile_template_create">Create template</string>
|
||||||
|
<string name="app_profile_template_edit">Edit template</string>
|
||||||
|
<string name="app_profile_template_id">ID</string>
|
||||||
|
<string name="app_profile_template_id_invalid">Invalid template ID</string>
|
||||||
|
<string name="app_profile_template_name">Name</string>
|
||||||
|
<string name="app_profile_template_description">Description</string>
|
||||||
|
<string name="app_profile_template_save">Save</string>
|
||||||
|
<string name="app_profile_template_delete">Delete</string>
|
||||||
|
<string name="app_profile_template_view">View template</string>
|
||||||
|
<string name="app_profile_template_readonly">Read only</string>
|
||||||
|
<string name="app_profile_template_id_exist">Template ID already exists!</string>
|
||||||
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Import from clipboard</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Export to clipboard</string>
|
||||||
|
<string name="app_profile_template_export_empty">Cannot find local template to export!</string>
|
||||||
|
<string name="app_profile_template_import_success">Imported successfully</string>
|
||||||
|
<string name="app_profile_template_sync">Sync online templates</string>
|
||||||
|
<string name="app_profile_template_save_failed">Failed to save template</string>
|
||||||
|
<string name="app_profile_template_import_empty">Clipboard is empty!</string>
|
||||||
|
<string name="module_changelog_failed">Fetch changelog failed: %s</string>
|
||||||
|
<string name="settings_check_update">Check update</string>
|
||||||
|
<string name="settings_check_update_summary">Automatically check for updates when opening the app</string>
|
||||||
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
|
<string name="select_file">Select a image that needs to be patched</string>
|
||||||
|
<string name="install_inactive_slot">Install to inactive slot (After OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
|
||||||
|
<string name="install_next">Next</string>
|
||||||
|
<string name="select_file_tip">%1$s partition image is recommended</string>
|
||||||
|
<string name="select_kmi">Select KMI</string>
|
||||||
|
<string name="settings_uninstall">Uninstall</string>
|
||||||
|
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
||||||
|
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
||||||
|
<string name="settings_restore_stock_image">Restore stock image</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
||||||
|
<string name="flashing">Flashing</string>
|
||||||
|
<string name="flash_success">Flash success</string>
|
||||||
|
<string name="flash_failed">Flash failed</string>
|
||||||
|
<string name="selected_lkm">Selected LKM: %s</string>
|
||||||
<string name="save_log">लॉग सहेजें</string>
|
<string name="save_log">लॉग सहेजें</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,34 +1,34 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="show_system_apps">Prikažite sistemske aplikacije</string>
|
|
||||||
<string name="hide_system_apps">Sakrijte sistemske aplikacije</string>
|
|
||||||
<string name="send_log">Pošaljite Izvještaj</string>
|
|
||||||
<string name="safe_mode">Sigurnosni mod</string>
|
|
||||||
<string name="reboot_to_apply">Ponovno pokrenite da bi proradilo</string>
|
|
||||||
<string name="failed_to_update_sepolicy">Neuspješno ažuriranje SELinux pravila za: %s</string>
|
|
||||||
<string name="home">Početna</string>
|
<string name="home">Početna</string>
|
||||||
<string name="home_not_installed">Nije instalirano</string>
|
<string name="home_not_installed">Nije instalirano</string>
|
||||||
<string name="home_working_version">Verzija: %d</string>
|
|
||||||
<string name="home_click_to_install">Kliknite da instalirate</string>
|
<string name="home_click_to_install">Kliknite da instalirate</string>
|
||||||
<string name="home_working">Radi</string>
|
<string name="home_working">Radi</string>
|
||||||
|
<string name="home_working_version">Verzija: %d</string>
|
||||||
<string name="home_superuser_count">Superkorisnici: %d</string>
|
<string name="home_superuser_count">Superkorisnici: %d</string>
|
||||||
<string name="home_module_count">Module: %d</string>
|
<string name="home_module_count">Module: %d</string>
|
||||||
<string name="home_unsupported">Nepodržano</string>
|
<string name="home_unsupported">Nepodržano</string>
|
||||||
<string name="home_unsupported_reason">KernelSU samo podržava GKI kernele sad</string>
|
<string name="home_unsupported_reason">KernelSU samo podržava GKI kernele sad</string>
|
||||||
<string name="home_kernel">Kernel</string>
|
<string name="home_kernel">Kernel</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Verzija Voditelja</string>
|
<string name="home_manager_version">Verzija Voditelja</string>
|
||||||
<string name="home_fingerprint">Otisak prsta</string>
|
<string name="home_fingerprint">Otisak prsta</string>
|
||||||
|
<string name="home_selinux_status">SELinux stanje</string>
|
||||||
<string name="selinux_status_disabled">Isključeno</string>
|
<string name="selinux_status_disabled">Isključeno</string>
|
||||||
<string name="selinux_status_enforcing">U Provođenju</string>
|
<string name="selinux_status_enforcing">U Provođenju</string>
|
||||||
<string name="selinux_status_permissive">Permisivno</string>
|
<string name="selinux_status_permissive">Permisivno</string>
|
||||||
<string name="home_selinux_status">SELinux stanje</string>
|
|
||||||
<string name="selinux_status_unknown">Nepoznato</string>
|
<string name="selinux_status_unknown">Nepoznato</string>
|
||||||
<string name="superuser">Superkorisnik</string>
|
<string name="superuser">Superkorisnik</string>
|
||||||
<string name="module_failed_to_enable">Neuspješno uključivanje module: %s</string>
|
<string name="module_failed_to_enable">Neuspješno uključivanje module: %s</string>
|
||||||
<string name="module_failed_to_disable">Neuspješno isključivanje module: %s</string>
|
<string name="module_failed_to_disable">Neuspješno isključivanje module: %s</string>
|
||||||
<string name="module_empty">Nema instaliranih modula</string>
|
<string name="module_empty">Nema instaliranih modula</string>
|
||||||
<string name="module">Modula</string>
|
<string name="module">Modula</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
<string name="uninstall">Deinstalirajte</string>
|
<string name="uninstall">Deinstalirajte</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
<string name="module_install">Instalirajte</string>
|
<string name="module_install">Instalirajte</string>
|
||||||
<string name="install">Instalirajte</string>
|
<string name="install">Instalirajte</string>
|
||||||
<string name="reboot">Ponovno pokrenite</string>
|
<string name="reboot">Ponovno pokrenite</string>
|
||||||
@@ -45,29 +45,37 @@
|
|||||||
<string name="module_version">Verzija</string>
|
<string name="module_version">Verzija</string>
|
||||||
<string name="module_author">Autor</string>
|
<string name="module_author">Autor</string>
|
||||||
<string name="refresh">Osvježi</string>
|
<string name="refresh">Osvježi</string>
|
||||||
|
<string name="show_system_apps">Prikažite sistemske aplikacije</string>
|
||||||
|
<string name="hide_system_apps">Sakrijte sistemske aplikacije</string>
|
||||||
|
<string name="send_log">Pošaljite Izvještaj</string>
|
||||||
|
<string name="safe_mode">Sigurnosni mod</string>
|
||||||
|
<string name="reboot_to_apply">Ponovno pokrenite da bi proradilo</string>
|
||||||
<string name="module_magisk_conflict">Module su isključene jer je u sukobu sa Magisk-om!</string>
|
<string name="module_magisk_conflict">Module su isključene jer je u sukobu sa Magisk-om!</string>
|
||||||
<string name="home_learn_kernelsu">Naučite KernelSU</string>
|
<string name="home_learn_kernelsu">Naučite KernelSU</string>
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
<string name="home_click_to_learn_kernelsu">Naučite kako da instalirate KernelSU i da koristite module</string>
|
<string name="home_click_to_learn_kernelsu">Naučite kako da instalirate KernelSU i da koristite module</string>
|
||||||
<string name="home_support_title">Podržite Nas</string>
|
<string name="home_support_title">Podržite Nas</string>
|
||||||
<string name="home_support_content">KernelSU je, i uvijek če biti, besplatan, i otvorenog izvora. Možete nam međutim pokazati da vas je briga s time da napravite donaciju.</string>
|
<string name="home_support_content">KernelSU je, i uvijek če biti, besplatan, i otvorenog izvora. Možete nam međutim pokazati da vas je briga s time da napravite donaciju.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
<string name="profile_default">Zadano</string>
|
<string name="profile_default">Zadano</string>
|
||||||
<string name="profile_template">Šablon</string>
|
<string name="profile_template">Šablon</string>
|
||||||
<string name="profile_custom">Prilagođeno</string>
|
<string name="profile_custom">Prilagođeno</string>
|
||||||
<string name="profile_name">Naziv profila</string>
|
<string name="profile_name">Naziv profila</string>
|
||||||
<string name="profile_namespace_inherited">Naslijeđen</string>
|
|
||||||
<string name="profile_namespace">Imenski prostor nosača</string>
|
<string name="profile_namespace">Imenski prostor nosača</string>
|
||||||
<string name="failed_to_update_app_profile">Ažuriranje Profila Aplikacije za %s nije uspjelo</string>
|
<string name="profile_namespace_inherited">Naslijeđen</string>
|
||||||
<string name="profile_namespace_global">Globalan</string>
|
<string name="profile_namespace_global">Globalan</string>
|
||||||
<string name="profile_namespace_individual">Pojedinačan</string>
|
<string name="profile_namespace_individual">Pojedinačan</string>
|
||||||
<string name="profile_umount_modules">Umount module</string>
|
|
||||||
<string name="profile_groups">Grupe</string>
|
<string name="profile_groups">Grupe</string>
|
||||||
<string name="profile_capabilities">Sposobnosti</string>
|
<string name="profile_capabilities">Sposobnosti</string>
|
||||||
<string name="profile_selinux_context">SELinux kontekst</string>
|
<string name="profile_selinux_context">SELinux kontekst</string>
|
||||||
|
<string name="profile_umount_modules">Umount module</string>
|
||||||
|
<string name="failed_to_update_app_profile">Ažuriranje Profila Aplikacije za %s nije uspjelo</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
<string name="settings_umount_modules_default">Umount module po zadanom</string>
|
<string name="settings_umount_modules_default">Umount module po zadanom</string>
|
||||||
<string name="settings_umount_modules_default_summary">Globalna zadana vrijednost za \"Umount module\" u Profilima Aplikacije. Ako je omogućeno, uklonit će sve izmjene modula na sistemu za aplikacije koje nemaju postavljen Profil.</string>
|
<string name="settings_umount_modules_default_summary">Globalna zadana vrijednost za \"Umount module\" u Profilima Aplikacije. Ako je omogućeno, uklonit će sve izmjene modula na sistemu za aplikacije koje nemaju postavljen Profil.</string>
|
||||||
<string name="profile_selinux_domain">Domena</string>
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
<string name="profile_umount_modules_summary">Uključivanjem ove opcije omogućit će KernelSU-u da vrati sve izmjenute datoteke od strane modula za ovu aplikaciju.</string>
|
<string name="profile_umount_modules_summary">Uključivanjem ove opcije omogućit će KernelSU-u da vrati sve izmjenute datoteke od strane modula za ovu aplikaciju.</string>
|
||||||
|
<string name="profile_selinux_domain">Domena</string>
|
||||||
<string name="profile_selinux_rules">Pravila</string>
|
<string name="profile_selinux_rules">Pravila</string>
|
||||||
<string name="module_update">Ažuriranje</string>
|
<string name="module_update">Ažuriranje</string>
|
||||||
<string name="module_downloading">Preuzimanje module: %s</string>
|
<string name="module_downloading">Preuzimanje module: %s</string>
|
||||||
@@ -76,5 +84,288 @@
|
|||||||
<string name="launch_app">Pokrenite</string>
|
<string name="launch_app">Pokrenite</string>
|
||||||
<string name="force_stop_app" formatted="false">Prisilno Zaustavite</string>
|
<string name="force_stop_app" formatted="false">Prisilno Zaustavite</string>
|
||||||
<string name="restart_app">Resetujte</string>
|
<string name="restart_app">Resetujte</string>
|
||||||
|
<string name="failed_to_update_sepolicy">Neuspješno ažuriranje SELinux pravila za: %s</string>
|
||||||
|
<string name="module_changelog">Changelog</string>
|
||||||
|
<string name="settings_profile_template">App Profile Template</string>
|
||||||
|
<string name="settings_profile_template_summary">Manage local and online template of App Profile</string>
|
||||||
|
<string name="app_profile_template_create">Create template</string>
|
||||||
|
<string name="app_profile_template_edit">Edit template</string>
|
||||||
|
<string name="app_profile_template_id">ID</string>
|
||||||
|
<string name="app_profile_template_id_invalid">Invalid template ID</string>
|
||||||
|
<string name="app_profile_template_name">Name</string>
|
||||||
|
<string name="app_profile_template_description">Description</string>
|
||||||
|
<string name="app_profile_template_save">Save</string>
|
||||||
|
<string name="app_profile_template_delete">Delete</string>
|
||||||
|
<string name="app_profile_template_view">View template</string>
|
||||||
|
<string name="app_profile_template_readonly">Read only</string>
|
||||||
|
<string name="app_profile_template_id_exist">Template ID already exists!</string>
|
||||||
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Import from clipboard</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Export to clipboard</string>
|
||||||
|
<string name="app_profile_template_export_empty">Cannot find local template to export!</string>
|
||||||
|
<string name="app_profile_template_import_success">Imported successfully</string>
|
||||||
|
<string name="app_profile_template_sync">Sync online templates</string>
|
||||||
|
<string name="app_profile_template_save_failed">Failed to save template</string>
|
||||||
|
<string name="app_profile_template_import_empty">Clipboard is empty!</string>
|
||||||
|
<string name="module_changelog_failed">Fetch changelog failed: %s</string>
|
||||||
|
<string name="settings_check_update">Check update</string>
|
||||||
|
<string name="settings_check_update_summary">Automatically check for updates when opening the app</string>
|
||||||
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
|
<string name="select_file">Select a image that needs to be patched</string>
|
||||||
|
<string name="install_inactive_slot">Install to inactive slot (After OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
|
||||||
|
<string name="install_next">Next</string>
|
||||||
|
<string name="select_file_tip">%1$s partition image is recommended</string>
|
||||||
|
<string name="select_kmi">Select KMI</string>
|
||||||
|
<string name="settings_uninstall">Uninstall</string>
|
||||||
|
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
||||||
|
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
||||||
|
<string name="settings_restore_stock_image">Restore stock image</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
||||||
|
<string name="flashing">Flashing</string>
|
||||||
|
<string name="flash_success">Flash success</string>
|
||||||
|
<string name="flash_failed">Flash failed</string>
|
||||||
|
<string name="selected_lkm">Selected LKM: %s</string>
|
||||||
<string name="save_log">Spremi Zapise</string>
|
<string name="save_log">Spremi Zapise</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,54 +1,22 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="home_working">Működik</string>
|
|
||||||
<string name="home_working_version">Verzió: %d</string>
|
|
||||||
<string name="home_module_count">Modulok: %d</string>
|
|
||||||
<string name="home_unsupported_reason">A KernelSU jelenleg csak GKI kerneleket támogat</string>
|
|
||||||
<string name="home_kernel">Kernel</string>
|
|
||||||
<string name="home_manager_version">Alkalmazás verziója</string>
|
|
||||||
<string name="home_fingerprint">Ujjlenyomat</string>
|
|
||||||
<string name="selinux_status_disabled">Letiltva</string>
|
|
||||||
<string name="reboot_download">Újraindítás letöltő módba</string>
|
|
||||||
<string name="reboot_edl">Újraindítás EDL-be</string>
|
|
||||||
<string name="about">Névjegy</string>
|
|
||||||
<string name="module_uninstall_confirm">Biztos benne hogy eltávolítja a következő modult: %s?</string>
|
|
||||||
<string name="module_uninstall_failed">Nem sikerült eltávolítani: %s</string>
|
|
||||||
<string name="module_author">Készítő</string>
|
|
||||||
<string name="refresh">Frissítés</string>
|
|
||||||
<string name="show_system_apps">Rendszeralkalmazások megjelenítése</string>
|
|
||||||
<string name="hide_system_apps">Rendszeralkalmazások elrejtése</string>
|
|
||||||
<string name="safe_mode">Biztonságos mód</string>
|
|
||||||
<string name="module_magisk_conflict">A modulok nem érhetők el a Magiskkel való ütközés miatt!</string>
|
|
||||||
<string name="home_learn_kernelsu">Tudjon meg többet a KernelSU-ról</string>
|
|
||||||
<string name="home_click_to_learn_kernelsu">Ismerje meg a KernelSU telepítését és a modulok használatát</string>
|
|
||||||
<string name="home_support_title">Támogasson minket</string>
|
|
||||||
<string name="profile_default">Alapértelmezett</string>
|
|
||||||
<string name="profile_template">Sablon</string>
|
|
||||||
<string name="profile_custom">Egyedi</string>
|
|
||||||
<string name="profile_name">Profil neve</string>
|
|
||||||
<string name="profile_namespace">Névtér csatlakoztatása</string>
|
|
||||||
<string name="profile_namespace_inherited">Örökölt</string>
|
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
|
||||||
<string name="profile_namespace_individual">Különálló</string>
|
|
||||||
<string name="profile_groups">Csoportok</string>
|
|
||||||
<string name="profile_capabilities">Jogosultságok</string>
|
|
||||||
<string name="profile_selinux_context">SELinux kontextus</string>
|
|
||||||
<string name="settings_umount_modules_default">Modulok leválasztása alapértelmezetten</string>
|
|
||||||
<string name="profile_umount_modules_summary">Ha engedélyezi ezt az opciót, a KernelSU visszaállíthatja az alkalmazás moduljai által módosított fájlokat.</string>
|
|
||||||
<string name="profile_selinux_domain">Tartomány</string>
|
|
||||||
<string name="profile_selinux_rules">Szabályok</string>
|
|
||||||
<string name="module_update">Frissítés</string>
|
|
||||||
<string name="module_downloading">Modul letöltése: %s</string>
|
|
||||||
<string name="module_start_downloading">Letöltés indítása: %s</string>
|
|
||||||
<string name="launch_app">Indítás</string>
|
|
||||||
<string name="force_stop_app" formatted="false">Kényszerített leállítás</string>
|
|
||||||
<string name="restart_app">újraindítás</string>
|
|
||||||
<string name="home">Kezdőlap</string>
|
<string name="home">Kezdőlap</string>
|
||||||
<string name="home_not_installed">Nincs telepítve</string>
|
<string name="home_not_installed">Nincs telepítve</string>
|
||||||
<string name="home_click_to_install">Kattintson a telepítéshez</string>
|
<string name="home_click_to_install">Kattintson a telepítéshez</string>
|
||||||
|
<string name="home_working">Működik</string>
|
||||||
|
<string name="home_working_version">Verzió: %d</string>
|
||||||
<string name="home_superuser_count">Engedélyezett alkalmazások: %d</string>
|
<string name="home_superuser_count">Engedélyezett alkalmazások: %d</string>
|
||||||
|
<string name="home_module_count">Modulok: %d</string>
|
||||||
<string name="home_unsupported">Nem támogatott</string>
|
<string name="home_unsupported">Nem támogatott</string>
|
||||||
|
<string name="home_unsupported_reason">A KernelSU jelenleg csak GKI kerneleket támogat</string>
|
||||||
|
<string name="home_kernel">Kernel</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
|
<string name="home_manager_version">Alkalmazás verziója</string>
|
||||||
|
<string name="home_fingerprint">Ujjlenyomat</string>
|
||||||
<string name="home_selinux_status">SELinux állapot</string>
|
<string name="home_selinux_status">SELinux állapot</string>
|
||||||
|
<string name="selinux_status_disabled">Letiltva</string>
|
||||||
<string name="selinux_status_enforcing">Kényszerített</string>
|
<string name="selinux_status_enforcing">Kényszerített</string>
|
||||||
<string name="selinux_status_permissive">Engedélyezett</string>
|
<string name="selinux_status_permissive">Engedélyezett</string>
|
||||||
<string name="selinux_status_unknown">Ismeretlen</string>
|
<string name="selinux_status_unknown">Ismeretlen</string>
|
||||||
@@ -57,7 +25,10 @@
|
|||||||
<string name="module_failed_to_disable">Nem sikerült letiltani a következő modult: %s</string>
|
<string name="module_failed_to_disable">Nem sikerült letiltani a következő modult: %s</string>
|
||||||
<string name="module_empty">Nincs telepített modul</string>
|
<string name="module_empty">Nincs telepített modul</string>
|
||||||
<string name="module">Modulok</string>
|
<string name="module">Modulok</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
<string name="uninstall">Eltávolítás</string>
|
<string name="uninstall">Eltávolítás</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
<string name="module_install">Telepítés</string>
|
<string name="module_install">Telepítés</string>
|
||||||
<string name="install">Telepítés</string>
|
<string name="install">Telepítés</string>
|
||||||
<string name="reboot">Újraindítás</string>
|
<string name="reboot">Újraindítás</string>
|
||||||
@@ -65,65 +36,336 @@
|
|||||||
<string name="reboot_userspace">Rendszerfelület újraindítása</string>
|
<string name="reboot_userspace">Rendszerfelület újraindítása</string>
|
||||||
<string name="reboot_recovery">Újraindítás recovery-módba</string>
|
<string name="reboot_recovery">Újraindítás recovery-módba</string>
|
||||||
<string name="reboot_bootloader">Újraindítás bootloader-módba</string>
|
<string name="reboot_bootloader">Újraindítás bootloader-módba</string>
|
||||||
|
<string name="reboot_download">Újraindítás letöltő módba</string>
|
||||||
|
<string name="reboot_edl">Újraindítás EDL-be</string>
|
||||||
|
<string name="about">Névjegy</string>
|
||||||
|
<string name="module_uninstall_confirm">Biztos benne hogy eltávolítja a következő modult: %s?</string>
|
||||||
<string name="module_uninstall_success">%s eltávolítva</string>
|
<string name="module_uninstall_success">%s eltávolítva</string>
|
||||||
|
<string name="module_uninstall_failed">Nem sikerült eltávolítani: %s</string>
|
||||||
<string name="module_version">Verzió</string>
|
<string name="module_version">Verzió</string>
|
||||||
|
<string name="module_author">Készítő</string>
|
||||||
|
<string name="refresh">Frissítés</string>
|
||||||
|
<string name="show_system_apps">Rendszeralkalmazások megjelenítése</string>
|
||||||
|
<string name="hide_system_apps">Rendszeralkalmazások elrejtése</string>
|
||||||
<string name="send_log">Naplók küldése</string>
|
<string name="send_log">Naplók küldése</string>
|
||||||
|
<string name="safe_mode">Biztonságos mód</string>
|
||||||
<string name="reboot_to_apply">Indítsa újra a készüléket a változások érvényesítéséhez</string>
|
<string name="reboot_to_apply">Indítsa újra a készüléket a változások érvényesítéséhez</string>
|
||||||
|
<string name="module_magisk_conflict">A modulok nem érhetők el a Magiskkel való ütközés miatt!</string>
|
||||||
|
<string name="home_learn_kernelsu">Tudjon meg többet a KernelSU-ról</string>
|
||||||
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
|
<string name="home_click_to_learn_kernelsu">Ismerje meg a KernelSU telepítését és a modulok használatát</string>
|
||||||
|
<string name="home_support_title">Támogasson minket</string>
|
||||||
<string name="home_support_content">A KernelSU ingyenes, nyílt forráskódú és mindig is az lesz. Ön azonban adományozással megmutathatja, hogy törődik a projekttel.</string>
|
<string name="home_support_content">A KernelSU ingyenes, nyílt forráskódú és mindig is az lesz. Ön azonban adományozással megmutathatja, hogy törődik a projekttel.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
|
<string name="profile_default">Alapértelmezett</string>
|
||||||
|
<string name="profile_template">Sablon</string>
|
||||||
|
<string name="profile_custom">Egyedi</string>
|
||||||
|
<string name="profile_name">Profil neve</string>
|
||||||
|
<string name="profile_namespace">Névtér csatlakoztatása</string>
|
||||||
|
<string name="profile_namespace_inherited">Örökölt</string>
|
||||||
<string name="profile_namespace_global">Globális</string>
|
<string name="profile_namespace_global">Globális</string>
|
||||||
|
<string name="profile_namespace_individual">Különálló</string>
|
||||||
|
<string name="profile_groups">Csoportok</string>
|
||||||
|
<string name="profile_capabilities">Jogosultságok</string>
|
||||||
|
<string name="profile_selinux_context">SELinux kontextus</string>
|
||||||
<string name="profile_umount_modules">Modulok leválasztása</string>
|
<string name="profile_umount_modules">Modulok leválasztása</string>
|
||||||
<string name="failed_to_update_app_profile">Nem sikerült frissíteni az App Profilt ehhez: %s</string>
|
<string name="failed_to_update_app_profile">Nem sikerült frissíteni az App Profilt ehhez: %s</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
|
<string name="settings_umount_modules_default">Modulok leválasztása alapértelmezetten</string>
|
||||||
<string name="settings_umount_modules_default_summary">A \"Modulok leválasztása\" globális alapértelmezett értéke az App Profile-ban. Ha engedélyezve van, eltávolít minden modulmódosítást a rendszerből azon alkalmazások esetében, amelyeknek nincs profilja beállítva.</string>
|
<string name="settings_umount_modules_default_summary">A \"Modulok leválasztása\" globális alapértelmezett értéke az App Profile-ban. Ha engedélyezve van, eltávolít minden modulmódosítást a rendszerből azon alkalmazások esetében, amelyeknek nincs profilja beállítva.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
|
<string name="profile_umount_modules_summary">Ha engedélyezi ezt az opciót, a KernelSU visszaállíthatja az alkalmazás moduljai által módosított fájlokat.</string>
|
||||||
|
<string name="profile_selinux_domain">Tartomány</string>
|
||||||
|
<string name="profile_selinux_rules">Szabályok</string>
|
||||||
|
<string name="module_update">Frissítés</string>
|
||||||
|
<string name="module_downloading">Modul letöltése: %s</string>
|
||||||
|
<string name="module_start_downloading">Letöltés indítása: %s</string>
|
||||||
<string name="new_version_available">Elérhető az új, %s verzió, kattintson a frissítéshez.</string>
|
<string name="new_version_available">Elérhető az új, %s verzió, kattintson a frissítéshez.</string>
|
||||||
|
<string name="launch_app">Indítás</string>
|
||||||
|
<string name="force_stop_app" formatted="false">Kényszerített leállítás</string>
|
||||||
|
<string name="restart_app">újraindítás</string>
|
||||||
<string name="failed_to_update_sepolicy">Nem sikerült frissíteni az SELinux szabályokat a következőhöz: %s</string>
|
<string name="failed_to_update_sepolicy">Nem sikerült frissíteni az SELinux szabályokat a következőhöz: %s</string>
|
||||||
<string name="app_profile_template_import_success">Sikeresen importálva</string>
|
|
||||||
<string name="app_profile_export_to_clipboard">Exportálás a vágólapról</string>
|
|
||||||
<string name="app_profile_template_export_empty">Nem található helyi sablon az exportáláshoz!</string>
|
|
||||||
<string name="app_profile_template_id_exist">A sablon ID már létezik!</string>
|
|
||||||
<string name="module_changelog">Változások</string>
|
<string name="module_changelog">Változások</string>
|
||||||
<string name="app_profile_import_from_clipboard">Importálás a vágólapról</string>
|
<string name="settings_profile_template">App Profile sablon</string>
|
||||||
<string name="module_changelog_failed">A változásnapló lekérése nem sikerült: %s</string>
|
<string name="settings_profile_template_summary">Az App Profile helyi és online sablonjának kezelése</string>
|
||||||
<string name="app_profile_template_name">Név</string>
|
|
||||||
<string name="app_profile_template_id_invalid">Hibás sablon ID</string>
|
|
||||||
<string name="app_profile_template_sync">Online sablonok szinkronizálása</string>
|
|
||||||
<string name="app_profile_template_create">Sablon készítése</string>
|
<string name="app_profile_template_create">Sablon készítése</string>
|
||||||
<string name="app_profile_template_readonly">Csak olvasható</string>
|
|
||||||
<string name="app_profile_import_export">Import/Export</string>
|
|
||||||
<string name="app_profile_template_save_failed">A sablon mentése sikertelen</string>
|
|
||||||
<string name="app_profile_template_edit">Sablon szerkesztése</string>
|
<string name="app_profile_template_edit">Sablon szerkesztése</string>
|
||||||
<string name="app_profile_template_id">ID</string>
|
<string name="app_profile_template_id">ID</string>
|
||||||
<string name="settings_profile_template">App Profile sablon</string>
|
<string name="app_profile_template_id_invalid">Hibás sablon ID</string>
|
||||||
|
<string name="app_profile_template_name">Név</string>
|
||||||
<string name="app_profile_template_description">Leírás</string>
|
<string name="app_profile_template_description">Leírás</string>
|
||||||
<string name="app_profile_template_save">Mentés</string>
|
<string name="app_profile_template_save">Mentés</string>
|
||||||
<string name="settings_profile_template_summary">Az App Profile helyi és online sablonjának kezelése</string>
|
|
||||||
<string name="app_profile_template_delete">Törlés</string>
|
<string name="app_profile_template_delete">Törlés</string>
|
||||||
<string name="app_profile_template_import_empty">A vágólap üres!</string>
|
|
||||||
<string name="app_profile_template_view">Sablon megtekintése</string>
|
<string name="app_profile_template_view">Sablon megtekintése</string>
|
||||||
<string name="save_log">Naplók mentése</string>
|
<string name="app_profile_template_readonly">Csak olvasható</string>
|
||||||
<string name="enable_web_debugging_summary">A WebUI hibakeresésére használható, csak szükség esetén engedélyezze.</string>
|
<string name="app_profile_template_id_exist">A sablon ID már létezik!</string>
|
||||||
<string name="enable_web_debugging">WebView hibakeresés engedélyezése</string>
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
<string name="open">Megnyitás</string>
|
<string name="app_profile_import_from_clipboard">Importálás a vágólapról</string>
|
||||||
<string name="settings_uninstall_permanent">Végleges eltávolítás</string>
|
<string name="app_profile_export_to_clipboard">Exportálás a vágólapról</string>
|
||||||
<string name="select_file_tip">%1$s partíció képfájl ajánlott</string>
|
<string name="app_profile_template_export_empty">Nem található helyi sablon az exportáláshoz!</string>
|
||||||
<string name="select_kmi">KMI kiválasztása</string>
|
<string name="app_profile_template_import_success">Sikeresen importálva</string>
|
||||||
<string name="install_next">Következő</string>
|
<string name="app_profile_template_sync">Online sablonok szinkronizálása</string>
|
||||||
<string name="settings_uninstall_temporary">Ideiglenes eltávolítás</string>
|
<string name="app_profile_template_save_failed">A sablon mentése sikertelen</string>
|
||||||
<string name="settings_uninstall_temporary_message">A KernelSU ideiglenes eltávolítása, az eredeti állapot visszaállítása a következő újraindítás után.</string>
|
<string name="app_profile_template_import_empty">A vágólap üres!</string>
|
||||||
<string name="settings_uninstall">Eltávolítás</string>
|
<string name="module_changelog_failed">A változásnapló lekérése nem sikerült: %s</string>
|
||||||
<string name="flashing">Telepítés</string>
|
|
||||||
<string name="flash_success">Sikeres telepítés</string>
|
|
||||||
<string name="selected_lkm">Kiválasztott LKM: %s</string>
|
|
||||||
<string name="flash_failed">Sikertelen telepítés</string>
|
|
||||||
<string name="grant_root_failed">A root jog megadása sikertelen!</string>
|
|
||||||
<string name="install_inactive_slot">Telepítés inaktív helyre (OTA után)</string>
|
|
||||||
<string name="select_file">Fájl kiválasztása</string>
|
|
||||||
<string name="settings_uninstall_permanent_message">A KernelSU eltávolítása (root és az összes modul) teljesen és véglegesen.</string>
|
|
||||||
<string name="settings_restore_stock_image">Eredeti képfájl visszaállítása</string>
|
|
||||||
<string name="action">Művelet</string>
|
|
||||||
<string name="direct_install">Közvetlen telepítés (Ajánlott)</string>
|
|
||||||
<string name="install_inactive_slot_warning">Az eszköze **KÉNYSZERÍTETTEN** a jelenleg inaktív helyről fog indulni újraindítás után!\nCsak az OTA befejezése után használja.\nFolytatja?</string>
|
|
||||||
<string name="settings_restore_stock_image_message">Állítsa vissza a gyári képfájlt (ha létezik biztonsági mentés). Általában OTA előtt használják. Ha a KernelSU-t szeretné eltávolítani, használja a végleges eltávolítás opciót.</string>
|
|
||||||
<string name="settings_check_update">Frissítés ellenőrzése</string>
|
<string name="settings_check_update">Frissítés ellenőrzése</string>
|
||||||
<string name="settings_check_update_summary">Automatikusan keressen frissítéseket az alkalmazás megnyitásakor</string>
|
<string name="settings_check_update_summary">Automatikusan keressen frissítéseket az alkalmazás megnyitásakor</string>
|
||||||
|
<string name="grant_root_failed">A root jog megadása sikertelen!</string>
|
||||||
|
<string name="action">Művelet</string>
|
||||||
|
<string name="open">Megnyitás</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">WebView hibakeresés engedélyezése</string>
|
||||||
|
<string name="enable_web_debugging_summary">A WebUI hibakeresésére használható, csak szükség esetén engedélyezze.</string>
|
||||||
|
<string name="direct_install">Közvetlen telepítés (Ajánlott)</string>
|
||||||
|
<string name="select_file">Fájl kiválasztása</string>
|
||||||
|
<string name="install_inactive_slot">Telepítés inaktív helyre (OTA után)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Az eszköze **KÉNYSZERÍTETTEN** a jelenleg inaktív helyről fog indulni újraindítás után!\nCsak az OTA befejezése után használja.\nFolytatja?</string>
|
||||||
|
<string name="install_next">Következő</string>
|
||||||
|
<string name="select_file_tip">%1$s partíció képfájl ajánlott</string>
|
||||||
|
<string name="select_kmi">KMI kiválasztása</string>
|
||||||
|
<string name="settings_uninstall">Eltávolítás</string>
|
||||||
|
<string name="settings_uninstall_temporary">Ideiglenes eltávolítás</string>
|
||||||
|
<string name="settings_uninstall_permanent">Végleges eltávolítás</string>
|
||||||
|
<string name="settings_restore_stock_image">Eredeti képfájl visszaállítása</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">A KernelSU ideiglenes eltávolítása, az eredeti állapot visszaállítása a következő újraindítás után.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">A KernelSU eltávolítása (root és az összes modul) teljesen és véglegesen.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Állítsa vissza a gyári képfájlt (ha létezik biztonsági mentés). Általában OTA előtt használják. Ha a KernelSU-t szeretné eltávolítani, használja a végleges eltávolítás opciót.</string>
|
||||||
|
<string name="flashing">Telepítés</string>
|
||||||
|
<string name="flash_success">Sikeres telepítés</string>
|
||||||
|
<string name="flash_failed">Sikertelen telepítés</string>
|
||||||
|
<string name="selected_lkm">Kiválasztott LKM: %s</string>
|
||||||
|
<string name="save_log">Naplók mentése</string>
|
||||||
<string name="log_saved">Mentett naplók</string>
|
<string name="log_saved">Mentett naplók</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -112,6 +112,7 @@
|
|||||||
<string name="install_inactive_slot">Instal ke slot nonaktif (setelah OTA)</string>
|
<string name="install_inactive_slot">Instal ke slot nonaktif (setelah OTA)</string>
|
||||||
<string name="grant_root_failed">Gagal memberikan akses root!</string>
|
<string name="grant_root_failed">Gagal memberikan akses root!</string>
|
||||||
<string name="open">Buka</string>
|
<string name="open">Buka</string>
|
||||||
|
<string name="close">Tutup</string>
|
||||||
<string name="settings_check_update">Cek terbaru</string>
|
<string name="settings_check_update">Cek terbaru</string>
|
||||||
<string name="settings_check_update_summary">Cek terbaru setiap membuka aplikasi</string>
|
<string name="settings_check_update_summary">Cek terbaru setiap membuka aplikasi</string>
|
||||||
<string name="settings_uninstall_permanent_message">Hapus permanen KernelSU (root dan modul).</string>
|
<string name="settings_uninstall_permanent_message">Hapus permanen KernelSU (root dan modul).</string>
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
<string name="home_unsupported">Non supportato</string>
|
<string name="home_unsupported">Non supportato</string>
|
||||||
<string name="home_unsupported_reason">KernelSU ora supporta solo i kernel GKI</string>
|
<string name="home_unsupported_reason">KernelSU ora supporta solo i kernel GKI</string>
|
||||||
<string name="home_kernel">Kernel</string>
|
<string name="home_kernel">Kernel</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Versione del manager</string>
|
<string name="home_manager_version">Versione del manager</string>
|
||||||
<string name="home_fingerprint">Impronta della build di Android</string>
|
<string name="home_fingerprint">Impronta della build di Android</string>
|
||||||
<string name="home_selinux_status">Stato di SELinux</string>
|
<string name="home_selinux_status">Stato di SELinux</string>
|
||||||
@@ -22,7 +25,10 @@
|
|||||||
<string name="module_failed_to_disable">Impossibile disabilitare il modulo: %s</string>
|
<string name="module_failed_to_disable">Impossibile disabilitare il modulo: %s</string>
|
||||||
<string name="module_empty">Nessun modulo installato</string>
|
<string name="module_empty">Nessun modulo installato</string>
|
||||||
<string name="module">Modulo</string>
|
<string name="module">Modulo</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
<string name="uninstall">Disinstalla</string>
|
<string name="uninstall">Disinstalla</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
<string name="module_install">Installa</string>
|
<string name="module_install">Installa</string>
|
||||||
<string name="install">Installa</string>
|
<string name="install">Installa</string>
|
||||||
<string name="reboot">Riavvia</string>
|
<string name="reboot">Riavvia</string>
|
||||||
@@ -50,38 +56,46 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">Scopri come installare KernelSU e utilizzare i moduli</string>
|
<string name="home_click_to_learn_kernelsu">Scopri come installare KernelSU e utilizzare i moduli</string>
|
||||||
<string name="home_support_title">Supportaci</string>
|
<string name="home_support_title">Supportaci</string>
|
||||||
<string name="home_support_content">KernelSU è, e sempre sarà, gratuito e open source. Puoi comunque mostrarci il tuo apprezzamento facendo una donazione.</string>
|
<string name="home_support_content">KernelSU è, e sempre sarà, gratuito e open source. Puoi comunque mostrarci il tuo apprezzamento facendo una donazione.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
|
<string name="profile_default">Predefinito</string>
|
||||||
|
<string name="profile_template">Modello</string>
|
||||||
|
<string name="profile_custom">Personalizzato</string>
|
||||||
<string name="profile_name">Nome profilo</string>
|
<string name="profile_name">Nome profilo</string>
|
||||||
<string name="profile_namespace">Spazio dei nomi del mount</string>
|
<string name="profile_namespace">Spazio dei nomi del mount</string>
|
||||||
<string name="profile_namespace_global">Globale</string>
|
|
||||||
<string name="profile_groups">Gruppi</string>
|
|
||||||
<string name="profile_namespace_inherited">Ereditato</string>
|
<string name="profile_namespace_inherited">Ereditato</string>
|
||||||
|
<string name="profile_namespace_global">Globale</string>
|
||||||
<string name="profile_namespace_individual">Individuale</string>
|
<string name="profile_namespace_individual">Individuale</string>
|
||||||
<string name="profile_default">Predefinito</string>
|
<string name="profile_groups">Gruppi</string>
|
||||||
<string name="profile_custom">Personalizzato</string>
|
|
||||||
<string name="profile_template">Modello</string>
|
|
||||||
<string name="profile_umount_modules">Scollega moduli</string>
|
|
||||||
<string name="profile_selinux_context">Contesto SELinux</string>
|
|
||||||
<string name="failed_to_update_app_profile">Aggiornamento App Profile per %s fallito</string>
|
|
||||||
<string name="module_update">Aggiorna</string>
|
|
||||||
<string name="launch_app">Apri</string>
|
|
||||||
<string name="profile_capabilities">Capacità</string>
|
<string name="profile_capabilities">Capacità</string>
|
||||||
|
<string name="profile_selinux_context">Contesto SELinux</string>
|
||||||
|
<string name="profile_umount_modules">Scollega moduli</string>
|
||||||
|
<string name="failed_to_update_app_profile">Aggiornamento App Profile per %s fallito</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
<string name="settings_umount_modules_default">Scollega moduli da default</string>
|
<string name="settings_umount_modules_default">Scollega moduli da default</string>
|
||||||
|
<string name="settings_umount_modules_default_summary">Il valore predefinito per \"Scollega moduli\" in App Profile. Se attivato, rimuoverà tutte le modifiche al sistema da parte dei moduli per le applicazioni che non hanno un profilo impostato.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
|
<string name="profile_umount_modules_summary">Attivando questa opzione permetterai a KernelSU di ripristinare ogni file modificato dai moduli per questa app.</string>
|
||||||
|
<string name="profile_selinux_domain">Dominio</string>
|
||||||
<string name="profile_selinux_rules">Regole</string>
|
<string name="profile_selinux_rules">Regole</string>
|
||||||
|
<string name="module_update">Aggiorna</string>
|
||||||
<string name="module_downloading">Sto scaricando il modulo: %s</string>
|
<string name="module_downloading">Sto scaricando il modulo: %s</string>
|
||||||
<string name="module_start_downloading">Inizia a scaricare:%s</string>
|
<string name="module_start_downloading">Inizia a scaricare:%s</string>
|
||||||
<string name="new_version_available">Nuova versione: %s disponibile, tocca per aggiornare</string>
|
<string name="new_version_available">Nuova versione: %s disponibile, tocca per aggiornare</string>
|
||||||
|
<string name="launch_app">Apri</string>
|
||||||
<string name="force_stop_app" formatted="false">Arresto forzato</string>
|
<string name="force_stop_app" formatted="false">Arresto forzato</string>
|
||||||
<string name="restart_app">Riavvia</string>
|
<string name="restart_app">Riavvia</string>
|
||||||
<string name="failed_to_update_sepolicy">Aggiornamento regole SELinux per %s fallito</string>
|
<string name="failed_to_update_sepolicy">Aggiornamento regole SELinux per %s fallito</string>
|
||||||
<string name="profile_umount_modules_summary">Attivando questa opzione permetterai a KernelSU di ripristinare ogni file modificato dai moduli per questa app.</string>
|
|
||||||
<string name="profile_selinux_domain">Dominio</string>
|
|
||||||
<string name="settings_umount_modules_default_summary">Il valore predefinito per \"Scollega moduli\" in App Profile. Se attivato, rimuoverà tutte le modifiche al sistema da parte dei moduli per le applicazioni che non hanno un profilo impostato.</string>
|
|
||||||
<string name="module_changelog">Registro aggiornamenti</string>
|
<string name="module_changelog">Registro aggiornamenti</string>
|
||||||
|
<string name="settings_profile_template">Modelli App Profile</string>
|
||||||
|
<string name="settings_profile_template_summary">Gestisci i modelli locali e remoti di App Profile</string>
|
||||||
<string name="app_profile_template_create">Crea modello</string>
|
<string name="app_profile_template_create">Crea modello</string>
|
||||||
<string name="app_profile_template_edit">Modifica modello</string>
|
<string name="app_profile_template_edit">Modifica modello</string>
|
||||||
<string name="app_profile_template_id">identificatore</string>
|
<string name="app_profile_template_id">identificatore</string>
|
||||||
<string name="app_profile_template_id_invalid">Identificativo modello non valido</string>
|
<string name="app_profile_template_id_invalid">Identificativo modello non valido</string>
|
||||||
<string name="app_profile_template_name">Nome</string>
|
<string name="app_profile_template_name">Nome</string>
|
||||||
|
<string name="app_profile_template_description">Descrizione</string>
|
||||||
|
<string name="app_profile_template_save">Salva</string>
|
||||||
|
<string name="app_profile_template_delete">Elimina</string>
|
||||||
<string name="app_profile_template_view">Visualizza modello</string>
|
<string name="app_profile_template_view">Visualizza modello</string>
|
||||||
<string name="app_profile_template_readonly">Sola lettura</string>
|
<string name="app_profile_template_readonly">Sola lettura</string>
|
||||||
<string name="app_profile_template_id_exist">L\'identificatore del modello è già in uso!</string>
|
<string name="app_profile_template_id_exist">L\'identificatore del modello è già in uso!</string>
|
||||||
@@ -91,39 +105,269 @@
|
|||||||
<string name="app_profile_template_export_empty">Impossibile trovare un modello locale da esportare!</string>
|
<string name="app_profile_template_export_empty">Impossibile trovare un modello locale da esportare!</string>
|
||||||
<string name="app_profile_template_import_success">Importato con successo</string>
|
<string name="app_profile_template_import_success">Importato con successo</string>
|
||||||
<string name="app_profile_template_sync">Sincronizza i modelli remoti</string>
|
<string name="app_profile_template_sync">Sincronizza i modelli remoti</string>
|
||||||
<string name="app_profile_template_import_empty">Gli appunti sono vuoti!</string>
|
|
||||||
<string name="grant_root_failed">Impossibile ottenere l\'accesso root!</string>
|
|
||||||
<string name="settings_profile_template">Modelli App Profile</string>
|
|
||||||
<string name="settings_profile_template_summary">Gestisci i modelli locali e remoti di App Profile</string>
|
|
||||||
<string name="app_profile_template_delete">Elimina</string>
|
|
||||||
<string name="app_profile_template_description">Descrizione</string>
|
|
||||||
<string name="app_profile_template_save">Salva</string>
|
|
||||||
<string name="app_profile_template_save_failed">Impossibile salvare il modello</string>
|
<string name="app_profile_template_save_failed">Impossibile salvare il modello</string>
|
||||||
<string name="open">Apri</string>
|
<string name="app_profile_template_import_empty">Gli appunti sono vuoti!</string>
|
||||||
<string name="module_changelog_failed">Impossibile reperire il changelog: %s</string>
|
<string name="module_changelog_failed">Impossibile reperire il changelog: %s</string>
|
||||||
<string name="settings_check_update">Controlla aggiornamenti</string>
|
<string name="settings_check_update">Controlla aggiornamenti</string>
|
||||||
<string name="settings_check_update_summary">Controlla automaticamente la disponibilità di aggiornamenti all\'apertura dell\'applicazione</string>
|
<string name="settings_check_update_summary">Controlla automaticamente la disponibilità di aggiornamenti all\'apertura dell\'applicazione</string>
|
||||||
|
<string name="grant_root_failed">Impossibile ottenere l\'accesso root!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Apri</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Abilita il debug di WebView</string>
|
<string name="enable_web_debugging">Abilita il debug di WebView</string>
|
||||||
<string name="enable_web_debugging_summary">Può essere usato per svolgere il debug di WebUI, è consigliato attivarlo solo quando necessario.</string>
|
<string name="enable_web_debugging_summary">Può essere usato per svolgere il debug di WebUI, è consigliato attivarlo solo quando necessario.</string>
|
||||||
<string name="select_file_tip">È consigliato usare immagine della partizione %1$s</string>
|
|
||||||
<string name="select_kmi">Scegli il KMI</string>
|
|
||||||
<string name="install_next">Avanti</string>
|
|
||||||
<string name="direct_install">Installazione diretta (Raccomandata)</string>
|
<string name="direct_install">Installazione diretta (Raccomandata)</string>
|
||||||
<string name="select_file">Scegli un file</string>
|
<string name="select_file">Scegli un file</string>
|
||||||
<string name="install_inactive_slot">Installa nello slot inattivo (dopo OTA)</string>
|
<string name="install_inactive_slot">Installa nello slot inattivo (dopo OTA)</string>
|
||||||
<string name="install_inactive_slot_warning">Il tuo dispositivo sarà **FORZATO** ad avviarsi nello slot inattivo dopo il riavvio!
|
<string name="install_inactive_slot_warning">Il tuo dispositivo sarà **FORZATO** ad avviarsi nello slot inattivo dopo il riavvio!
|
||||||
\nUsa questa opzione solo quando l\'applicazione dell\'aggiornamento OTA è terminata.
|
\nUsa questa opzione solo quando l\'applicazione dell\'aggiornamento OTA è terminata.
|
||||||
\nProcedere?</string>
|
\nProcedere?</string>
|
||||||
|
<string name="install_next">Avanti</string>
|
||||||
|
<string name="select_file_tip">È consigliato usare immagine della partizione %1$s</string>
|
||||||
|
<string name="select_kmi">Scegli il KMI</string>
|
||||||
<string name="settings_uninstall">Disinstalla</string>
|
<string name="settings_uninstall">Disinstalla</string>
|
||||||
<string name="settings_uninstall_temporary">Disinstalla temporaneamente</string>
|
<string name="settings_uninstall_temporary">Disinstalla temporaneamente</string>
|
||||||
<string name="settings_uninstall_permanent">Disinstalla permanentemente</string>
|
<string name="settings_uninstall_permanent">Disinstalla permanentemente</string>
|
||||||
<string name="settings_restore_stock_image">Ripristina immagine originale del produttore</string>
|
<string name="settings_restore_stock_image">Ripristina immagine originale del produttore</string>
|
||||||
<string name="settings_uninstall_temporary_message">Disinstalla temporaneamente KernelSU, ripristina lo stato originale dopo il prossimo riavvio.</string>
|
<string name="settings_uninstall_temporary_message">Disinstalla temporaneamente KernelSU, ripristina lo stato originale dopo il prossimo riavvio.</string>
|
||||||
<string name="settings_uninstall_permanent_message">Disinstalla KernelSU (root e tutti i moduli) completamente e permanentemente.</string>
|
<string name="settings_uninstall_permanent_message">Disinstalla KernelSU (root e tutti i moduli) completamente e permanentemente.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Ripristina l\'immagine di fabbrica del produttore (se il backup è presente), solitamente usato prima di applicare l\'OTA; se devi disinstallare KernelSU, utilizza invece \"Disinstalla permanentemente\".</string>
|
||||||
<string name="flashing">Installazione</string>
|
<string name="flashing">Installazione</string>
|
||||||
<string name="flash_success">Installazione completata</string>
|
<string name="flash_success">Installazione completata</string>
|
||||||
<string name="flash_failed">Installazione fallita</string>
|
<string name="flash_failed">Installazione fallita</string>
|
||||||
<string name="selected_lkm">LKM selezionato: %s</string>
|
<string name="selected_lkm">LKM selezionato: %s</string>
|
||||||
<string name="settings_restore_stock_image_message">Ripristina l\'immagine di fabbrica del produttore (se il backup è presente), solitamente usato prima di applicare l\'OTA; se devi disinstallare KernelSU, utilizza invece \"Disinstalla permanentemente\".</string>
|
|
||||||
<string name="save_log">Salva Registri</string>
|
<string name="save_log">Salva Registri</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">root の付与に失敗しました!</string>
|
<string name="grant_root_failed">root の付与に失敗しました!</string>
|
||||||
<string name="action">アクション</string>
|
<string name="action">アクション</string>
|
||||||
<string name="open">開く</string>
|
<string name="open">開く</string>
|
||||||
|
<string name="close">閉じる</string>
|
||||||
<string name="enable_web_debugging">WebView デバッグを有効化する</string>
|
<string name="enable_web_debugging">WebView デバッグを有効化する</string>
|
||||||
<string name="enable_web_debugging_summary">WebUI のデバッグに使用できます。必要な場合でのみ有効化してください</string>
|
<string name="enable_web_debugging_summary">WebUI のデバッグに使用できます。必要な場合でのみ有効化してください</string>
|
||||||
<string name="direct_install">直接インストール (推奨)</string>
|
<string name="direct_install">直接インストール (推奨)</string>
|
||||||
@@ -210,7 +211,7 @@
|
|||||||
<string name="color_orange">オレンジ</string>
|
<string name="color_orange">オレンジ</string>
|
||||||
<string name="color_pink">ピンク</string>
|
<string name="color_pink">ピンク</string>
|
||||||
<string name="color_gray">グレー</string>
|
<string name="color_gray">グレー</string>
|
||||||
<string name="color_ivory">アイボリー</string>
|
<string name="color_yellow">イエロー</string>
|
||||||
<string name="flash_option">ブラシの設定</string>
|
<string name="flash_option">ブラシの設定</string>
|
||||||
<string name="flash_option_tip">フラッシュするファイルを選択</string>
|
<string name="flash_option_tip">フラッシュするファイルを選択</string>
|
||||||
<string name="horizon_kernel">AnyKernel3 をインストール</string>
|
<string name="horizon_kernel">AnyKernel3 をインストール</string>
|
||||||
@@ -225,7 +226,6 @@
|
|||||||
<string name="batch_authorization">権限を付与</string>
|
<string name="batch_authorization">権限を付与</string>
|
||||||
<string name="batch_cancel_authorization">撤回する</string>
|
<string name="batch_cancel_authorization">撤回する</string>
|
||||||
<string name="backup">バックアップ</string>
|
<string name="backup">バックアップ</string>
|
||||||
<string name="color_yellow">イエロー</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">カーネルモジュールは現在インストールされていません</string>
|
<string name="kpm_empty">カーネルモジュールは現在インストールされていません</string>
|
||||||
<string name="kpm_version">バージョン</string>
|
<string name="kpm_version">バージョン</string>
|
||||||
@@ -298,7 +298,7 @@
|
|||||||
<string name="flash_failed_message">フラッシュに失敗しました</string>
|
<string name="flash_failed_message">フラッシュに失敗しました</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM の修復またはインストール</string>
|
<string name="Lkm_install_methods">LKM の修復またはインストール</string>
|
||||||
<string name="GKI_install_methods">GKI または 非 GKI のインストール</string>
|
<string name="GKI_install_methods">AnyKernel3 をフラッシュ</string>
|
||||||
<string name="kernel_version_log">カーネルのバージョン: %1$s</string>
|
<string name="kernel_version_log">カーネルのバージョン: %1$s</string>
|
||||||
<string name="tool_version_log">パッチ適用ツールの使用: %1$s</string>
|
<string name="tool_version_log">パッチ適用ツールの使用: %1$s</string>
|
||||||
<string name="configuration">設定</string>
|
<string name="configuration">設定</string>
|
||||||
@@ -328,8 +328,10 @@
|
|||||||
<string name="show_kpm_info">KPM 機能を表示</string>
|
<string name="show_kpm_info">KPM 機能を表示</string>
|
||||||
<string name="show_kpm_info_summary">KPM の情報と機能をホームとボトムバーに表示します (アプリを開き直す必要があります)</string>
|
<string name="show_kpm_info_summary">KPM の情報と機能をホームとボトムバーに表示します (アプリを開き直す必要があります)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">WebUI X を使用する</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">より多くの API をサポートする WebUI の代わりに WebUI X を使用します</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">WebUI に Eruda をインジェクトする</string>
|
<string name="use_webuix_eruda">WebUI に Eruda をインジェクトする</string>
|
||||||
<string name="use_webuix_eruda_summary">デバッグを容易にするために WebUI X にデバッグコンソールを挿入します。Web デバッグが ON になっている必要があります。</string>
|
<string name="use_webuix_eruda_summary">デバッグを容易にするために WebUI X にデバッグコンソールを挿入します。Web デバッグが ON になっている必要があります。</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -351,4 +353,21 @@
|
|||||||
<string name="language_follow_system">システムに従う</string>
|
<string name="language_follow_system">システムに従う</string>
|
||||||
<string name="language_changed">言語の変更を適用するために再起動しています</string>
|
<string name="language_changed">言語の変更を適用するために再起動しています</string>
|
||||||
<string name="settings_card_dim">カードの暗さを調整</string>
|
<string name="settings_card_dim">カードの暗さを調整</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">上詰め</string>
|
||||||
|
<string name="scroll_to_bottom">画面下</string>
|
||||||
|
<string name="scroll_to_top_description">一番上までスクロール</string>
|
||||||
|
<string name="scroll_to_bottom_description">下までスクロールします</string>
|
||||||
|
<string name="authorized">承認済み</string>
|
||||||
|
<string name="unauthorized">未認証</string>
|
||||||
|
<string name="selected">選択中</string>
|
||||||
|
<string name="select">オプション</string>
|
||||||
|
<string name="profile_umount_modules_disable">カスタムアンインストールモジュールを無効にする</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">エラーコード</string>
|
||||||
|
<string name="check_log">ログを確認してください</string>
|
||||||
|
<string name="installing_module">モジュール設置中 %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d モジュールのインストールに失敗しました</string>
|
||||||
|
<string name="module_download_error">モデルのダウンロードに失敗しました</string>
|
||||||
|
<string name="kernel_flashing">カーネルをフラッシュ中</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,67 +1,371 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="reboot_to_apply">ಪರಿಣಾಮ ಬೀರಲು ರೀಬೂಟ್ ಮಾಡಿ</string>
|
|
||||||
<string name="home_click_to_learn_kernelsu">KernelSU ಅನ್ನು ಹೇಗೆ ಸ್ಥಾಪಿಸಬೇಕು ಮತ್ತು ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ಬಳಸುವುದು ಹೇಗೆ ಎಂದು ತಿಳಿಯಿರಿ</string>
|
|
||||||
<string name="selinux_status_unknown">ತಿಳಿಯದ</string>
|
|
||||||
<string name="show_system_apps">ಸಿಸ್ಟಮ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ತೋರಿಸಿ</string>
|
|
||||||
<string name="module_uninstall_success">%s ಅನ್ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲಾಗಿದೆ</string>
|
|
||||||
<string name="profile_umount_modules">Umount ಮಾಡ್ಯೂಲ್ಗಳು</string>
|
|
||||||
<string name="send_log">ಲಾಗ್ ಕಳುಹಿಸಿ</string>
|
|
||||||
<string name="home_support_title">ನಮ್ಮನ್ನು ಬೆಂಬಲಿಸಿ</string>
|
|
||||||
<string name="profile_namespace_inherited">ಪಿತ್ರಾರ್ಜಿತ</string>
|
|
||||||
<string name="module_magisk_conflict">ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ ಏಕೆಂದರೆ ಇದು ಮ್ಯಾಜಿಸ್ಕ್ನೊಂದಿಗೆ ಸಂಘರ್ಷವಾಗಿದೆ!</string>
|
|
||||||
<string name="module_changelog">ಚೇಂಜ್ಲಾಗ್</string>
|
|
||||||
<string name="selinux_status_permissive">Permissive</string>
|
|
||||||
<string name="settings_umount_modules_default">ಡೀಫಾಲ್ಟ್ ಆಗಿ Umount ಮಾಡ್ಯೂಲ್</string>
|
|
||||||
<string name="profile_umount_modules_summary">ಈ ಆಯ್ಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದರಿಂದ ಈ ಅಪ್ಲಿಕೇಶನ್ಗಾಗಿ ಮಾಡ್ಯೂಲ್ಗಳ ಮೂಲಕ ಯಾವುದೇ ಮಾರ್ಪಡಿಸಿದ ಫೈಲ್ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಲು KernelSU ಗೆ ಅನುಮತಿಸುತ್ತದೆ.</string>
|
|
||||||
<string name="profile_namespace_individual">ವೈಯಕ್ತಿಕ</string>
|
|
||||||
<string name="module_failed_to_enable">ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ವಿಫಲವಾಗಿದೆ: %s</string>
|
|
||||||
<string name="force_stop_app">ಫೋರ್ಸ್ ಸ್ಟಾಪ್</string>
|
|
||||||
<string name="reboot_edl">EDL ಗೆ ರೀಬೂಟ್</string>
|
|
||||||
<string name="profile_capabilities">ಸಾಮರ್ಥ್ಯಗಳು</string>
|
|
||||||
<string name="home_superuser_count">ಸೂಪರ್ಯೂಸರ್ಗಳು: %d</string>
|
|
||||||
<string name="module_start_downloading">ಡೌನ್ಲೋಡ್ ಮಾಡುವುದನ್ನು ಪ್ರಾರಂಭಿಸಿ: %s</string>
|
|
||||||
<string name="profile_namespace_global">ಜಾಗತಿಕ</string>
|
|
||||||
<string name="settings_umount_modules_default_summary">ಅಪ್ಲಿಕೇಶನ್ ಪ್ರೊಫೈಲ್ಗಳಲ್ಲಿ \"Umount ಮಾಡ್ಯೂಲ್\" ಗಾಗಿ ಜಾಗತಿಕ ಡೀಫಾಲ್ಟ್ ಮೌಲ್ಯ. ಸಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಪ್ರೊಫೈಲ್ ಸೆಟ್ ಅನ್ನು ಹೊಂದಿರದ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ಸಿಸ್ಟಮ್ಗೆ ಎಲ್ಲಾ ಮಾಡ್ಯೂಲ್ ಮಾರ್ಪಾಡುಗಳನ್ನು ಇದು ತೆಗೆದುಹಾಕುತ್ತದೆ.</string>
|
|
||||||
<string name="home_module_count">ಮಾಡ್ಯೂಲ್ಗಳು: %d</string>
|
|
||||||
<string name="profile_selinux_context">SELinux ಸಂದರ್ಭ</string>
|
|
||||||
<string name="profile_default">ಡೀಫಾಲ್ಟ್</string>
|
|
||||||
<string name="launch_app" formatted="false">ಲಾಂಚ್</string>
|
|
||||||
<string name="safe_mode">ಸುರಕ್ಷಿತ ಮೋಡ್</string>
|
|
||||||
<string name="reboot_userspace">ಸಾಫ್ಟ್ ರೀಬೂಟ್</string>
|
|
||||||
<string name="profile_name">ಪ್ರೊಫೈಲ್ ಹೆಸರು</string>
|
|
||||||
<string name="home_support_content">KernelSU ಉಚಿತ ಮತ್ತು ಮುಕ್ತ ಮೂಲವಾಗಿದೆ ಮತ್ತು ಯಾವಾಗಲೂ ಇರುತ್ತದೆ. ಆದಾಗ್ಯೂ ನೀವು ದೇಣಿಗೆ ನೀಡುವ ಮೂಲಕ ನೀವು ಕಾಳಜಿ ವಹಿಸುತ್ತೀರಿ ಎಂದು ನಮಗೆ ತೋರಿಸಬಹುದು.</string>
|
|
||||||
<string name="uninstall">ಅನ್ಇನ್ಸ್ಟಾಲ್</string>
|
|
||||||
<string name="profile_namespace">ಮೌಂಟ್ ನೇಮ್ಸ್ಪೇಸ್</string>
|
|
||||||
<string name="profile_selinux_rules">ನಿಯಮಗಳು</string>
|
|
||||||
<string name="profile_groups">ಗುಂಪುಗಳು</string>
|
|
||||||
<string name="module">ಮಾಡ್ಯೂಲ್</string>
|
|
||||||
<string name="module_author">ಲೇಖಕ</string>
|
|
||||||
<string name="about">ಬಗ್ಗೆ</string>
|
|
||||||
<string name="home_working_version">ವರ್ಷನ್: %d</string>
|
|
||||||
<string name="reboot">ರೀಬೂಟ್</string>
|
|
||||||
<string name="home_unsupported_reason">KernelSU ಈಗ GKI ಕರ್ನಲ್ಗಳನ್ನು ಮಾತ್ರ ಬೆಂಬಲಿಸುತ್ತದೆ</string>
|
|
||||||
<string name="home_selinux_status">SELinux ಸ್ಥಿತಿ</string>
|
|
||||||
<string name="hide_system_apps">ಸಿಸ್ಟಮ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಮರೆಮಾಡಿ</string>
|
|
||||||
<string name="module_version">ವರ್ಷನ್</string>
|
|
||||||
<string name="home_unsupported">ಬೆಂಬಲಿತವಾಗಿಲ್ಲ</string>
|
|
||||||
<string name="profile_selinux_domain">ಡೊಮೇನ್</string>
|
|
||||||
<string name="home">ಮನೆ</string>
|
<string name="home">ಮನೆ</string>
|
||||||
<string name="profile_custom">ಕಸ್ಟಮ್</string>
|
<string name="home_not_installed">Not installed</string>
|
||||||
<string name="profile_template">ಟೆಂಪ್ಲೇಟ್</string>
|
<string name="home_click_to_install">Click to install</string>
|
||||||
<string name="refresh">ರಿಫ್ರೆಶ್</string>
|
|
||||||
<string name="module_downloading">ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ: %s</string>
|
|
||||||
<string name="home_learn_kernelsu">KernelSU ಕಲಿಯಿರಿ</string>
|
|
||||||
<string name="module_uninstall_confirm">%s ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ\?</string>
|
|
||||||
<string name="module_uninstall_failed">ಅನ್ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ: %s</string>
|
|
||||||
<string name="superuser">ಸೂಪರ್ಯೂಸರ್</string>
|
|
||||||
<string name="home_working">ಕೆಲಸ ಮಾಡುತ್ತಿದೆ</string>
|
<string name="home_working">ಕೆಲಸ ಮಾಡುತ್ತಿದೆ</string>
|
||||||
|
<string name="home_working_version">ವರ್ಷನ್: %d</string>
|
||||||
|
<string name="home_superuser_count">ಸೂಪರ್ಯೂಸರ್ಗಳು: %d</string>
|
||||||
|
<string name="home_module_count">ಮಾಡ್ಯೂಲ್ಗಳು: %d</string>
|
||||||
|
<string name="home_unsupported">ಬೆಂಬಲಿತವಾಗಿಲ್ಲ</string>
|
||||||
|
<string name="home_unsupported_reason">KernelSU ಈಗ GKI ಕರ್ನಲ್ಗಳನ್ನು ಮಾತ್ರ ಬೆಂಬಲಿಸುತ್ತದೆ</string>
|
||||||
|
<string name="home_kernel">ಕರ್ನಲ್</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
|
<string name="home_manager_version">ಮ್ಯಾನೇಜರ್ ವರ್ಷನ್</string>
|
||||||
|
<string name="home_fingerprint">Fingerprint</string>
|
||||||
|
<string name="home_selinux_status">SELinux ಸ್ಥಿತಿ</string>
|
||||||
|
<string name="selinux_status_disabled">Disabled</string>
|
||||||
|
<string name="selinux_status_enforcing">Enforcing</string>
|
||||||
|
<string name="selinux_status_permissive">Permissive</string>
|
||||||
|
<string name="selinux_status_unknown">ತಿಳಿಯದ</string>
|
||||||
|
<string name="superuser">ಸೂಪರ್ಯೂಸರ್</string>
|
||||||
|
<string name="module_failed_to_enable">ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ವಿಫಲವಾಗಿದೆ: %s</string>
|
||||||
<string name="module_failed_to_disable">ಮಾಡ್ಯೂಲ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ವಿಫಲವಾಗಿದೆ: %s</string>
|
<string name="module_failed_to_disable">ಮಾಡ್ಯೂಲ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ವಿಫಲವಾಗಿದೆ: %s</string>
|
||||||
<string name="module_empty">ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ</string>
|
<string name="module_empty">ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ</string>
|
||||||
<string name="home_kernel">ಕರ್ನಲ್</string>
|
<string name="module">ಮಾಡ್ಯೂಲ್</string>
|
||||||
<string name="failed_to_update_app_profile">%s ಗಾಗಿ ಅಪ್ಲಿಕೇಶನ್ ಪ್ರೊಫೈಲ್ ಅನ್ನು ನವೀಕರಿಸಲು ವಿಫಲವಾಗಿದೆ</string>
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
|
<string name="uninstall">ಅನ್ಇನ್ಸ್ಟಾಲ್</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
|
<string name="module_install">Install</string>
|
||||||
|
<string name="install">Install</string>
|
||||||
|
<string name="reboot">ರೀಬೂಟ್</string>
|
||||||
|
<string name="settings">Settings</string>
|
||||||
|
<string name="reboot_userspace">ಸಾಫ್ಟ್ ರೀಬೂಟ್</string>
|
||||||
|
<string name="reboot_recovery">Reboot to Recovery</string>
|
||||||
|
<string name="reboot_bootloader">Reboot to Bootloader</string>
|
||||||
|
<string name="reboot_download">Reboot to Download</string>
|
||||||
|
<string name="reboot_edl">EDL ಗೆ ರೀಬೂಟ್</string>
|
||||||
|
<string name="about">ಬಗ್ಗೆ</string>
|
||||||
|
<string name="module_uninstall_confirm">%s ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ\?</string>
|
||||||
|
<string name="module_uninstall_success">%s ಅನ್ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲಾಗಿದೆ</string>
|
||||||
|
<string name="module_uninstall_failed">ಅನ್ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ: %s</string>
|
||||||
|
<string name="module_version">ವರ್ಷನ್</string>
|
||||||
|
<string name="module_author">ಲೇಖಕ</string>
|
||||||
|
<string name="refresh">ರಿಫ್ರೆಶ್</string>
|
||||||
|
<string name="show_system_apps">ಸಿಸ್ಟಮ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ತೋರಿಸಿ</string>
|
||||||
|
<string name="hide_system_apps">ಸಿಸ್ಟಮ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಮರೆಮಾಡಿ</string>
|
||||||
|
<string name="send_log">ಲಾಗ್ ಕಳುಹಿಸಿ</string>
|
||||||
|
<string name="safe_mode">ಸುರಕ್ಷಿತ ಮೋಡ್</string>
|
||||||
|
<string name="reboot_to_apply">ಪರಿಣಾಮ ಬೀರಲು ರೀಬೂಟ್ ಮಾಡಿ</string>
|
||||||
|
<string name="module_magisk_conflict">ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ ಏಕೆಂದರೆ ಇದು ಮ್ಯಾಜಿಸ್ಕ್ನೊಂದಿಗೆ ಸಂಘರ್ಷವಾಗಿದೆ!</string>
|
||||||
|
<string name="home_learn_kernelsu">KernelSU ಕಲಿಯಿರಿ</string>
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
<string name="home_manager_version">ಮ್ಯಾನೇಜರ್ ವರ್ಷನ್</string>
|
<string name="home_click_to_learn_kernelsu">KernelSU ಅನ್ನು ಹೇಗೆ ಸ್ಥಾಪಿಸಬೇಕು ಮತ್ತು ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ಬಳಸುವುದು ಹೇಗೆ ಎಂದು ತಿಳಿಯಿರಿ</string>
|
||||||
|
<string name="home_support_title">ನಮ್ಮನ್ನು ಬೆಂಬಲಿಸಿ</string>
|
||||||
|
<string name="home_support_content">KernelSU ಉಚಿತ ಮತ್ತು ಮುಕ್ತ ಮೂಲವಾಗಿದೆ ಮತ್ತು ಯಾವಾಗಲೂ ಇರುತ್ತದೆ. ಆದಾಗ್ಯೂ ನೀವು ದೇಣಿಗೆ ನೀಡುವ ಮೂಲಕ ನೀವು ಕಾಳಜಿ ವಹಿಸುತ್ತೀರಿ ಎಂದು ನಮಗೆ ತೋರಿಸಬಹುದು.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
|
<string name="profile_default">ಡೀಫಾಲ್ಟ್</string>
|
||||||
|
<string name="profile_template">ಟೆಂಪ್ಲೇಟ್</string>
|
||||||
|
<string name="profile_custom">ಕಸ್ಟಮ್</string>
|
||||||
|
<string name="profile_name">ಪ್ರೊಫೈಲ್ ಹೆಸರು</string>
|
||||||
|
<string name="profile_namespace">ಮೌಂಟ್ ನೇಮ್ಸ್ಪೇಸ್</string>
|
||||||
|
<string name="profile_namespace_inherited">ಪಿತ್ರಾರ್ಜಿತ</string>
|
||||||
|
<string name="profile_namespace_global">ಜಾಗತಿಕ</string>
|
||||||
|
<string name="profile_namespace_individual">ವೈಯಕ್ತಿಕ</string>
|
||||||
|
<string name="profile_groups">ಗುಂಪುಗಳು</string>
|
||||||
|
<string name="profile_capabilities">ಸಾಮರ್ಥ್ಯಗಳು</string>
|
||||||
|
<string name="profile_selinux_context">SELinux ಸಂದರ್ಭ</string>
|
||||||
|
<string name="profile_umount_modules">Umount ಮಾಡ್ಯೂಲ್ಗಳು</string>
|
||||||
|
<string name="failed_to_update_app_profile">%s ಗಾಗಿ ಅಪ್ಲಿಕೇಶನ್ ಪ್ರೊಫೈಲ್ ಅನ್ನು ನವೀಕರಿಸಲು ವಿಫಲವಾಗಿದೆ</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
|
<string name="settings_umount_modules_default">ಡೀಫಾಲ್ಟ್ ಆಗಿ Umount ಮಾಡ್ಯೂಲ್</string>
|
||||||
|
<string name="settings_umount_modules_default_summary">ಅಪ್ಲಿಕೇಶನ್ ಪ್ರೊಫೈಲ್ಗಳಲ್ಲಿ \"Umount ಮಾಡ್ಯೂಲ್\" ಗಾಗಿ ಜಾಗತಿಕ ಡೀಫಾಲ್ಟ್ ಮೌಲ್ಯ. ಸಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಪ್ರೊಫೈಲ್ ಸೆಟ್ ಅನ್ನು ಹೊಂದಿರದ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ಸಿಸ್ಟಮ್ಗೆ ಎಲ್ಲಾ ಮಾಡ್ಯೂಲ್ ಮಾರ್ಪಾಡುಗಳನ್ನು ಇದು ತೆಗೆದುಹಾಕುತ್ತದೆ.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
|
<string name="profile_umount_modules_summary">ಈ ಆಯ್ಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದರಿಂದ ಈ ಅಪ್ಲಿಕೇಶನ್ಗಾಗಿ ಮಾಡ್ಯೂಲ್ಗಳ ಮೂಲಕ ಯಾವುದೇ ಮಾರ್ಪಡಿಸಿದ ಫೈಲ್ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಲು KernelSU ಗೆ ಅನುಮತಿಸುತ್ತದೆ.</string>
|
||||||
|
<string name="profile_selinux_domain">ಡೊಮೇನ್</string>
|
||||||
|
<string name="profile_selinux_rules">ನಿಯಮಗಳು</string>
|
||||||
|
<string name="module_update">Update</string>
|
||||||
|
<string name="module_downloading">ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ: %s</string>
|
||||||
|
<string name="module_start_downloading">ಡೌನ್ಲೋಡ್ ಮಾಡುವುದನ್ನು ಪ್ರಾರಂಭಿಸಿ: %s</string>
|
||||||
<string name="new_version_available">ಹೊಸ ಆವೃತ್ತಿ: %s ಲಭ್ಯವಿದೆ, ಅಪ್ಗ್ರೇಡ್ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ</string>
|
<string name="new_version_available">ಹೊಸ ಆವೃತ್ತಿ: %s ಲಭ್ಯವಿದೆ, ಅಪ್ಗ್ರೇಡ್ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ</string>
|
||||||
|
<string name="launch_app">ಲಾಂಚ್</string>
|
||||||
|
<string name="force_stop_app" formatted="false">ಫೋರ್ಸ್ ಸ್ಟಾಪ್</string>
|
||||||
|
<string name="restart_app">Restart</string>
|
||||||
|
<string name="failed_to_update_sepolicy">Failed to update SELinux rules for %s</string>
|
||||||
|
<string name="module_changelog">ಚೇಂಜ್ಲಾಗ್</string>
|
||||||
|
<string name="settings_profile_template">App Profile Template</string>
|
||||||
|
<string name="settings_profile_template_summary">Manage local and online template of App Profile</string>
|
||||||
|
<string name="app_profile_template_create">Create template</string>
|
||||||
|
<string name="app_profile_template_edit">Edit template</string>
|
||||||
|
<string name="app_profile_template_id">ID</string>
|
||||||
|
<string name="app_profile_template_id_invalid">Invalid template ID</string>
|
||||||
|
<string name="app_profile_template_name">Name</string>
|
||||||
|
<string name="app_profile_template_description">Description</string>
|
||||||
|
<string name="app_profile_template_save">Save</string>
|
||||||
|
<string name="app_profile_template_delete">Delete</string>
|
||||||
|
<string name="app_profile_template_view">View template</string>
|
||||||
|
<string name="app_profile_template_readonly">Read only</string>
|
||||||
|
<string name="app_profile_template_id_exist">Template ID already exists!</string>
|
||||||
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Import from clipboard</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Export to clipboard</string>
|
||||||
|
<string name="app_profile_template_export_empty">Cannot find local template to export!</string>
|
||||||
|
<string name="app_profile_template_import_success">Imported successfully</string>
|
||||||
|
<string name="app_profile_template_sync">Sync online templates</string>
|
||||||
|
<string name="app_profile_template_save_failed">Failed to save template</string>
|
||||||
|
<string name="app_profile_template_import_empty">Clipboard is empty!</string>
|
||||||
|
<string name="module_changelog_failed">Fetch changelog failed: %s</string>
|
||||||
|
<string name="settings_check_update">Check update</string>
|
||||||
|
<string name="settings_check_update_summary">Automatically check for updates when opening the app</string>
|
||||||
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
|
<string name="select_file">Select a image that needs to be patched</string>
|
||||||
|
<string name="install_inactive_slot">Install to inactive slot (After OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
|
||||||
|
<string name="install_next">Next</string>
|
||||||
|
<string name="select_file_tip">%1$s partition image is recommended</string>
|
||||||
|
<string name="select_kmi">Select KMI</string>
|
||||||
|
<string name="settings_uninstall">Uninstall</string>
|
||||||
|
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
||||||
|
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
||||||
|
<string name="settings_restore_stock_image">Restore stock image</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
||||||
|
<string name="flashing">Flashing</string>
|
||||||
|
<string name="flash_success">Flash success</string>
|
||||||
|
<string name="flash_failed">Flash failed</string>
|
||||||
|
<string name="selected_lkm">Selected LKM: %s</string>
|
||||||
<string name="save_log">ಲಾಗ್ಗಳನ್ನು ಉಳಿಸಿ</string>
|
<string name="save_log">ಲಾಗ್ಗಳನ್ನು ಉಳಿಸಿ</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
<string name="home_unsupported">지원되지 않음</string>
|
<string name="home_unsupported">지원되지 않음</string>
|
||||||
<string name="home_unsupported_reason">KernelSU는 현재 GKI 커널만 지원합니다</string>
|
<string name="home_unsupported_reason">KernelSU는 현재 GKI 커널만 지원합니다</string>
|
||||||
<string name="home_kernel">커널</string>
|
<string name="home_kernel">커널</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">매니저 버전</string>
|
<string name="home_manager_version">매니저 버전</string>
|
||||||
<string name="home_fingerprint">빌드 정보</string>
|
<string name="home_fingerprint">빌드 정보</string>
|
||||||
<string name="home_selinux_status">SELinux 상태</string>
|
<string name="home_selinux_status">SELinux 상태</string>
|
||||||
@@ -22,7 +25,10 @@
|
|||||||
<string name="module_failed_to_disable">모듈 비활성화 실패: %s</string>
|
<string name="module_failed_to_disable">모듈 비활성화 실패: %s</string>
|
||||||
<string name="module_empty">설치된 모듈 없음</string>
|
<string name="module_empty">설치된 모듈 없음</string>
|
||||||
<string name="module">모듈</string>
|
<string name="module">모듈</string>
|
||||||
|
<string name="module_sort_action_first">정렬 (동작이 있는 것 우선)</string>
|
||||||
|
<string name="module_sort_enabled_first">정렬 (활성화됨 우선)</string>
|
||||||
<string name="uninstall">삭제</string>
|
<string name="uninstall">삭제</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
<string name="module_install">설치</string>
|
<string name="module_install">설치</string>
|
||||||
<string name="install">설치</string>
|
<string name="install">설치</string>
|
||||||
<string name="reboot">다시 시작</string>
|
<string name="reboot">다시 시작</string>
|
||||||
@@ -46,86 +52,320 @@
|
|||||||
<string name="reboot_to_apply">다시 시작하여 변경 사항 적용</string>
|
<string name="reboot_to_apply">다시 시작하여 변경 사항 적용</string>
|
||||||
<string name="module_magisk_conflict">Magisk와 충돌로 모듈을 사용할 수 없습니다!</string>
|
<string name="module_magisk_conflict">Magisk와 충돌로 모듈을 사용할 수 없습니다!</string>
|
||||||
<string name="home_learn_kernelsu">KernelSU 알아보기</string>
|
<string name="home_learn_kernelsu">KernelSU 알아보기</string>
|
||||||
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
<string name="home_click_to_learn_kernelsu">KernelSU 설치 방법과 모듈 사용 방법을 확인합니다</string>
|
<string name="home_click_to_learn_kernelsu">KernelSU 설치 방법과 모듈 사용 방법을 확인합니다</string>
|
||||||
<string name="home_support_title">지원이 필요합니다</string>
|
<string name="home_support_title">지원이 필요합니다</string>
|
||||||
<string name="home_support_content">KernelSU는 지금도, 앞으로도 항상 무료이며 오픈 소스로 유지됩니다. 기부를 통해 여러분의 관심을 보여주세요.</string>
|
<string name="home_support_content">KernelSU는 지금도, 앞으로도 항상 무료이며 오픈 소스로 유지됩니다. 기부를 통해 여러분의 관심을 보여주세요.</string>
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
<string name="settings_umount_modules_default_summary" formatted="false">앱 프로필 메뉴의 \"모듈 마운트 해제\" 설정에 대한 전역 기본값을 설정합니다. 활성화 시, 개별 프로필이 설정되지 않은 앱은 시스템에 대한 모듈의 모든 수정사항이 적용되지 않습니다.</string>
|
|
||||||
<string name="restart_app">다시 시작</string>
|
|
||||||
<string name="profile_selinux_rules">규칙</string>
|
|
||||||
<string name="new_version_available">새 버전: %s이 사용 가능합니다, 여기를 눌러 업그레이드하세요.</string>
|
|
||||||
<string name="module_start_downloading">다운로드 시작: %s</string>
|
|
||||||
<string name="force_stop_app">강제 중지</string>
|
|
||||||
<string name="profile_default">기본값</string>
|
<string name="profile_default">기본값</string>
|
||||||
<string name="profile_custom">사용자 지정</string>
|
|
||||||
<string name="profile_template">템플릿</string>
|
<string name="profile_template">템플릿</string>
|
||||||
|
<string name="profile_custom">사용자 지정</string>
|
||||||
<string name="profile_name">프로필 이름</string>
|
<string name="profile_name">프로필 이름</string>
|
||||||
<string name="profile_namespace">이름 공간 마운트</string>
|
<string name="profile_namespace">이름 공간 마운트</string>
|
||||||
<string name="profile_namespace_inherited">상속</string>
|
<string name="profile_namespace_inherited">상속</string>
|
||||||
<string name="profile_namespace_global">전역</string>
|
<string name="profile_namespace_global">전역</string>
|
||||||
<string name="profile_namespace_individual">개별</string>
|
<string name="profile_namespace_individual">개별</string>
|
||||||
<string name="profile_groups">사용자 그룹</string>
|
<string name="profile_groups">사용자 그룹</string>
|
||||||
<string name="profile_umount_modules">모듈 사용 해제</string>
|
|
||||||
<string name="profile_selinux_context">SELinux 컨텍스트</string>
|
|
||||||
<string name="profile_capabilities">권한</string>
|
<string name="profile_capabilities">권한</string>
|
||||||
|
<string name="profile_selinux_context">SELinux 컨텍스트</string>
|
||||||
|
<string name="profile_umount_modules">모듈 사용 해제</string>
|
||||||
<string name="failed_to_update_app_profile">%s에 대한 앱 프로필 업데이트 실패</string>
|
<string name="failed_to_update_app_profile">%s에 대한 앱 프로필 업데이트 실패</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
<string name="settings_umount_modules_default">기본값으로 모듈 사용 해제</string>
|
<string name="settings_umount_modules_default">기본값으로 모듈 사용 해제</string>
|
||||||
|
<string name="settings_umount_modules_default_summary">앱 프로필 메뉴의 \"모듈 마운트 해제\" 설정에 대한 전역 기본값을 설정합니다. 활성화 시, 개별 프로필이 설정되지 않은 앱은 시스템에 대한 모듈의 모든 수정사항이 적용되지 않습니다.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
<string name="profile_umount_modules_summary">이 옵션이 활성화되면, KernelSU는 이 앱에 대한 모듈의 모든 수정사항을 복구합니다.</string>
|
<string name="profile_umount_modules_summary">이 옵션이 활성화되면, KernelSU는 이 앱에 대한 모듈의 모든 수정사항을 복구합니다.</string>
|
||||||
|
<string name="profile_selinux_domain">도메인</string>
|
||||||
|
<string name="profile_selinux_rules">규칙</string>
|
||||||
<string name="module_update">업데이트</string>
|
<string name="module_update">업데이트</string>
|
||||||
<string name="module_downloading">모듈 받는 중: %s</string>
|
<string name="module_downloading">모듈 받는 중: %s</string>
|
||||||
<string name="profile_selinux_domain">도메인</string>
|
<string name="module_start_downloading">다운로드 시작: %s</string>
|
||||||
|
<string name="new_version_available">새 버전: %s이 사용 가능합니다, 여기를 눌러 업그레이드하세요.</string>
|
||||||
<string name="launch_app">실행</string>
|
<string name="launch_app">실행</string>
|
||||||
|
<string name="force_stop_app" formatted="false">강제 중지</string>
|
||||||
|
<string name="restart_app">다시 시작</string>
|
||||||
<string name="failed_to_update_sepolicy">다음 앱에 대한 SELinux 규칙 업데이트 실패: %s</string>
|
<string name="failed_to_update_sepolicy">다음 앱에 대한 SELinux 규칙 업데이트 실패: %s</string>
|
||||||
<string name="save_log">로그 저장</string>
|
|
||||||
<string name="module_changelog">업데이트 내역</string>
|
<string name="module_changelog">업데이트 내역</string>
|
||||||
<string name="enable_web_debugging_summary">WebUI 디버깅에 사용 가능, 필요할 때만 활성화해주세요.</string>
|
|
||||||
<string name="flashing">플래시 중</string>
|
|
||||||
<string name="selected_lkm">선택된 LKM: %s</string>
|
|
||||||
<string name="select_file_tip">%1$s 파티션 이미지 권장됨</string>
|
|
||||||
<string name="select_kmi">KMI 선택</string>
|
|
||||||
<string name="install_next">다음</string>
|
|
||||||
<string name="settings_uninstall_permanent_message">완전히, 그리고 영구히 KernelSU (루트 및 모든 모듈)를 삭제합니다.</string>
|
|
||||||
<string name="enable_web_debugging">WebView 디버깅 활성화</string>
|
|
||||||
<string name="action">동작</string>
|
|
||||||
<string name="settings_uninstall_temporary">임시적 삭제</string>
|
|
||||||
<string name="module_changelog_failed">업데이트 내역 가져오기 실패: %s</string>
|
|
||||||
<string name="open">열기</string>
|
|
||||||
<string name="install_inactive_slot_warning">재부팅 후 기기는 **강제로** 비활성 슬롯으로 부팅합니다!\nOTA를 진행한 후에만 이 옵션을 사용하세요.\n진행할까요?</string>
|
|
||||||
<string name="flash_success">플래시 성공</string>
|
|
||||||
<string name="flash_failed">플래시 실패</string>
|
|
||||||
<string name="settings_uninstall">삭제</string>
|
|
||||||
<string name="settings_uninstall_permanent">영구적 삭제</string>
|
|
||||||
<string name="settings_uninstall_temporary_message">임시적으로 KernelSU를 삭제하고, 다음 재부팅에 원래대로 복구합니다.</string>
|
|
||||||
<string name="settings_profile_template">앱 프로필 템플레이트</string>
|
<string name="settings_profile_template">앱 프로필 템플레이트</string>
|
||||||
<string name="settings_profile_template_summary">앱 프로필의 로컬 및 온라인 템플레이트 관리</string>
|
<string name="settings_profile_template_summary">앱 프로필의 로컬 및 온라인 템플레이트 관리</string>
|
||||||
|
<string name="app_profile_template_create">템플레이트 생성</string>
|
||||||
|
<string name="app_profile_template_edit">템플레이트 편집</string>
|
||||||
<string name="app_profile_template_id">ID</string>
|
<string name="app_profile_template_id">ID</string>
|
||||||
<string name="app_profile_template_id_invalid">올바르지 않은 템플레이트 id</string>
|
<string name="app_profile_template_id_invalid">올바르지 않은 템플레이트 id</string>
|
||||||
<string name="app_profile_template_name">이름</string>
|
<string name="app_profile_template_name">이름</string>
|
||||||
<string name="app_profile_template_description">설명</string>
|
<string name="app_profile_template_description">설명</string>
|
||||||
<string name="app_profile_template_save">저장</string>
|
<string name="app_profile_template_save">저장</string>
|
||||||
<string name="app_profile_template_delete">삭제</string>
|
<string name="app_profile_template_delete">삭제</string>
|
||||||
|
<string name="app_profile_template_view">템플레이트 보기</string>
|
||||||
<string name="app_profile_template_readonly">읽기 전용</string>
|
<string name="app_profile_template_readonly">읽기 전용</string>
|
||||||
<string name="app_profile_template_id_exist">템플레이트 ID가 이미 존재합니다!</string>
|
<string name="app_profile_template_id_exist">템플레이트 ID가 이미 존재합니다!</string>
|
||||||
<string name="app_profile_import_export">불러오기/내보내기</string>
|
<string name="app_profile_import_export">불러오기/내보내기</string>
|
||||||
<string name="app_profile_import_from_clipboard">클립보드에서 불러오기</string>
|
<string name="app_profile_import_from_clipboard">클립보드에서 불러오기</string>
|
||||||
<string name="app_profile_export_to_clipboard">클립보드로 내보내기</string>
|
<string name="app_profile_export_to_clipboard">클립보드로 내보내기</string>
|
||||||
|
<string name="app_profile_template_export_empty">내보낼 로컬 템플레이트가 없습니다!</string>
|
||||||
<string name="app_profile_template_import_success">불러오기 성공</string>
|
<string name="app_profile_template_import_success">불러오기 성공</string>
|
||||||
<string name="app_profile_template_sync">온라인 템플레이트 동기화</string>
|
<string name="app_profile_template_sync">온라인 템플레이트 동기화</string>
|
||||||
<string name="app_profile_template_save_failed">템플레이트 저장 실패</string>
|
<string name="app_profile_template_save_failed">템플레이트 저장 실패</string>
|
||||||
<string name="app_profile_template_import_empty">클립보드가 비었습니다!</string>
|
<string name="app_profile_template_import_empty">클립보드가 비었습니다!</string>
|
||||||
<string name="grant_root_failed">루트 부여 실패!</string>
|
<string name="module_changelog_failed">업데이트 내역 가져오기 실패: %s</string>
|
||||||
<string name="app_profile_template_create">템플레이트 생성</string>
|
|
||||||
<string name="app_profile_template_edit">템플레이트 편집</string>
|
|
||||||
<string name="app_profile_template_view">템플레이트 보기</string>
|
|
||||||
<string name="app_profile_template_export_empty">내보낼 로컬 템플레이트가 없습니다!</string>
|
|
||||||
<string name="select_file">파일 선택</string>
|
|
||||||
<string name="direct_install">직접 설치 (권장)</string>
|
|
||||||
<string name="install_inactive_slot">비활성 슬롯에 설치 (OTA 이후)</string>
|
|
||||||
<string name="settings_restore_stock_image">순정 이미지 복구</string>
|
|
||||||
<string name="settings_restore_stock_image_message">순정 이미지 복구 (백업이 존재한다면), OTA 전에 사용합니다; KernelSU를 삭제해야 한다면, \"영구적 삭제\"를 사용해 주세요.</string>
|
|
||||||
<string name="settings_check_update">업데이트 확인</string>
|
<string name="settings_check_update">업데이트 확인</string>
|
||||||
<string name="settings_check_update_summary">앱 실행시 자동으로 업데이트 확인</string>
|
<string name="settings_check_update_summary">앱 실행시 자동으로 업데이트 확인</string>
|
||||||
|
<string name="grant_root_failed">루트 부여 실패!</string>
|
||||||
|
<string name="action">동작</string>
|
||||||
|
<string name="open">열기</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">WebView 디버깅 활성화</string>
|
||||||
|
<string name="enable_web_debugging_summary">WebUI 디버깅에 사용 가능, 필요할 때만 활성화해주세요.</string>
|
||||||
|
<string name="direct_install">직접 설치 (권장)</string>
|
||||||
|
<string name="select_file">파일 선택</string>
|
||||||
|
<string name="install_inactive_slot">비활성 슬롯에 설치 (OTA 이후)</string>
|
||||||
|
<string name="install_inactive_slot_warning">재부팅 후 기기는 **강제로** 비활성 슬롯으로 부팅합니다!\nOTA를 진행한 후에만 이 옵션을 사용하세요.\n진행할까요?</string>
|
||||||
|
<string name="install_next">다음</string>
|
||||||
|
<string name="select_file_tip">%1$s 파티션 이미지 권장됨</string>
|
||||||
|
<string name="select_kmi">KMI 선택</string>
|
||||||
|
<string name="settings_uninstall">삭제</string>
|
||||||
|
<string name="settings_uninstall_temporary">임시적 삭제</string>
|
||||||
|
<string name="settings_uninstall_permanent">영구적 삭제</string>
|
||||||
|
<string name="settings_restore_stock_image">순정 이미지 복구</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">임시적으로 KernelSU를 삭제하고, 다음 재부팅에 원래대로 복구합니다.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">완전히, 그리고 영구히 KernelSU (루트 및 모든 모듈)를 삭제합니다.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">순정 이미지 복구 (백업이 존재한다면), OTA 전에 사용합니다; KernelSU를 삭제해야 한다면, \"영구적 삭제\"를 사용해 주세요.</string>
|
||||||
|
<string name="flashing">플래시 중</string>
|
||||||
|
<string name="flash_success">플래시 성공</string>
|
||||||
|
<string name="flash_failed">플래시 실패</string>
|
||||||
|
<string name="selected_lkm">선택된 LKM: %s</string>
|
||||||
|
<string name="save_log">로그 저장</string>
|
||||||
<string name="log_saved">로그 저장됨</string>
|
<string name="log_saved">로그 저장됨</string>
|
||||||
<string name="module_sort_enabled_first">정렬 (활성화됨 우선)</string>
|
<string name="status_supported">Supported</string>
|
||||||
<string name="module_sort_action_first">정렬 (동작이 있는 것 우선)</string>
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,35 +1,62 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="home">Namai</string>
|
||||||
|
<string name="home_not_installed">Neįdiegta</string>
|
||||||
|
<string name="home_click_to_install">Spustelėkite norėdami įdiegti</string>
|
||||||
|
<string name="home_working">Veikia</string>
|
||||||
|
<string name="home_working_version">Versija: %d</string>
|
||||||
|
<string name="home_superuser_count">Supernaudotojai: %d</string>
|
||||||
|
<string name="home_module_count">Moduliai: %d</string>
|
||||||
|
<string name="home_unsupported">Nepalaikoma</string>
|
||||||
|
<string name="home_unsupported_reason">KernelSU dabar palaiko tik GKI branduolius</string>
|
||||||
|
<string name="home_kernel">Branduolys</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
|
<string name="home_manager_version">Tvarkyklės versija</string>
|
||||||
<string name="home_fingerprint">Pirštų atspaudas</string>
|
<string name="home_fingerprint">Pirštų atspaudas</string>
|
||||||
|
<string name="home_selinux_status">SELinux statusas</string>
|
||||||
<string name="selinux_status_disabled">Išjungta</string>
|
<string name="selinux_status_disabled">Išjungta</string>
|
||||||
<string name="selinux_status_enforcing">Priverstinas</string>
|
<string name="selinux_status_enforcing">Priverstinas</string>
|
||||||
|
<string name="selinux_status_permissive">Leistinas</string>
|
||||||
<string name="selinux_status_unknown">Nežinomas</string>
|
<string name="selinux_status_unknown">Nežinomas</string>
|
||||||
<string name="superuser">Supernaudotojai</string>
|
<string name="superuser">Supernaudotojai</string>
|
||||||
<string name="module_failed_to_enable">Nepavyko įjungti modulio: %s</string>
|
<string name="module_failed_to_enable">Nepavyko įjungti modulio: %s</string>
|
||||||
<string name="module_failed_to_disable">Nepavyko išjungti modulio: %s</string>
|
<string name="module_failed_to_disable">Nepavyko išjungti modulio: %s</string>
|
||||||
<string name="selinux_status_permissive">Leistinas</string>
|
|
||||||
<string name="module_empty">Nėra įdiegtų modulių</string>
|
<string name="module_empty">Nėra įdiegtų modulių</string>
|
||||||
<string name="module">Moduliai</string>
|
<string name="module">Moduliai</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
|
<string name="uninstall">Išdiegti</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
|
<string name="module_install">Įdiegti</string>
|
||||||
|
<string name="install">Įdiegti</string>
|
||||||
|
<string name="reboot">Paleisti iš naujo</string>
|
||||||
|
<string name="settings">Parametrai</string>
|
||||||
<string name="reboot_userspace">Perkrovimas neišjungus</string>
|
<string name="reboot_userspace">Perkrovimas neišjungus</string>
|
||||||
<string name="reboot_recovery">Perkrauti į atkūrimo rėžimą</string>
|
<string name="reboot_recovery">Perkrauti į atkūrimo rėžimą</string>
|
||||||
<string name="reboot_bootloader">Perkrauti į įkrovos tvarkyklę</string>
|
<string name="reboot_bootloader">Perkrauti į įkrovos tvarkyklę</string>
|
||||||
<string name="reboot_download">Perkrauti į atsisiuntimo rėžimą</string>
|
<string name="reboot_download">Perkrauti į atsisiuntimo rėžimą</string>
|
||||||
|
<string name="reboot_edl">Perkrauti į EDL</string>
|
||||||
<string name="about">Apie</string>
|
<string name="about">Apie</string>
|
||||||
<string name="module_uninstall_failed">Nepavyko išdiegti: %s</string>
|
<string name="module_uninstall_confirm">Ar tikrai norite išdiegti modulį %s\?</string>
|
||||||
<string name="module_uninstall_success">%s išdiegtas</string>
|
<string name="module_uninstall_success">%s išdiegtas</string>
|
||||||
|
<string name="module_uninstall_failed">Nepavyko išdiegti: %s</string>
|
||||||
<string name="module_version">Versija</string>
|
<string name="module_version">Versija</string>
|
||||||
<string name="module_author">Autorius</string>
|
<string name="module_author">Autorius</string>
|
||||||
|
<string name="refresh">Atšviežinti</string>
|
||||||
<string name="show_system_apps">Rodyti sistemos programas</string>
|
<string name="show_system_apps">Rodyti sistemos programas</string>
|
||||||
<string name="hide_system_apps">Slėpti sistemos programas</string>
|
<string name="hide_system_apps">Slėpti sistemos programas</string>
|
||||||
<string name="send_log">Siųsti žurnalą</string>
|
<string name="send_log">Siųsti žurnalą</string>
|
||||||
<string name="reboot">Paleisti iš naujo</string>
|
|
||||||
<string name="refresh">Atšviežinti</string>
|
|
||||||
<string name="safe_mode">Saugus rėžimas</string>
|
<string name="safe_mode">Saugus rėžimas</string>
|
||||||
<string name="reboot_to_apply">Paleiskite iš naujo, kad įsigaliotų</string>
|
<string name="reboot_to_apply">Paleiskite iš naujo, kad įsigaliotų</string>
|
||||||
<string name="module_magisk_conflict">Moduliai yra išjungti, nes jie konfliktuoja su Magisk\'s!</string>
|
<string name="module_magisk_conflict">Moduliai yra išjungti, nes jie konfliktuoja su Magisk\'s!</string>
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
|
||||||
<string name="home_learn_kernelsu">Sužinokite apie KernelSU</string>
|
<string name="home_learn_kernelsu">Sužinokite apie KernelSU</string>
|
||||||
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
<string name="home_click_to_learn_kernelsu">Sužinokite, kaip įdiegti KernelSU ir naudoti modulius</string>
|
<string name="home_click_to_learn_kernelsu">Sužinokite, kaip įdiegti KernelSU ir naudoti modulius</string>
|
||||||
|
<string name="home_support_title">Paremkite mus</string>
|
||||||
|
<string name="home_support_content">KernelSU yra ir visada bus nemokamas ir atvirojo kodo. Tačiau galite parodyti, kad jums rūpi, paaukodami mums.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
<string name="profile_default">Numatytas</string>
|
<string name="profile_default">Numatytas</string>
|
||||||
<string name="profile_template">Šablonas</string>
|
<string name="profile_template">Šablonas</string>
|
||||||
<string name="profile_custom">Pasirinktinis</string>
|
<string name="profile_custom">Pasirinktinis</string>
|
||||||
@@ -42,7 +69,11 @@
|
|||||||
<string name="profile_capabilities">Galimybės</string>
|
<string name="profile_capabilities">Galimybės</string>
|
||||||
<string name="profile_selinux_context">SELinux kontekstas</string>
|
<string name="profile_selinux_context">SELinux kontekstas</string>
|
||||||
<string name="profile_umount_modules">Atjungti modulius</string>
|
<string name="profile_umount_modules">Atjungti modulius</string>
|
||||||
|
<string name="failed_to_update_app_profile">Nepavyko atnaujinti programos profilio %s</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
<string name="settings_umount_modules_default">Atjungti modulius pagal numatytuosius parametrus</string>
|
<string name="settings_umount_modules_default">Atjungti modulius pagal numatytuosius parametrus</string>
|
||||||
|
<string name="settings_umount_modules_default_summary">Visuotinė numatytoji „Modulių atjungimo“ reikšmė programų profiliuose. Jei įjungta, ji pašalins visus sistemos modulio pakeitimus programoms, kurios neturi profilio.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
<string name="profile_umount_modules_summary">Įjungus šią parinktį, KernelSU galės atkurti visus modulių modifikuotus failus šiai programai.</string>
|
<string name="profile_umount_modules_summary">Įjungus šią parinktį, KernelSU galės atkurti visus modulių modifikuotus failus šiai programai.</string>
|
||||||
<string name="profile_selinux_domain">Domenas</string>
|
<string name="profile_selinux_domain">Domenas</string>
|
||||||
<string name="profile_selinux_rules">Taisyklės</string>
|
<string name="profile_selinux_rules">Taisyklės</string>
|
||||||
@@ -54,28 +85,287 @@
|
|||||||
<string name="force_stop_app" formatted="false">Priversti sustoti</string>
|
<string name="force_stop_app" formatted="false">Priversti sustoti</string>
|
||||||
<string name="restart_app">Perkrauti</string>
|
<string name="restart_app">Perkrauti</string>
|
||||||
<string name="failed_to_update_sepolicy">Nepavyko atnaujinti SELinux taisyklių: %s</string>
|
<string name="failed_to_update_sepolicy">Nepavyko atnaujinti SELinux taisyklių: %s</string>
|
||||||
<string name="home">Namai</string>
|
|
||||||
<string name="home_not_installed">Neįdiegta</string>
|
|
||||||
<string name="home_unsupported_reason">KernelSU dabar palaiko tik GKI branduolius</string>
|
|
||||||
<string name="home_click_to_install">Spustelėkite norėdami įdiegti</string>
|
|
||||||
<string name="home_working">Veikia</string>
|
|
||||||
<string name="home_superuser_count">Supernaudotojai: %d</string>
|
|
||||||
<string name="home_working_version">Versija: %d</string>
|
|
||||||
<string name="home_unsupported">Nepalaikoma</string>
|
|
||||||
<string name="home_module_count">Moduliai: %d</string>
|
|
||||||
<string name="home_manager_version">Tvarkyklės versija</string>
|
|
||||||
<string name="home_kernel">Branduolys</string>
|
|
||||||
<string name="home_selinux_status">SELinux statusas</string>
|
|
||||||
<string name="uninstall">Išdiegti</string>
|
|
||||||
<string name="module_install">Įdiegti</string>
|
|
||||||
<string name="install">Įdiegti</string>
|
|
||||||
<string name="settings">Parametrai</string>
|
|
||||||
<string name="reboot_edl">Perkrauti į EDL</string>
|
|
||||||
<string name="module_uninstall_confirm">Ar tikrai norite išdiegti modulį %s\?</string>
|
|
||||||
<string name="home_support_title">Paremkite mus</string>
|
|
||||||
<string name="home_support_content">KernelSU yra ir visada bus nemokamas ir atvirojo kodo. Tačiau galite parodyti, kad jums rūpi, paaukodami mums.</string>
|
|
||||||
<string name="failed_to_update_app_profile">Nepavyko atnaujinti programos profilio %s</string>
|
|
||||||
<string name="settings_umount_modules_default_summary">Visuotinė numatytoji „Modulių atjungimo“ reikšmė programų profiliuose. Jei įjungta, ji pašalins visus sistemos modulio pakeitimus programoms, kurios neturi profilio.</string>
|
|
||||||
<string name="module_changelog">Keitimų žurnalas</string>
|
<string name="module_changelog">Keitimų žurnalas</string>
|
||||||
|
<string name="settings_profile_template">App Profile Template</string>
|
||||||
|
<string name="settings_profile_template_summary">Manage local and online template of App Profile</string>
|
||||||
|
<string name="app_profile_template_create">Create template</string>
|
||||||
|
<string name="app_profile_template_edit">Edit template</string>
|
||||||
|
<string name="app_profile_template_id">ID</string>
|
||||||
|
<string name="app_profile_template_id_invalid">Invalid template ID</string>
|
||||||
|
<string name="app_profile_template_name">Name</string>
|
||||||
|
<string name="app_profile_template_description">Description</string>
|
||||||
|
<string name="app_profile_template_save">Save</string>
|
||||||
|
<string name="app_profile_template_delete">Delete</string>
|
||||||
|
<string name="app_profile_template_view">View template</string>
|
||||||
|
<string name="app_profile_template_readonly">Read only</string>
|
||||||
|
<string name="app_profile_template_id_exist">Template ID already exists!</string>
|
||||||
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Import from clipboard</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Export to clipboard</string>
|
||||||
|
<string name="app_profile_template_export_empty">Cannot find local template to export!</string>
|
||||||
|
<string name="app_profile_template_import_success">Imported successfully</string>
|
||||||
|
<string name="app_profile_template_sync">Sync online templates</string>
|
||||||
|
<string name="app_profile_template_save_failed">Failed to save template</string>
|
||||||
|
<string name="app_profile_template_import_empty">Clipboard is empty!</string>
|
||||||
|
<string name="module_changelog_failed">Fetch changelog failed: %s</string>
|
||||||
|
<string name="settings_check_update">Check update</string>
|
||||||
|
<string name="settings_check_update_summary">Automatically check for updates when opening the app</string>
|
||||||
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
|
<string name="select_file">Select a image that needs to be patched</string>
|
||||||
|
<string name="install_inactive_slot">Install to inactive slot (After OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
|
||||||
|
<string name="install_next">Next</string>
|
||||||
|
<string name="select_file_tip">%1$s partition image is recommended</string>
|
||||||
|
<string name="select_kmi">Select KMI</string>
|
||||||
|
<string name="settings_uninstall">Uninstall</string>
|
||||||
|
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
||||||
|
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
||||||
|
<string name="settings_restore_stock_image">Restore stock image</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
||||||
|
<string name="flashing">Flashing</string>
|
||||||
|
<string name="flash_success">Flash success</string>
|
||||||
|
<string name="flash_failed">Flash failed</string>
|
||||||
|
<string name="selected_lkm">Selected LKM: %s</string>
|
||||||
<string name="save_log">Saglabāt Žurnālus</string>
|
<string name="save_log">Saglabāt Žurnālus</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,14 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="profile_umount_modules_summary">Iespējojot šo opciju, KernelSU varēs atjaunot visus moduļos šīs lietojumprogrammas modificētos failus.</string>
|
|
||||||
<string name="failed_to_update_sepolicy">Neizdevās atjaunināt SELinux noteikumus: %s</string>
|
|
||||||
<string name="settings_profile_template_summary">Pārvaldiet vietējo un tiešsaistes lietotņu profila veidni</string>
|
|
||||||
<string name="app_profile_template_id_invalid">Nederīgs veidnes id</string>
|
|
||||||
<string name="app_profile_template_id_exist">veidnes id jau pastāv!</string>
|
|
||||||
<string name="app_profile_export_to_clipboard">Eksportēt starpliktuvē</string>
|
|
||||||
<string name="app_profile_import_from_clipboard">Importēt no starpliktuves</string>
|
|
||||||
<string name="app_profile_template_import_success">Importēts veiksmīgi</string>
|
|
||||||
<string name="app_profile_template_sync">Sinhronizēt tiešsaistes veidnes</string>
|
|
||||||
<string name="home">Sākums</string>
|
<string name="home">Sākums</string>
|
||||||
<string name="home_not_installed">Nav ieinstalēts</string>
|
<string name="home_not_installed">Nav ieinstalēts</string>
|
||||||
<string name="home_click_to_install">Noklikšķiniet, lai instalētu</string>
|
<string name="home_click_to_install">Noklikšķiniet, lai instalētu</string>
|
||||||
@@ -19,50 +10,71 @@
|
|||||||
<string name="home_unsupported">Neatbalstīts</string>
|
<string name="home_unsupported">Neatbalstīts</string>
|
||||||
<string name="home_unsupported_reason">KernelSU atbalsta tikai GKI kodolus</string>
|
<string name="home_unsupported_reason">KernelSU atbalsta tikai GKI kodolus</string>
|
||||||
<string name="home_kernel">Kodols</string>
|
<string name="home_kernel">Kodols</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Pārvaldnieka versija</string>
|
<string name="home_manager_version">Pārvaldnieka versija</string>
|
||||||
<string name="home_fingerprint">Pirkstu nospiedums</string>
|
<string name="home_fingerprint">Pirkstu nospiedums</string>
|
||||||
<string name="home_selinux_status">SELinux statuss</string>
|
<string name="home_selinux_status">SELinux statuss</string>
|
||||||
<string name="selinux_status_enforcing">Izpildīšana</string>
|
|
||||||
<string name="selinux_status_disabled">Atspējots</string>
|
<string name="selinux_status_disabled">Atspējots</string>
|
||||||
|
<string name="selinux_status_enforcing">Izpildīšana</string>
|
||||||
|
<string name="selinux_status_permissive">Visatļautība</string>
|
||||||
<string name="selinux_status_unknown">Nezināms</string>
|
<string name="selinux_status_unknown">Nezināms</string>
|
||||||
<string name="superuser">SuperLietotājs</string>
|
<string name="superuser">SuperLietotājs</string>
|
||||||
|
<string name="module_failed_to_enable">Neizdevās iespējot moduli: %s</string>
|
||||||
<string name="module_failed_to_disable">Neizdevās atspējot moduli: %s</string>
|
<string name="module_failed_to_disable">Neizdevās atspējot moduli: %s</string>
|
||||||
<string name="module_empty">Nav instalētu moduļu</string>
|
<string name="module_empty">Nav instalētu moduļu</string>
|
||||||
<string name="module">Moduļi</string>
|
<string name="module">Moduļi</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
<string name="uninstall">Atinstalēt</string>
|
<string name="uninstall">Atinstalēt</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
|
<string name="module_install">Instalēt</string>
|
||||||
<string name="install">Instalēt</string>
|
<string name="install">Instalēt</string>
|
||||||
<string name="reboot">Restartēt</string>
|
<string name="reboot">Restartēt</string>
|
||||||
<string name="settings">Iestatījumi</string>
|
<string name="settings">Iestatījumi</string>
|
||||||
<string name="reboot_userspace">Ātri restartēt</string>
|
<string name="reboot_userspace">Ātri restartēt</string>
|
||||||
<string name="reboot_bootloader">Restartēt uz Bootloaderu</string>
|
|
||||||
<string name="reboot_recovery">Restartēt uz Recovery</string>
|
<string name="reboot_recovery">Restartēt uz Recovery</string>
|
||||||
|
<string name="reboot_bootloader">Restartēt uz Bootloaderu</string>
|
||||||
<string name="reboot_download">Restartēt uz Download</string>
|
<string name="reboot_download">Restartēt uz Download</string>
|
||||||
<string name="reboot_edl">Restartēt uz EDL</string>
|
<string name="reboot_edl">Restartēt uz EDL</string>
|
||||||
<string name="about">Par</string>
|
<string name="about">Par</string>
|
||||||
|
<string name="module_uninstall_confirm">Vai tiešām vēlaties atinstalēt moduli %s?</string>
|
||||||
<string name="module_uninstall_success">%s ir atinstalēts</string>
|
<string name="module_uninstall_success">%s ir atinstalēts</string>
|
||||||
<string name="module_uninstall_failed">Neizdevās atinstalēt: %s</string>
|
<string name="module_uninstall_failed">Neizdevās atinstalēt: %s</string>
|
||||||
|
<string name="module_version">Versija</string>
|
||||||
<string name="module_author">Autors</string>
|
<string name="module_author">Autors</string>
|
||||||
<string name="refresh">Atjaunot</string>
|
<string name="refresh">Atjaunot</string>
|
||||||
<string name="show_system_apps">Rādīt sistēmas lietotnes</string>
|
<string name="show_system_apps">Rādīt sistēmas lietotnes</string>
|
||||||
<string name="hide_system_apps">Slēpt sistēmas lietotnes</string>
|
<string name="hide_system_apps">Slēpt sistēmas lietotnes</string>
|
||||||
<string name="send_log">Ziņot žurnālu</string>
|
<string name="send_log">Ziņot žurnālu</string>
|
||||||
|
<string name="safe_mode">Drošais režīms</string>
|
||||||
<string name="reboot_to_apply">Restartējiet, lai stātos spēkā</string>
|
<string name="reboot_to_apply">Restartējiet, lai stātos spēkā</string>
|
||||||
|
<string name="module_magisk_conflict">Moduļi ir atspējoti, jo tie konfliktē ar Magisk!</string>
|
||||||
<string name="home_learn_kernelsu">Uzzināt par KernelSU</string>
|
<string name="home_learn_kernelsu">Uzzināt par KernelSU</string>
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
<string name="home_click_to_learn_kernelsu">Uzzināt, kā instalēt KernelSU un izmantot moduļus</string>
|
<string name="home_click_to_learn_kernelsu">Uzzināt, kā instalēt KernelSU un izmantot moduļus</string>
|
||||||
<string name="home_support_title">Atbalsti mūs</string>
|
<string name="home_support_title">Atbalsti mūs</string>
|
||||||
|
<string name="home_support_content">KernelSU ir un vienmēr būs bezmaksas un atvērtā koda. Tomēr jūs varat parādīt mums, ka jums rūp, veicot ziedojumu.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
<string name="profile_default">Noklusējums</string>
|
<string name="profile_default">Noklusējums</string>
|
||||||
<string name="profile_template">Veidne</string>
|
<string name="profile_template">Veidne</string>
|
||||||
<string name="profile_custom">Pielāgots</string>
|
<string name="profile_custom">Pielāgots</string>
|
||||||
<string name="profile_name">Profila vārds</string>
|
<string name="profile_name">Profila vārds</string>
|
||||||
<string name="profile_namespace">Mount nosaukumvieta</string>
|
<string name="profile_namespace">Mount nosaukumvieta</string>
|
||||||
|
<string name="profile_namespace_inherited">Mantots</string>
|
||||||
|
<string name="profile_namespace_global">Globāli</string>
|
||||||
<string name="profile_namespace_individual">Individuāls</string>
|
<string name="profile_namespace_individual">Individuāls</string>
|
||||||
|
<string name="profile_groups">Grupas</string>
|
||||||
<string name="profile_capabilities">Iespējas</string>
|
<string name="profile_capabilities">Iespējas</string>
|
||||||
<string name="profile_selinux_context">SELinux konteksts</string>
|
<string name="profile_selinux_context">SELinux konteksts</string>
|
||||||
<string name="profile_umount_modules">Atvienot moduļus</string>
|
<string name="profile_umount_modules">Atvienot moduļus</string>
|
||||||
<string name="failed_to_update_app_profile">Neizdevās atjaunināt lietotnes profilu %s</string>
|
<string name="failed_to_update_app_profile">Neizdevās atjaunināt lietotnes profilu %s</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
<string name="settings_umount_modules_default">Pēc noklusējuma atvienot moduļus</string>
|
<string name="settings_umount_modules_default">Pēc noklusējuma atvienot moduļus</string>
|
||||||
<string name="settings_umount_modules_default_summary">Globālā noklusējuma vērtība vienumam “Atvienot moduļus” lietotņu profilos. Ja tas ir iespējots, lietojumprogrammām, kurām nav iestatīts profils, tiks noņemtas visas sistēmas moduļu modifikācijas.</string>
|
<string name="settings_umount_modules_default_summary">Globālā noklusējuma vērtība vienumam “Atvienot moduļus” lietotņu profilos. Ja tas ir iespējots, lietojumprogrammām, kurām nav iestatīts profils, tiks noņemtas visas sistēmas moduļu modifikācijas.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
|
<string name="profile_umount_modules_summary">Iespējojot šo opciju, KernelSU varēs atjaunot visus moduļos šīs lietojumprogrammas modificētos failus.</string>
|
||||||
<string name="profile_selinux_domain">Domēns</string>
|
<string name="profile_selinux_domain">Domēns</string>
|
||||||
<string name="profile_selinux_rules">Noteikumi</string>
|
<string name="profile_selinux_rules">Noteikumi</string>
|
||||||
<string name="module_update">Atjaunināt</string>
|
<string name="module_update">Atjaunināt</string>
|
||||||
@@ -72,58 +84,290 @@
|
|||||||
<string name="launch_app">Palaist</string>
|
<string name="launch_app">Palaist</string>
|
||||||
<string name="force_stop_app" formatted="false">Piespiedu apstāšana</string>
|
<string name="force_stop_app" formatted="false">Piespiedu apstāšana</string>
|
||||||
<string name="restart_app">Restartēt aplikāciju</string>
|
<string name="restart_app">Restartēt aplikāciju</string>
|
||||||
|
<string name="failed_to_update_sepolicy">Neizdevās atjaunināt SELinux noteikumus: %s</string>
|
||||||
<string name="module_changelog">Izmaiņu žurnāls</string>
|
<string name="module_changelog">Izmaiņu žurnāls</string>
|
||||||
<string name="settings_profile_template">Lietotnes profila veidne</string>
|
<string name="settings_profile_template">Lietotnes profila veidne</string>
|
||||||
|
<string name="settings_profile_template_summary">Pārvaldiet vietējo un tiešsaistes lietotņu profila veidni</string>
|
||||||
<string name="app_profile_template_create">Izveidot veidni</string>
|
<string name="app_profile_template_create">Izveidot veidni</string>
|
||||||
<string name="app_profile_template_edit">Rediģēt veidni</string>
|
<string name="app_profile_template_edit">Rediģēt veidni</string>
|
||||||
<string name="app_profile_template_id">id</string>
|
<string name="app_profile_template_id">id</string>
|
||||||
|
<string name="app_profile_template_id_invalid">Nederīgs veidnes id</string>
|
||||||
<string name="app_profile_template_name">Vārds</string>
|
<string name="app_profile_template_name">Vārds</string>
|
||||||
<string name="app_profile_template_description">Apraksts</string>
|
<string name="app_profile_template_description">Apraksts</string>
|
||||||
<string name="app_profile_template_save">Saglabāt</string>
|
<string name="app_profile_template_save">Saglabāt</string>
|
||||||
<string name="app_profile_template_delete">Dzēst</string>
|
<string name="app_profile_template_delete">Dzēst</string>
|
||||||
<string name="app_profile_template_view">Skatīt veidni</string>
|
<string name="app_profile_template_view">Skatīt veidni</string>
|
||||||
<string name="app_profile_template_readonly">tikai lasīt</string>
|
<string name="app_profile_template_readonly">tikai lasīt</string>
|
||||||
|
<string name="app_profile_template_id_exist">veidnes id jau pastāv!</string>
|
||||||
<string name="app_profile_import_export">Importēt/Eksportēt</string>
|
<string name="app_profile_import_export">Importēt/Eksportēt</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Importēt no starpliktuves</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Eksportēt starpliktuvē</string>
|
||||||
<string name="app_profile_template_export_empty">Nevar atrast vietējo eksportējamo veidni!</string>
|
<string name="app_profile_template_export_empty">Nevar atrast vietējo eksportējamo veidni!</string>
|
||||||
|
<string name="app_profile_template_import_success">Importēts veiksmīgi</string>
|
||||||
|
<string name="app_profile_template_sync">Sinhronizēt tiešsaistes veidnes</string>
|
||||||
<string name="app_profile_template_save_failed">Neizdevās saglabāt veidni</string>
|
<string name="app_profile_template_save_failed">Neizdevās saglabāt veidni</string>
|
||||||
<string name="app_profile_template_import_empty">Starpliktuve ir tukša!</string>
|
<string name="app_profile_template_import_empty">Starpliktuve ir tukša!</string>
|
||||||
<string name="module_changelog_failed">Izmaiņu žurnāla iegūšana neizdevās: %s</string>
|
<string name="module_changelog_failed">Izmaiņu žurnāla iegūšana neizdevās: %s</string>
|
||||||
<string name="selinux_status_permissive">Visatļautība</string>
|
<string name="settings_check_update">Pārbaudīt atjauninājumus</string>
|
||||||
<string name="module_failed_to_enable">Neizdevās iespējot moduli: %s</string>
|
<string name="settings_check_update_summary">Automātiski pārbaudīt atjauninājumus atverot aplikāciju</string>
|
||||||
<string name="module_install">Instalēt</string>
|
<string name="grant_root_failed">Neizdevās piešķirt sakni!</string>
|
||||||
<string name="module_uninstall_confirm">Vai tiešām vēlaties atinstalēt moduli %s?</string>
|
<string name="action">Action</string>
|
||||||
<string name="module_version">Versija</string>
|
<string name="open">Atvērt</string>
|
||||||
<string name="safe_mode">Drošais režīms</string>
|
<string name="close">Close</string>
|
||||||
<string name="module_magisk_conflict">Moduļi ir atspējoti, jo tie konfliktē ar Magisk!</string>
|
|
||||||
<string name="home_support_content">KernelSU ir un vienmēr būs bezmaksas un atvērtā koda. Tomēr jūs varat parādīt mums, ka jums rūp, veicot ziedojumu.</string>
|
|
||||||
<string name="profile_groups">Grupas</string>
|
|
||||||
<string name="profile_namespace_global">Globāli</string>
|
|
||||||
<string name="enable_web_debugging">Iespējot WebView atkļūdošanu</string>
|
<string name="enable_web_debugging">Iespējot WebView atkļūdošanu</string>
|
||||||
<string name="select_file_tip">Ieteicams %1$s nodalījuma attēls</string>
|
<string name="enable_web_debugging_summary">Var izmantot WebUI atkļūdošanai, lūdzu, izmantot tikai tad, kad tas ir nepieciešams.</string>
|
||||||
<string name="install_next">Nākamais</string>
|
<string name="direct_install">Tiešā instalēšana (Ieteicams)</string>
|
||||||
<string name="profile_namespace_inherited">Mantots</string>
|
|
||||||
<string name="select_file">Izvēlieties failu</string>
|
<string name="select_file">Izvēlieties failu</string>
|
||||||
<string name="install_inactive_slot">Instalēt neaktīvajā slotā (pēc OTA)</string>
|
<string name="install_inactive_slot">Instalēt neaktīvajā slotā (pēc OTA)</string>
|
||||||
<string name="install_inactive_slot_warning">Pēc restartēšanas jūsu ierīce tiks **PIESPIESTI** palaista pašreizējā neaktīvajā slotā!
|
<string name="install_inactive_slot_warning">Pēc restartēšanas jūsu ierīce tiks **PIESPIESTI** palaista pašreizējā neaktīvajā slotā!
|
||||||
\nIzmantojiet šo opciju tikai pēc OTA pabeigšanas
|
\nIzmantojiet šo opciju tikai pēc OTA pabeigšanas
|
||||||
\nTurpināt?</string>
|
\nTurpināt?</string>
|
||||||
<string name="direct_install">Tiešā instalēšana (Ieteicams)</string>
|
<string name="install_next">Nākamais</string>
|
||||||
|
<string name="select_file_tip">Ieteicams %1$s nodalījuma attēls</string>
|
||||||
|
<string name="select_kmi">Izvēlieties KMI</string>
|
||||||
<string name="settings_uninstall">Atinstalēt</string>
|
<string name="settings_uninstall">Atinstalēt</string>
|
||||||
<string name="settings_uninstall_temporary">Pagaidu atinstalēšana</string>
|
<string name="settings_uninstall_temporary">Pagaidu atinstalēšana</string>
|
||||||
|
<string name="settings_uninstall_permanent">Neatgriezeniski atinstalēt</string>
|
||||||
<string name="settings_restore_stock_image">Atjaunot oriģinālo attēlu</string>
|
<string name="settings_restore_stock_image">Atjaunot oriģinālo attēlu</string>
|
||||||
<string name="settings_uninstall_temporary_message">Īslaicīgi atinstalēt KernelSU, pēc nākamās restartēšanas atjaunot sākotnējo stāvokli.</string>
|
<string name="settings_uninstall_temporary_message">Īslaicīgi atinstalēt KernelSU, pēc nākamās restartēšanas atjaunot sākotnējo stāvokli.</string>
|
||||||
<string name="settings_uninstall_permanent_message">KernelSU (saknes un visu moduļu) pilnīga atinstalēšana.</string>
|
<string name="settings_uninstall_permanent_message">KernelSU (saknes un visu moduļu) pilnīga atinstalēšana.</string>
|
||||||
<string name="settings_restore_stock_image_message">Atjaunojot rūpnīcas attēlu (ja ir dublējums), ko parasti izmanto pirms OTA; ja nepieciešams atinstalēt KernelSU, lūdzu, izmantojiet \"Neatgriezeniski atinstalēt\".</string>
|
<string name="settings_restore_stock_image_message">Atjaunojot rūpnīcas attēlu (ja ir dublējums), ko parasti izmanto pirms OTA; ja nepieciešams atinstalēt KernelSU, lūdzu, izmantojiet \"Neatgriezeniski atinstalēt\".</string>
|
||||||
<string name="selected_lkm">Izvēlētais lkm: %s</string>
|
|
||||||
<string name="grant_root_failed">Neizdevās piešķirt sakni!</string>
|
|
||||||
<string name="open">Atvērt</string>
|
|
||||||
<string name="settings_check_update">Pārbaudīt atjauninājumus</string>
|
|
||||||
<string name="settings_check_update_summary">Automātiski pārbaudīt atjauninājumus atverot aplikāciju</string>
|
|
||||||
<string name="enable_web_debugging_summary">Var izmantot WebUI atkļūdošanai, lūdzu, izmantot tikai tad, kad tas ir nepieciešams.</string>
|
|
||||||
<string name="select_kmi">Izvēlieties KMI</string>
|
|
||||||
<string name="settings_uninstall_permanent">Neatgriezeniski atinstalēt</string>
|
|
||||||
<string name="flashing">Instalē</string>
|
<string name="flashing">Instalē</string>
|
||||||
<string name="flash_success">Instalēts veiksmīgi</string>
|
<string name="flash_success">Instalēts veiksmīgi</string>
|
||||||
<string name="flash_failed">Instalēšana neizdevās</string>
|
<string name="flash_failed">Instalēšana neizdevās</string>
|
||||||
|
<string name="selected_lkm">Izvēlētais lkm: %s</string>
|
||||||
<string name="save_log">Išsaugoti Žurnalus</string>
|
<string name="save_log">Išsaugoti Žurnalus</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,80 +1,371 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="home_not_installed">इंस्टॉल केले नाही</string>
|
|
||||||
<string name="home">होम</string>
|
<string name="home">होम</string>
|
||||||
|
<string name="home_not_installed">इंस्टॉल केले नाही</string>
|
||||||
<string name="home_click_to_install">इंस्टॉल साठी क्लिक करा</string>
|
<string name="home_click_to_install">इंस्टॉल साठी क्लिक करा</string>
|
||||||
<string name="home_working">कार्यरत</string>
|
<string name="home_working">कार्यरत</string>
|
||||||
<string name="home_working_version">आवृत्ती: %d</string>
|
<string name="home_working_version">आवृत्ती: %d</string>
|
||||||
<string name="home_module_count">मॉड्यूल्स: %d</string>
|
|
||||||
<string name="home_superuser_count">सुपरयूझर: %d</string>
|
<string name="home_superuser_count">सुपरयूझर: %d</string>
|
||||||
|
<string name="home_module_count">मॉड्यूल्स: %d</string>
|
||||||
<string name="home_unsupported">असमर्थित</string>
|
<string name="home_unsupported">असमर्थित</string>
|
||||||
<string name="home_unsupported_reason">KernelSU आता फक्त GKI कर्नलचे समर्थन करते</string>
|
<string name="home_unsupported_reason">KernelSU आता फक्त GKI कर्नलचे समर्थन करते</string>
|
||||||
<string name="home_kernel">कर्नल</string>
|
<string name="home_kernel">कर्नल</string>
|
||||||
<string name="home_fingerprint">फिंगरप्रिंट</string>
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">व्यवस्थापक आवृत्ती</string>
|
<string name="home_manager_version">व्यवस्थापक आवृत्ती</string>
|
||||||
|
<string name="home_fingerprint">फिंगरप्रिंट</string>
|
||||||
<string name="home_selinux_status">SELinux स्थिती</string>
|
<string name="home_selinux_status">SELinux स्थिती</string>
|
||||||
<string name="selinux_status_disabled">अक्षम</string>
|
<string name="selinux_status_disabled">अक्षम</string>
|
||||||
<string name="selinux_status_enforcing">एनफोर्सिंग</string>
|
<string name="selinux_status_enforcing">एनफोर्सिंग</string>
|
||||||
<string name="selinux_status_permissive">परमिसिव</string>
|
<string name="selinux_status_permissive">परमिसिव</string>
|
||||||
<string name="selinux_status_unknown">अज्ञात</string>
|
<string name="selinux_status_unknown">अज्ञात</string>
|
||||||
<string name="install">स्थापित करा</string>
|
|
||||||
<string name="module_empty">कोणतेही मॉड्यूल स्थापित केलेले नाही</string>
|
|
||||||
<string name="reboot">रीबूट करा</string>
|
|
||||||
<string name="superuser">सुपरयुझर</string>
|
<string name="superuser">सुपरयुझर</string>
|
||||||
<string name="module_failed_to_enable">मॉड्यूल सक्षम करण्यात अयशस्वी: %s</string>
|
<string name="module_failed_to_enable">मॉड्यूल सक्षम करण्यात अयशस्वी: %s</string>
|
||||||
<string name="uninstall">विस्थापित करा</string>
|
|
||||||
<string name="module_failed_to_disable">मॉड्यूल अक्षम करण्यात अयशस्वी: %s</string>
|
<string name="module_failed_to_disable">मॉड्यूल अक्षम करण्यात अयशस्वी: %s</string>
|
||||||
|
<string name="module_empty">कोणतेही मॉड्यूल स्थापित केलेले नाही</string>
|
||||||
<string name="module">मॉड्यूल</string>
|
<string name="module">मॉड्यूल</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
|
<string name="uninstall">विस्थापित करा</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
<string name="module_install">स्थापित करा</string>
|
<string name="module_install">स्थापित करा</string>
|
||||||
|
<string name="install">स्थापित करा</string>
|
||||||
|
<string name="reboot">रीबूट करा</string>
|
||||||
<string name="settings">सेटिंग्ज</string>
|
<string name="settings">सेटिंग्ज</string>
|
||||||
<string name="reboot_userspace">सॉफ्ट रीबूट</string>
|
<string name="reboot_userspace">सॉफ्ट रीबूट</string>
|
||||||
<string name="about">बद्दल</string>
|
<string name="reboot_recovery">रिकवरी मध्ये रिबुट करा</string>
|
||||||
<string name="reboot_edl">EDL वर रीबूट करा</string>
|
|
||||||
<string name="module_uninstall_confirm">तुमची खात्री आहे की तुम्ही मॉड्यूल %s विस्थापित करू इच्छिता\?</string>
|
|
||||||
<string name="module_uninstall_failed">विस्थापित करण्यात अयशस्वी: %s</string>
|
|
||||||
<string name="show_system_apps">सिस्टम अॅप्स दाखवा</string>
|
|
||||||
<string name="reboot_bootloader">बूटलोडरवर रीबूट करा</string>
|
<string name="reboot_bootloader">बूटलोडरवर रीबूट करा</string>
|
||||||
|
<string name="reboot_download">डाउनलोड करण्यासाठी रीबूट करा</string>
|
||||||
|
<string name="reboot_edl">EDL वर रीबूट करा</string>
|
||||||
|
<string name="about">बद्दल</string>
|
||||||
|
<string name="module_uninstall_confirm">तुमची खात्री आहे की तुम्ही मॉड्यूल %s विस्थापित करू इच्छिता\?</string>
|
||||||
<string name="module_uninstall_success">%s विस्थापित</string>
|
<string name="module_uninstall_success">%s विस्थापित</string>
|
||||||
|
<string name="module_uninstall_failed">विस्थापित करण्यात अयशस्वी: %s</string>
|
||||||
<string name="module_version">आवृत्ती</string>
|
<string name="module_version">आवृत्ती</string>
|
||||||
<string name="module_author">लेखक</string>
|
<string name="module_author">लेखक</string>
|
||||||
<string name="refresh">रिफ्रेश करा</string>
|
<string name="refresh">रिफ्रेश करा</string>
|
||||||
<string name="reboot_recovery">रिकवरी मध्ये रिबुट करा</string>
|
<string name="show_system_apps">सिस्टम अॅप्स दाखवा</string>
|
||||||
<string name="reboot_download">डाउनलोड करण्यासाठी रीबूट करा</string>
|
<string name="hide_system_apps">सिस्टम अॅप्स लपवा</string>
|
||||||
<string name="send_log">लॉग पाठवा</string>
|
<string name="send_log">लॉग पाठवा</string>
|
||||||
<string name="safe_mode">सुरक्षित मोड</string>
|
<string name="safe_mode">सुरक्षित मोड</string>
|
||||||
<string name="hide_system_apps">सिस्टम अॅप्स लपवा</string>
|
|
||||||
<string name="reboot_to_apply">प्रभावी होण्यासाठी रीबूट करा</string>
|
<string name="reboot_to_apply">प्रभावी होण्यासाठी रीबूट करा</string>
|
||||||
|
<string name="module_magisk_conflict">मॉड्यूल अक्षम केले आहेत कारण ते Magisk च्या विरोधाभास आहे!</string>
|
||||||
<string name="home_learn_kernelsu">KernelSU शिका</string>
|
<string name="home_learn_kernelsu">KernelSU शिका</string>
|
||||||
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
<string name="module_magisk_conflict">मॉड्यूल अक्षम केले आहेत कारण ते Magisk च्या विरोधाभास आहे!</string>
|
|
||||||
<string name="home_click_to_learn_kernelsu">KernelSU कसे स्थापित करायचे आणि मॉड्यूल कसे वापरायचे ते शिका</string>
|
<string name="home_click_to_learn_kernelsu">KernelSU कसे स्थापित करायचे आणि मॉड्यूल कसे वापरायचे ते शिका</string>
|
||||||
<string name="home_support_content">KernelSU विनामूल्य आणि मुक्त स्रोत आहे, आणि नेहमीच असेल. तथापि, देणगी देऊन तुम्ही आम्हाला दाखवू शकता की तुमची काळजी आहे.</string>
|
|
||||||
<string name="home_support_title">आम्हाला पाठिंबा द्या</string>
|
<string name="home_support_title">आम्हाला पाठिंबा द्या</string>
|
||||||
<string name="profile_custom">कस्टम</string>
|
<string name="home_support_content">KernelSU विनामूल्य आणि मुक्त स्रोत आहे, आणि नेहमीच असेल. तथापि, देणगी देऊन तुम्ही आम्हाला दाखवू शकता की तुमची काळजी आहे.</string>
|
||||||
<string name="profile_namespace">माउंट नेमस्पेस</string>
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
<string name="profile_default">डीफॉल्ट</string>
|
<string name="profile_default">डीफॉल्ट</string>
|
||||||
<string name="profile_template">साचा</string>
|
<string name="profile_template">साचा</string>
|
||||||
<string name="profile_namespace_individual">वैयक्तिक</string>
|
<string name="profile_custom">कस्टम</string>
|
||||||
<string name="profile_capabilities">क्षमता</string>
|
|
||||||
<string name="profile_name">प्रोफाइल नाव</string>
|
<string name="profile_name">प्रोफाइल नाव</string>
|
||||||
|
<string name="profile_namespace">माउंट नेमस्पेस</string>
|
||||||
<string name="profile_namespace_inherited">इनहेरीटेड</string>
|
<string name="profile_namespace_inherited">इनहेरीटेड</string>
|
||||||
<string name="profile_namespace_global">जागतिक</string>
|
<string name="profile_namespace_global">जागतिक</string>
|
||||||
|
<string name="profile_namespace_individual">वैयक्तिक</string>
|
||||||
<string name="profile_groups">गट</string>
|
<string name="profile_groups">गट</string>
|
||||||
|
<string name="profile_capabilities">क्षमता</string>
|
||||||
<string name="profile_selinux_context">SELinux संदर्भ</string>
|
<string name="profile_selinux_context">SELinux संदर्भ</string>
|
||||||
<string name="profile_umount_modules">उमाउंट मॉड्यूल्स</string>
|
<string name="profile_umount_modules">उमाउंट मॉड्यूल्स</string>
|
||||||
<string name="failed_to_update_app_profile">%s साठी अॅप प्रोफाइल अपडेट करण्यात अयशस्वी</string>
|
<string name="failed_to_update_app_profile">%s साठी अॅप प्रोफाइल अपडेट करण्यात अयशस्वी</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
<string name="settings_umount_modules_default">डीफॉल्टनुसार मॉड्यूल्स उमाउंट करा</string>
|
<string name="settings_umount_modules_default">डीफॉल्टनुसार मॉड्यूल्स उमाउंट करा</string>
|
||||||
<string name="settings_umount_modules_default_summary">अॅप प्रोफाइलमधील \"उमाउंट मॉड्यूल्स\" साठी जागतिक डीफॉल्ट मूल्य. सक्षम असल्यास, ते प्रोफाइल सेट नसलेल्या ॲप्लिकेशनचे सिस्टममधील सर्व मॉड्यूल बदल काढून टाकेल.</string>
|
<string name="settings_umount_modules_default_summary">अॅप प्रोफाइलमधील \"उमाउंट मॉड्यूल्स\" साठी जागतिक डीफॉल्ट मूल्य. सक्षम असल्यास, ते प्रोफाइल सेट नसलेल्या ॲप्लिकेशनचे सिस्टममधील सर्व मॉड्यूल बदल काढून टाकेल.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
<string name="profile_umount_modules_summary">हा पर्याय सक्षम केल्याने KernelSU ला या ऍप्लिकेशनसाठी मॉड्यूल्सद्वारे कोणत्याही सुधारित फाइल्स पुनर्संचयित करण्यास अनुमती मिळेल.</string>
|
<string name="profile_umount_modules_summary">हा पर्याय सक्षम केल्याने KernelSU ला या ऍप्लिकेशनसाठी मॉड्यूल्सद्वारे कोणत्याही सुधारित फाइल्स पुनर्संचयित करण्यास अनुमती मिळेल.</string>
|
||||||
<string name="failed_to_update_sepolicy">यासाठी SELinux नियम अपडेट करण्यात अयशस्वी: %s</string>
|
<string name="profile_selinux_domain">डोमेन</string>
|
||||||
<string name="profile_selinux_rules">नियम</string>
|
<string name="profile_selinux_rules">नियम</string>
|
||||||
<string name="module_update">अपडेट करा</string>
|
<string name="module_update">अपडेट करा</string>
|
||||||
<string name="profile_selinux_domain">डोमेन</string>
|
|
||||||
<string name="module_downloading">मॉड्यूल डाउनलोड करत आहे: %s</string>
|
<string name="module_downloading">मॉड्यूल डाउनलोड करत आहे: %s</string>
|
||||||
<string name="module_start_downloading">डाउनलोड करणे सुरू करा: %s</string>
|
<string name="module_start_downloading">डाउनलोड करणे सुरू करा: %s</string>
|
||||||
<string name="new_version_available">नवीन आवृत्ती: %s उपलब्ध आहे, डाउनलोड करण्यासाठी क्लिक करा</string>
|
<string name="new_version_available">नवीन आवृत्ती: %s उपलब्ध आहे, डाउनलोड करण्यासाठी क्लिक करा</string>
|
||||||
<string name="force_stop_app">सक्तीने थांबा</string>
|
|
||||||
<string name="launch_app">लाँच करा</string>
|
<string name="launch_app">लाँच करा</string>
|
||||||
|
<string name="force_stop_app" formatted="false">सक्तीने थांबा</string>
|
||||||
<string name="restart_app">पुन्हा सुरू करा</string>
|
<string name="restart_app">पुन्हा सुरू करा</string>
|
||||||
|
<string name="failed_to_update_sepolicy">यासाठी SELinux नियम अपडेट करण्यात अयशस्वी: %s</string>
|
||||||
|
<string name="module_changelog">Changelog</string>
|
||||||
|
<string name="settings_profile_template">App Profile Template</string>
|
||||||
|
<string name="settings_profile_template_summary">Manage local and online template of App Profile</string>
|
||||||
|
<string name="app_profile_template_create">Create template</string>
|
||||||
|
<string name="app_profile_template_edit">Edit template</string>
|
||||||
|
<string name="app_profile_template_id">ID</string>
|
||||||
|
<string name="app_profile_template_id_invalid">Invalid template ID</string>
|
||||||
|
<string name="app_profile_template_name">Name</string>
|
||||||
|
<string name="app_profile_template_description">Description</string>
|
||||||
|
<string name="app_profile_template_save">Save</string>
|
||||||
|
<string name="app_profile_template_delete">Delete</string>
|
||||||
|
<string name="app_profile_template_view">View template</string>
|
||||||
|
<string name="app_profile_template_readonly">Read only</string>
|
||||||
|
<string name="app_profile_template_id_exist">Template ID already exists!</string>
|
||||||
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Import from clipboard</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Export to clipboard</string>
|
||||||
|
<string name="app_profile_template_export_empty">Cannot find local template to export!</string>
|
||||||
|
<string name="app_profile_template_import_success">Imported successfully</string>
|
||||||
|
<string name="app_profile_template_sync">Sync online templates</string>
|
||||||
|
<string name="app_profile_template_save_failed">Failed to save template</string>
|
||||||
|
<string name="app_profile_template_import_empty">Clipboard is empty!</string>
|
||||||
|
<string name="module_changelog_failed">Fetch changelog failed: %s</string>
|
||||||
|
<string name="settings_check_update">Check update</string>
|
||||||
|
<string name="settings_check_update_summary">Automatically check for updates when opening the app</string>
|
||||||
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
|
<string name="select_file">Select a image that needs to be patched</string>
|
||||||
|
<string name="install_inactive_slot">Install to inactive slot (After OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
|
||||||
|
<string name="install_next">Next</string>
|
||||||
|
<string name="select_file_tip">%1$s partition image is recommended</string>
|
||||||
|
<string name="select_kmi">Select KMI</string>
|
||||||
|
<string name="settings_uninstall">Uninstall</string>
|
||||||
|
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
||||||
|
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
||||||
|
<string name="settings_restore_stock_image">Restore stock image</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
||||||
|
<string name="flashing">Flashing</string>
|
||||||
|
<string name="flash_success">Flash success</string>
|
||||||
|
<string name="flash_failed">Flash failed</string>
|
||||||
|
<string name="selected_lkm">Selected LKM: %s</string>
|
||||||
<string name="save_log">लॉग जतन करा</string>
|
<string name="save_log">लॉग जतन करा</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,38 +1,371 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="selinux_status_unknown">Tidak Diketahui</string>
|
<string name="home">Layar Utama</string>
|
||||||
<string name="selinux_status_disabled">Lumpuhkan</string>
|
<string name="home_not_installed">Tidak terpasang</string>
|
||||||
<string name="selinux_status_permissive">Permisif</string>
|
<string name="home_click_to_install">Tekan untuk memasang</string>
|
||||||
<string name="reboot_download">Reboot ke Download</string>
|
<string name="home_working">Berjalan</string>
|
||||||
<string name="module_failed_to_enable">Modul tidak berjaya diaktifkan: %s</string>
|
<string name="home_working_version">Versi: %d</string>
|
||||||
<string name="reboot_edl">Reboot ke EDL</string>
|
|
||||||
<string name="home_superuser_count">Superusers: %d</string>
|
<string name="home_superuser_count">Superusers: %d</string>
|
||||||
<string name="home_module_count">Modul: %d</string>
|
<string name="home_module_count">Modul: %d</string>
|
||||||
<string name="selinux_status_enforcing">Enforcing</string>
|
|
||||||
<string name="home_fingerprint">Cap Jari</string>
|
|
||||||
<string name="reboot_recovery">Reboot ke Recovery</string>
|
|
||||||
<string name="reboot_userspace">Soft Reboot</string>
|
|
||||||
<string name="uninstall">Padam</string>
|
|
||||||
<string name="module_install">Pasang</string>
|
|
||||||
<string name="home_click_to_install">Tekan untuk memasang</string>
|
|
||||||
<string name="module">Modul</string>
|
|
||||||
<string name="about">Tentang</string>
|
|
||||||
<string name="home_working_version">Versi: %d</string>
|
|
||||||
<string name="reboot">Reboot</string>
|
|
||||||
<string name="home_unsupported_reason">KernelSU ketika ini hanya menyokong kernel GKI</string>
|
|
||||||
<string name="home_selinux_status">Status SELinux</string>
|
|
||||||
<string name="home_unsupported">Tidak Disokong</string>
|
<string name="home_unsupported">Tidak Disokong</string>
|
||||||
<string name="home">Layar Utama</string>
|
<string name="home_unsupported_reason">KernelSU ketika ini hanya menyokong kernel GKI</string>
|
||||||
<string name="module_uninstall_confirm">Apakah anda pasti ingin membuang modul %s\?</string>
|
<string name="home_kernel">Kernel</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
|
<string name="home_manager_version">Versi manager</string>
|
||||||
|
<string name="home_fingerprint">Cap Jari</string>
|
||||||
|
<string name="home_selinux_status">Status SELinux</string>
|
||||||
|
<string name="selinux_status_disabled">Lumpuhkan</string>
|
||||||
|
<string name="selinux_status_enforcing">Enforcing</string>
|
||||||
|
<string name="selinux_status_permissive">Permisif</string>
|
||||||
|
<string name="selinux_status_unknown">Tidak Diketahui</string>
|
||||||
<string name="superuser">Superuser</string>
|
<string name="superuser">Superuser</string>
|
||||||
<string name="settings">Tetapan</string>
|
<string name="module_failed_to_enable">Modul tidak berjaya diaktifkan: %s</string>
|
||||||
<string name="home_working">Berjalan</string>
|
|
||||||
<string name="module_failed_to_disable">Gagal mematikan modul: %s</string>
|
<string name="module_failed_to_disable">Gagal mematikan modul: %s</string>
|
||||||
<string name="module_empty">Tiada modul dipasang</string>
|
<string name="module_empty">Tiada modul dipasang</string>
|
||||||
|
<string name="module">Modul</string>
|
||||||
|
<string name="module_sort_action_first">Sort (Action first)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
||||||
|
<string name="uninstall">Padam</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
|
<string name="module_install">Pasang</string>
|
||||||
<string name="install">Pasang</string>
|
<string name="install">Pasang</string>
|
||||||
<string name="home_kernel">Kernel</string>
|
<string name="reboot">Reboot</string>
|
||||||
<string name="home_not_installed">Tidak terpasang</string>
|
<string name="settings">Tetapan</string>
|
||||||
|
<string name="reboot_userspace">Soft Reboot</string>
|
||||||
|
<string name="reboot_recovery">Reboot ke Recovery</string>
|
||||||
<string name="reboot_bootloader">Reboot ke Bootloader</string>
|
<string name="reboot_bootloader">Reboot ke Bootloader</string>
|
||||||
<string name="home_manager_version">Versi manager</string>
|
<string name="reboot_download">Reboot ke Download</string>
|
||||||
|
<string name="reboot_edl">Reboot ke EDL</string>
|
||||||
|
<string name="about">Tentang</string>
|
||||||
|
<string name="module_uninstall_confirm">Apakah anda pasti ingin membuang modul %s\?</string>
|
||||||
|
<string name="module_uninstall_success">%s uninstalled</string>
|
||||||
|
<string name="module_uninstall_failed">Failed to uninstall: %s</string>
|
||||||
|
<string name="module_version">Version</string>
|
||||||
|
<string name="module_author">Author</string>
|
||||||
|
<string name="refresh">Refresh</string>
|
||||||
|
<string name="show_system_apps">Show system apps</string>
|
||||||
|
<string name="hide_system_apps">Hide system apps</string>
|
||||||
|
<string name="send_log">Send logs</string>
|
||||||
|
<string name="safe_mode">Safe mode</string>
|
||||||
|
<string name="reboot_to_apply">Reboot to take effect</string>
|
||||||
|
<string name="module_magisk_conflict">Modules are unavailable due to a conflict with Magisk!</string>
|
||||||
|
<string name="home_learn_kernelsu">Learn KernelSU</string>
|
||||||
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
|
<string name="home_click_to_learn_kernelsu">Learn how to install KernelSU and use modules</string>
|
||||||
|
<string name="home_support_title">Support Us</string>
|
||||||
|
<string name="home_support_content">KernelSU is, and always will be, free, and open source. You can however show us that you care by making a donation.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
|
<string name="profile_default">Default</string>
|
||||||
|
<string name="profile_template">Template</string>
|
||||||
|
<string name="profile_custom">Custom</string>
|
||||||
|
<string name="profile_name">Profile name</string>
|
||||||
|
<string name="profile_namespace">Mount namespace</string>
|
||||||
|
<string name="profile_namespace_inherited">Inherited</string>
|
||||||
|
<string name="profile_namespace_global">Global</string>
|
||||||
|
<string name="profile_namespace_individual">Individual</string>
|
||||||
|
<string name="profile_groups">Groups</string>
|
||||||
|
<string name="profile_capabilities">Capabilities</string>
|
||||||
|
<string name="profile_selinux_context">SELinux context</string>
|
||||||
|
<string name="profile_umount_modules">Umount modules</string>
|
||||||
|
<string name="failed_to_update_app_profile">Failed to update App Profile for %s</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
|
<string name="settings_umount_modules_default">Umount modules by default</string>
|
||||||
|
<string name="settings_umount_modules_default_summary">The global default value for \"Umount modules\" in App Profile. If enabled, it will remove all module modifications to the system for apps that don\'t have a profile set.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
|
<string name="profile_umount_modules_summary">Enabling this option will allow KernelSU to restore any modified files by the modules for this app.</string>
|
||||||
|
<string name="profile_selinux_domain">Domain</string>
|
||||||
|
<string name="profile_selinux_rules">Rules</string>
|
||||||
|
<string name="module_update">Update</string>
|
||||||
|
<string name="module_downloading">Downloading module: %s</string>
|
||||||
|
<string name="module_start_downloading">Start downloading: %s</string>
|
||||||
|
<string name="new_version_available">New version %s is available, click to upgrade.</string>
|
||||||
|
<string name="launch_app">Launch</string>
|
||||||
|
<string name="force_stop_app" formatted="false">Force stop</string>
|
||||||
|
<string name="restart_app">Restart</string>
|
||||||
|
<string name="failed_to_update_sepolicy">Failed to update SELinux rules for %s</string>
|
||||||
|
<string name="module_changelog">Changelog</string>
|
||||||
|
<string name="settings_profile_template">App Profile Template</string>
|
||||||
|
<string name="settings_profile_template_summary">Manage local and online template of App Profile</string>
|
||||||
|
<string name="app_profile_template_create">Create template</string>
|
||||||
|
<string name="app_profile_template_edit">Edit template</string>
|
||||||
|
<string name="app_profile_template_id">ID</string>
|
||||||
|
<string name="app_profile_template_id_invalid">Invalid template ID</string>
|
||||||
|
<string name="app_profile_template_name">Name</string>
|
||||||
|
<string name="app_profile_template_description">Description</string>
|
||||||
|
<string name="app_profile_template_save">Save</string>
|
||||||
|
<string name="app_profile_template_delete">Delete</string>
|
||||||
|
<string name="app_profile_template_view">View template</string>
|
||||||
|
<string name="app_profile_template_readonly">Read only</string>
|
||||||
|
<string name="app_profile_template_id_exist">Template ID already exists!</string>
|
||||||
|
<string name="app_profile_import_export">Import/Export</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Import from clipboard</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Export to clipboard</string>
|
||||||
|
<string name="app_profile_template_export_empty">Cannot find local template to export!</string>
|
||||||
|
<string name="app_profile_template_import_success">Imported successfully</string>
|
||||||
|
<string name="app_profile_template_sync">Sync online templates</string>
|
||||||
|
<string name="app_profile_template_save_failed">Failed to save template</string>
|
||||||
|
<string name="app_profile_template_import_empty">Clipboard is empty!</string>
|
||||||
|
<string name="module_changelog_failed">Fetch changelog failed: %s</string>
|
||||||
|
<string name="settings_check_update">Check update</string>
|
||||||
|
<string name="settings_check_update_summary">Automatically check for updates when opening the app</string>
|
||||||
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
|
<string name="action">Action</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
|
<string name="select_file">Select a image that needs to be patched</string>
|
||||||
|
<string name="install_inactive_slot">Install to inactive slot (After OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
|
||||||
|
<string name="install_next">Next</string>
|
||||||
|
<string name="select_file_tip">%1$s partition image is recommended</string>
|
||||||
|
<string name="select_kmi">Select KMI</string>
|
||||||
|
<string name="settings_uninstall">Uninstall</string>
|
||||||
|
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
||||||
|
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
||||||
|
<string name="settings_restore_stock_image">Restore stock image</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
||||||
|
<string name="flashing">Flashing</string>
|
||||||
|
<string name="flash_success">Flash success</string>
|
||||||
|
<string name="flash_failed">Flash failed</string>
|
||||||
|
<string name="selected_lkm">Selected LKM: %s</string>
|
||||||
<string name="save_log">Simpan Log</string>
|
<string name="save_log">Simpan Log</string>
|
||||||
|
<string name="log_saved">Logs saved</string>
|
||||||
|
<string name="status_supported">Supported</string>
|
||||||
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
<string name="home_unsupported">Niet ondersteund</string>
|
<string name="home_unsupported">Niet ondersteund</string>
|
||||||
<string name="home_unsupported_reason">KernelSU ondersteunt alleen GKI kernels</string>
|
<string name="home_unsupported_reason">KernelSU ondersteunt alleen GKI kernels</string>
|
||||||
<string name="home_kernel">Kernel</string>
|
<string name="home_kernel">Kernel</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Manager versie</string>
|
<string name="home_manager_version">Manager versie</string>
|
||||||
<string name="home_fingerprint">Fingerprint</string>
|
<string name="home_fingerprint">Fingerprint</string>
|
||||||
<string name="home_selinux_status">SELinux status</string>
|
<string name="home_selinux_status">SELinux status</string>
|
||||||
@@ -22,7 +25,10 @@
|
|||||||
<string name="module_failed_to_disable">Mislukt om module uit te schakelen: %s</string>
|
<string name="module_failed_to_disable">Mislukt om module uit te schakelen: %s</string>
|
||||||
<string name="module_empty">Geen module geïnstalleerde</string>
|
<string name="module_empty">Geen module geïnstalleerde</string>
|
||||||
<string name="module">Module</string>
|
<string name="module">Module</string>
|
||||||
|
<string name="module_sort_action_first">Sorteren (actie eerst)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sorteren (eerst ingeschakeld)</string>
|
||||||
<string name="uninstall">Verwijderen</string>
|
<string name="uninstall">Verwijderen</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
<string name="module_install">Installeren</string>
|
<string name="module_install">Installeren</string>
|
||||||
<string name="install">Installeren</string>
|
<string name="install">Installeren</string>
|
||||||
<string name="reboot">Herstart</string>
|
<string name="reboot">Herstart</string>
|
||||||
@@ -50,6 +56,7 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">Leer hoe KernelSU te installeren en modules te gebruiken</string>
|
<string name="home_click_to_learn_kernelsu">Leer hoe KernelSU te installeren en modules te gebruiken</string>
|
||||||
<string name="home_support_title">Ondersteun ons</string>
|
<string name="home_support_title">Ondersteun ons</string>
|
||||||
<string name="home_support_content">KernelSU is, en zal altijd, vrij en open source zijn. Je kan altijd je appreciatie tonen met een donatie.</string>
|
<string name="home_support_content">KernelSU is, en zal altijd, vrij en open source zijn. Je kan altijd je appreciatie tonen met een donatie.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
<string name="profile_default">Standaard</string>
|
<string name="profile_default">Standaard</string>
|
||||||
<string name="profile_template">Sjabloon</string>
|
<string name="profile_template">Sjabloon</string>
|
||||||
<string name="profile_custom">Aangepast</string>
|
<string name="profile_custom">Aangepast</string>
|
||||||
@@ -63,56 +70,60 @@
|
|||||||
<string name="profile_selinux_context">SELinux context</string>
|
<string name="profile_selinux_context">SELinux context</string>
|
||||||
<string name="profile_umount_modules">Ontkoppel modules</string>
|
<string name="profile_umount_modules">Ontkoppel modules</string>
|
||||||
<string name="failed_to_update_app_profile">Mislukt om App Profiel te updaten voor %s</string>
|
<string name="failed_to_update_app_profile">Mislukt om App Profiel te updaten voor %s</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
<string name="settings_umount_modules_default">Ontkoppel standaard de modules</string>
|
<string name="settings_umount_modules_default">Ontkoppel standaard de modules</string>
|
||||||
<string name="settings_umount_modules_default_summary">De globale standaardwaarde voor \"Umount modules\" in App Profile. Als dit is ingeschakeld, worden alle modulewijzigingen in het systeem verwijderd voor apps waarvoor geen profiel is ingesteld.</string>
|
<string name="settings_umount_modules_default_summary">De globale standaardwaarde voor \"Umount modules\" in App Profile. Als dit is ingeschakeld, worden alle modulewijzigingen in het systeem verwijderd voor apps waarvoor geen profiel is ingesteld.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
<string name="profile_umount_modules_summary">Met deze optie ingeschakeld zal KernelSU toelaten om alle gewijzigde bestanden door de modules voor deze app te herstellen.</string>
|
<string name="profile_umount_modules_summary">Met deze optie ingeschakeld zal KernelSU toelaten om alle gewijzigde bestanden door de modules voor deze app te herstellen.</string>
|
||||||
<string name="profile_selinux_domain">Domein</string>
|
<string name="profile_selinux_domain">Domein</string>
|
||||||
<string name="profile_selinux_rules">Regels</string>
|
<string name="profile_selinux_rules">Regels</string>
|
||||||
<string name="module_update">Update</string>
|
<string name="module_update">Update</string>
|
||||||
<string name="module_downloading">Downloaden van module: %s</string>
|
<string name="module_downloading">Downloaden van module: %s</string>
|
||||||
|
<string name="module_start_downloading">Begin met downloaden: %s</string>
|
||||||
<string name="new_version_available">Nieuwe versie %s is beschikbaar,klik om te upgraden.</string>
|
<string name="new_version_available">Nieuwe versie %s is beschikbaar,klik om te upgraden.</string>
|
||||||
<string name="launch_app">Start</string>
|
<string name="launch_app">Start</string>
|
||||||
<string name="force_stop_app" formatted="false">Forceer stop</string>
|
<string name="force_stop_app" formatted="false">Forceer stop</string>
|
||||||
<string name="restart_app">Herstart</string>
|
<string name="restart_app">Herstart</string>
|
||||||
<string name="module_start_downloading">Begin met downloaden: %s</string>
|
|
||||||
<string name="failed_to_update_sepolicy">Kan SELinux-regels niet bijwerken voor: %s</string>
|
<string name="failed_to_update_sepolicy">Kan SELinux-regels niet bijwerken voor: %s</string>
|
||||||
<string name="module_changelog">wijzigings logboek</string>
|
<string name="module_changelog">wijzigings logboek</string>
|
||||||
<string name="settings_profile_template">App-profiel Sjabloon</string>
|
<string name="settings_profile_template">App-profiel Sjabloon</string>
|
||||||
|
<string name="settings_profile_template_summary">Beheer lokale en online sjabloon van app-profiel</string>
|
||||||
<string name="app_profile_template_create">Maken sjabloon</string>
|
<string name="app_profile_template_create">Maken sjabloon</string>
|
||||||
<string name="app_profile_template_edit">Bewerkin sjabloon</string>
|
<string name="app_profile_template_edit">Bewerkin sjabloon</string>
|
||||||
<string name="app_profile_template_id">ID</string>
|
<string name="app_profile_template_id">ID</string>
|
||||||
<string name="app_profile_template_id_invalid">Ongeldige sjabloon ID</string>
|
<string name="app_profile_template_id_invalid">Ongeldige sjabloon ID</string>
|
||||||
<string name="app_profile_template_name">Naam</string>
|
<string name="app_profile_template_name">Naam</string>
|
||||||
<string name="app_profile_template_save">Redde</string>
|
|
||||||
<string name="app_profile_template_view">Bekijken sjabloon</string>
|
|
||||||
<string name="app_profile_template_description">Beschrijving</string>
|
<string name="app_profile_template_description">Beschrijving</string>
|
||||||
<string name="settings_profile_template_summary">Beheer lokale en online sjabloon van app-profiel</string>
|
<string name="app_profile_template_save">Redde</string>
|
||||||
<string name="app_profile_template_delete">Verwijderen</string>
|
<string name="app_profile_template_delete">Verwijderen</string>
|
||||||
|
<string name="app_profile_template_view">Bekijken sjabloon</string>
|
||||||
<string name="app_profile_template_readonly">Alleen lezen</string>
|
<string name="app_profile_template_readonly">Alleen lezen</string>
|
||||||
<string name="app_profile_template_id_exist">Sjabloon ID bestaat al!</string>
|
<string name="app_profile_template_id_exist">Sjabloon ID bestaat al!</string>
|
||||||
|
<string name="app_profile_import_export">Importeren/Exporteren</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Importeren vanaf klembord</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Exporteren naar klembord</string>
|
||||||
|
<string name="app_profile_template_export_empty">Kan niet geen lokale sjabloon vinden om te exporteren!</string>
|
||||||
|
<string name="app_profile_template_import_success">Succesvol geïmporteerd</string>
|
||||||
<string name="app_profile_template_sync">Synchroniseer online-sjablonen</string>
|
<string name="app_profile_template_sync">Synchroniseer online-sjablonen</string>
|
||||||
<string name="app_profile_template_save_failed">Mislukt naar opslaan sjabloon</string>
|
<string name="app_profile_template_save_failed">Mislukt naar opslaan sjabloon</string>
|
||||||
<string name="app_profile_template_import_empty">Klembord is leeg!</string>
|
<string name="app_profile_template_import_empty">Klembord is leeg!</string>
|
||||||
<string name="app_profile_import_export">Importeren/Exporteren</string>
|
|
||||||
<string name="app_profile_import_from_clipboard">Importeren vanaf klembord</string>
|
|
||||||
<string name="module_changelog_failed">Ophalen van wijzigingslogboek mislukt: %s</string>
|
<string name="module_changelog_failed">Ophalen van wijzigingslogboek mislukt: %s</string>
|
||||||
<string name="app_profile_export_to_clipboard">Exporteren naar klembord</string>
|
|
||||||
<string name="settings_check_update">Controleer update</string>
|
<string name="settings_check_update">Controleer update</string>
|
||||||
|
<string name="settings_check_update_summary">Controleer automatisch op updates bij het openen van de app</string>
|
||||||
|
<string name="grant_root_failed">Kan geen root verlenen!</string>
|
||||||
|
<string name="action">Actie</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Schakel WebView-foutopsporing</string>
|
<string name="enable_web_debugging">Schakel WebView-foutopsporing</string>
|
||||||
<string name="enable_web_debugging_summary">Kan worden gebruikt om WebUI te debuggen. Schakel dit alleen in als dat nodig is.</string>
|
<string name="enable_web_debugging_summary">Kan worden gebruikt om WebUI te debuggen. Schakel dit alleen in als dat nodig is.</string>
|
||||||
<string name="app_profile_template_export_empty">Kan niet geen lokale sjabloon vinden om te exporteren!</string>
|
|
||||||
<string name="app_profile_template_import_success">Succesvol geïmporteerd</string>
|
|
||||||
<string name="open">Open</string>
|
|
||||||
<string name="settings_check_update_summary">Controleer automatisch op updates bij het openen van de app</string>
|
|
||||||
<string name="direct_install">Directe installatie (aanbevolen)</string>
|
<string name="direct_install">Directe installatie (aanbevolen)</string>
|
||||||
<string name="select_file">Selecteer een bestand</string>
|
<string name="select_file">Selecteer een bestand</string>
|
||||||
<string name="grant_root_failed">Kan geen root verlenen!</string>
|
<string name="install_inactive_slot">Installeren in inactief slot (na OTA)</string>
|
||||||
<string name="select_file_tip">%1$s partitie-image wordt aanbevolen</string>
|
|
||||||
<string name="install_next">Naast</string>
|
|
||||||
<string name="install_inactive_slot_warning">Uw apparaat wordt **GEFORCEERD** om na een herstart op te starten naar het huidige inactieve slot!
|
<string name="install_inactive_slot_warning">Uw apparaat wordt **GEFORCEERD** om na een herstart op te starten naar het huidige inactieve slot!
|
||||||
\nGebruik deze optie alleen nadat OTA is voltooid.
|
\nGebruik deze optie alleen nadat OTA is voltooid.
|
||||||
\nDoorgaan?</string>
|
\nDoorgaan?</string>
|
||||||
<string name="install_inactive_slot">Installeren in inactief slot (na OTA)</string>
|
<string name="install_next">Naast</string>
|
||||||
|
<string name="select_file_tip">%1$s partitie-image wordt aanbevolen</string>
|
||||||
<string name="select_kmi">KMI selecteren</string>
|
<string name="select_kmi">KMI selecteren</string>
|
||||||
<string name="settings_uninstall">Desinstalleren</string>
|
<string name="settings_uninstall">Desinstalleren</string>
|
||||||
<string name="settings_uninstall_temporary">Tijdelijk verwijderen</string>
|
<string name="settings_uninstall_temporary">Tijdelijk verwijderen</string>
|
||||||
@@ -122,12 +133,241 @@
|
|||||||
<string name="settings_uninstall_permanent_message">Het verwijderen van KernelSU (Root en alle modules) volledig en permanent.</string>
|
<string name="settings_uninstall_permanent_message">Het verwijderen van KernelSU (Root en alle modules) volledig en permanent.</string>
|
||||||
<string name="settings_restore_stock_image_message">Herstel de standaard fabrieksimage (als er een back-up bestaat), die normaal gesproken vóór OTA wordt gebruikt. Als u KernelSU moet verwijderen, gebruikt u permanent verwijderen.</string>
|
<string name="settings_restore_stock_image_message">Herstel de standaard fabrieksimage (als er een back-up bestaat), die normaal gesproken vóór OTA wordt gebruikt. Als u KernelSU moet verwijderen, gebruikt u permanent verwijderen.</string>
|
||||||
<string name="flashing">Knipperen</string>
|
<string name="flashing">Knipperen</string>
|
||||||
<string name="save_log">Logboeken Opslaan</string>
|
|
||||||
<string name="flash_success">Flash-succes</string>
|
<string name="flash_success">Flash-succes</string>
|
||||||
<string name="flash_failed">Flash is mislukt</string>
|
<string name="flash_failed">Flash is mislukt</string>
|
||||||
<string name="selected_lkm">Geselecteerde LKM: %s</string>
|
<string name="selected_lkm">Geselecteerde LKM: %s</string>
|
||||||
<string name="action">Actie</string>
|
<string name="save_log">Logboeken Opslaan</string>
|
||||||
<string name="log_saved">Logs opgeslagen</string>
|
<string name="log_saved">Logs opgeslagen</string>
|
||||||
<string name="module_sort_enabled_first">Sorteren (eerst ingeschakeld)</string>
|
<string name="status_supported">Supported</string>
|
||||||
<string name="module_sort_action_first">Sorteren (actie eerst)</string>
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
<string name="home_unsupported">Nieobsługiwany</string>
|
<string name="home_unsupported">Nieobsługiwany</string>
|
||||||
<string name="home_unsupported_reason">KernelSU obsługuje obecnie tylko jądra GKI</string>
|
<string name="home_unsupported_reason">KernelSU obsługuje obecnie tylko jądra GKI</string>
|
||||||
<string name="home_kernel">Jądro</string>
|
<string name="home_kernel">Jądro</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">SuSFS Version</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Wersja menedżera</string>
|
<string name="home_manager_version">Wersja menedżera</string>
|
||||||
<string name="home_fingerprint">Odcisk</string>
|
<string name="home_fingerprint">Odcisk</string>
|
||||||
<string name="home_selinux_status">Status SELinux</string>
|
<string name="home_selinux_status">Status SELinux</string>
|
||||||
@@ -22,7 +25,10 @@
|
|||||||
<string name="module_failed_to_disable">Nie udało się wyłączyć modułu: %s</string>
|
<string name="module_failed_to_disable">Nie udało się wyłączyć modułu: %s</string>
|
||||||
<string name="module_empty">Brak zainstalowanych modułów</string>
|
<string name="module_empty">Brak zainstalowanych modułów</string>
|
||||||
<string name="module">Moduły</string>
|
<string name="module">Moduły</string>
|
||||||
|
<string name="module_sort_action_first">Sortuj (najpierw działania)</string>
|
||||||
|
<string name="module_sort_enabled_first">Sortuj (najpierw włączone)</string>
|
||||||
<string name="uninstall">Odinstaluj</string>
|
<string name="uninstall">Odinstaluj</string>
|
||||||
|
<string name="restore">Restore</string>
|
||||||
<string name="module_install">Instaluj</string>
|
<string name="module_install">Instaluj</string>
|
||||||
<string name="install">Instaluj</string>
|
<string name="install">Instaluj</string>
|
||||||
<string name="reboot">Uruchom ponownie</string>
|
<string name="reboot">Uruchom ponownie</string>
|
||||||
@@ -50,6 +56,7 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">Dowiedz się jak zainstalować KernelSU i jak korzystać z modułów</string>
|
<string name="home_click_to_learn_kernelsu">Dowiedz się jak zainstalować KernelSU i jak korzystać z modułów</string>
|
||||||
<string name="home_support_title">Wesprzyj nas</string>
|
<string name="home_support_title">Wesprzyj nas</string>
|
||||||
<string name="home_support_content">KernelSU jest i zawsze będzie darmowy oraz otwarty. Niemniej jednak możesz nam pokazać, że Ci zależy, wysyłając darowiznę.</string>
|
<string name="home_support_content">KernelSU jest i zawsze będzie darmowy oraz otwarty. Niemniej jednak możesz nam pokazać, że Ci zależy, wysyłając darowiznę.</string>
|
||||||
|
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
<string name="profile_default">Domyślny</string>
|
<string name="profile_default">Domyślny</string>
|
||||||
<string name="profile_template">Szablon</string>
|
<string name="profile_template">Szablon</string>
|
||||||
<string name="profile_custom">Własny</string>
|
<string name="profile_custom">Własny</string>
|
||||||
@@ -63,8 +70,10 @@
|
|||||||
<string name="profile_selinux_context">Kontekst SELinux</string>
|
<string name="profile_selinux_context">Kontekst SELinux</string>
|
||||||
<string name="profile_umount_modules">Odmontuj moduły</string>
|
<string name="profile_umount_modules">Odmontuj moduły</string>
|
||||||
<string name="failed_to_update_app_profile">Nie udało się zaktualizować profilu aplikacji dla %s</string>
|
<string name="failed_to_update_app_profile">Nie udało się zaktualizować profilu aplikacji dla %s</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
||||||
<string name="settings_umount_modules_default">Domyślnie odmontuj moduły</string>
|
<string name="settings_umount_modules_default">Domyślnie odmontuj moduły</string>
|
||||||
<string name="settings_umount_modules_default_summary">Globalna wartość domyślna opcji \"Odmontuj moduły\" w profilu aplikacji. Jeśli jest włączona, wycofuje wszystkie modyfikacje dokonane przez moduły dla aplikacji, które nie mają ustawionego profilu.</string>
|
<string name="settings_umount_modules_default_summary">Globalna wartość domyślna opcji \"Odmontuj moduły\" w profilu aplikacji. Jeśli jest włączona, wycofuje wszystkie modyfikacje dokonane przez moduły dla aplikacji, które nie mają ustawionego profilu.</string>
|
||||||
|
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
||||||
<string name="profile_umount_modules_summary">Włączenie tej opcji umożliwi KernelSU przywrócenie wszelkich zmodyfikowanych plików przez moduły dla tej aplikacji.</string>
|
<string name="profile_umount_modules_summary">Włączenie tej opcji umożliwi KernelSU przywrócenie wszelkich zmodyfikowanych plików przez moduły dla tej aplikacji.</string>
|
||||||
<string name="profile_selinux_domain">Domena</string>
|
<string name="profile_selinux_domain">Domena</string>
|
||||||
<string name="profile_selinux_rules">Reguły</string>
|
<string name="profile_selinux_rules">Reguły</string>
|
||||||
@@ -77,47 +86,49 @@
|
|||||||
<string name="restart_app">Restartuj</string>
|
<string name="restart_app">Restartuj</string>
|
||||||
<string name="failed_to_update_sepolicy">Nie udało się zaktualizować reguł SELinux dla %s</string>
|
<string name="failed_to_update_sepolicy">Nie udało się zaktualizować reguł SELinux dla %s</string>
|
||||||
<string name="module_changelog">Dziennik zmian</string>
|
<string name="module_changelog">Dziennik zmian</string>
|
||||||
|
<string name="settings_profile_template">Szablon profilu aplikacji</string>
|
||||||
|
<string name="settings_profile_template_summary">Zarządzaj lokalnym i internetowym szablonem profilu aplikacji</string>
|
||||||
|
<string name="app_profile_template_create">Stwórz szablon</string>
|
||||||
|
<string name="app_profile_template_edit">Edytuj szablon</string>
|
||||||
|
<string name="app_profile_template_id">Identyfikator</string>
|
||||||
|
<string name="app_profile_template_id_invalid">Błędny identyfikator szablonu</string>
|
||||||
|
<string name="app_profile_template_name">Nazwa</string>
|
||||||
|
<string name="app_profile_template_description">Opis</string>
|
||||||
|
<string name="app_profile_template_save">Zapisz</string>
|
||||||
|
<string name="app_profile_template_delete">Usuń</string>
|
||||||
|
<string name="app_profile_template_view">Zobacz szablon</string>
|
||||||
|
<string name="app_profile_template_readonly">Tylko do odczytu</string>
|
||||||
|
<string name="app_profile_template_id_exist">Szablon o takim identyfikatorze już istnieje!</string>
|
||||||
|
<string name="app_profile_import_export">Importuj/Eksportuj</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Importuj ze schowka</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Eksportuj do schowka</string>
|
||||||
|
<string name="app_profile_template_export_empty">Nie można znaleźć lokalnego szablonu do eksportu!</string>
|
||||||
|
<string name="app_profile_template_import_success">Zaimportowano pomyślnie</string>
|
||||||
|
<string name="app_profile_template_sync">Synchronizuj internetowe szablony</string>
|
||||||
|
<string name="app_profile_template_save_failed">Nie udało się zapisać szablonu</string>
|
||||||
|
<string name="app_profile_template_import_empty">Schowek jest pusty!</string>
|
||||||
|
<string name="module_changelog_failed">Pobranie dziennika zmian nie powiodło się: %s</string>
|
||||||
|
<string name="settings_check_update">Wyszukaj aktualizacje</string>
|
||||||
|
<string name="settings_check_update_summary">Wyszukuj aktualizacje automatycznie przy otwieraniu aplikacji</string>
|
||||||
|
<string name="grant_root_failed">Nie udało się przyznać roota!</string>
|
||||||
|
<string name="action">Akcja</string>
|
||||||
|
<string name="open">Otwórz</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Włącz debugowanie WebView</string>
|
<string name="enable_web_debugging">Włącz debugowanie WebView</string>
|
||||||
<string name="enable_web_debugging_summary">Może być użyte do debugowania WebUI. Włącz tylko w razie potrzeby.</string>
|
<string name="enable_web_debugging_summary">Może być użyte do debugowania WebUI. Włącz tylko w razie potrzeby.</string>
|
||||||
<string name="select_file_tip">Obraz partycji %1$s jest zalecany</string>
|
|
||||||
<string name="select_kmi">Wybierz KMI</string>
|
|
||||||
<string name="install_next">Dalej</string>
|
|
||||||
<string name="direct_install">Instalacja bezpośrednia (zalecane)</string>
|
<string name="direct_install">Instalacja bezpośrednia (zalecane)</string>
|
||||||
<string name="select_file">Wybierz plik</string>
|
<string name="select_file">Wybierz plik</string>
|
||||||
<string name="install_inactive_slot">Zainstaluj do nieaktywnego slotu (po aktualizcji OTA)</string>
|
<string name="install_inactive_slot">Zainstaluj do nieaktywnego slotu (po aktualizcji OTA)</string>
|
||||||
<string name="install_inactive_slot_warning">Po ponownym uruchomieniu Twoje urządzenie zostanie **ZMUSZONE** do uruchomia się z obecnie nieaktywnego slotu!
|
<string name="install_inactive_slot_warning">Po ponownym uruchomieniu Twoje urządzenie zostanie **ZMUSZONE** do uruchomia się z obecnie nieaktywnego slotu!
|
||||||
\nUżyj tej opcji dopiero po zakończeniu aktualizacji OTA.
|
\nUżyj tej opcji dopiero po zakończeniu aktualizacji OTA.
|
||||||
\nCzy chcesz kontynuować?</string>
|
\nCzy chcesz kontynuować?</string>
|
||||||
<string name="app_profile_template_create">Stwórz szablon</string>
|
<string name="install_next">Dalej</string>
|
||||||
<string name="app_profile_template_edit">Edytuj szablon</string>
|
<string name="select_file_tip">Obraz partycji %1$s jest zalecany</string>
|
||||||
<string name="app_profile_template_name">Nazwa</string>
|
<string name="select_kmi">Wybierz KMI</string>
|
||||||
<string name="app_profile_template_description">Opis</string>
|
<string name="settings_uninstall">Odinstaluj</string>
|
||||||
<string name="app_profile_template_save">Zapisz</string>
|
<string name="settings_uninstall_temporary">Odinstaluj tymczasowo</string>
|
||||||
<string name="app_profile_template_delete">Usuń</string>
|
|
||||||
<string name="app_profile_template_readonly">Tylko do odczytu</string>
|
|
||||||
<string name="app_profile_import_export">Importuj/Eksportuj</string>
|
|
||||||
<string name="app_profile_import_from_clipboard">Importuj ze schowka</string>
|
|
||||||
<string name="app_profile_export_to_clipboard">Eksportuj do schowka</string>
|
|
||||||
<string name="app_profile_template_export_empty">Nie można znaleźć lokalnego szablonu do eksportu!</string>
|
|
||||||
<string name="app_profile_template_import_success">Zaimportowano pomyślnie</string>
|
|
||||||
<string name="app_profile_template_save_failed">Nie udało się zapisać szablonu</string>
|
|
||||||
<string name="app_profile_template_import_empty">Schowek jest pusty!</string>
|
|
||||||
<string name="settings_profile_template_summary">Zarządzaj lokalnym i internetowym szablonem profilu aplikacji</string>
|
|
||||||
<string name="app_profile_template_sync">Synchronizuj internetowe szablony</string>
|
|
||||||
<string name="app_profile_template_view">Zobacz szablon</string>
|
|
||||||
<string name="app_profile_template_id_invalid">Błędny identyfikator szablonu</string>
|
|
||||||
<string name="settings_profile_template">Szablon profilu aplikacji</string>
|
|
||||||
<string name="app_profile_template_id">Identyfikator</string>
|
|
||||||
<string name="app_profile_template_id_exist">Szablon o takim identyfikatorze już istnieje!</string>
|
|
||||||
<string name="grant_root_failed">Nie udało się przyznać roota!</string>
|
|
||||||
<string name="open">Otwórz</string>
|
|
||||||
<string name="module_changelog_failed">Pobranie dziennika zmian nie powiodło się: %s</string>
|
|
||||||
<string name="settings_check_update">Wyszukaj aktualizacje</string>
|
|
||||||
<string name="settings_check_update_summary">Wyszukuj aktualizacje automatycznie przy otwieraniu aplikacji</string>
|
|
||||||
<string name="settings_uninstall_permanent">Odinstaluj zupełnie</string>
|
<string name="settings_uninstall_permanent">Odinstaluj zupełnie</string>
|
||||||
<string name="settings_restore_stock_image">Przywróć obraz fabryczny</string>
|
<string name="settings_restore_stock_image">Przywróć obraz fabryczny</string>
|
||||||
<string name="settings_uninstall_temporary">Odinstaluj tymczasowo</string>
|
|
||||||
<string name="settings_uninstall">Odinstaluj</string>
|
|
||||||
<string name="settings_uninstall_temporary_message">Tymczasowo odinstaluj KernelSU, przywróć do oryginalnego stanu po następnym ponownym uruchomieniu.</string>
|
<string name="settings_uninstall_temporary_message">Tymczasowo odinstaluj KernelSU, przywróć do oryginalnego stanu po następnym ponownym uruchomieniu.</string>
|
||||||
<string name="settings_uninstall_permanent_message">Całkowite i trwałe odinstalowanie KernelSU (Root i wszystkich modułów).</string>
|
<string name="settings_uninstall_permanent_message">Całkowite i trwałe odinstalowanie KernelSU (Root i wszystkich modułów).</string>
|
||||||
<string name="settings_restore_stock_image_message">Przywróć obraz fabryczny (jeśli istnieje kopia zapasowa), zwykle używany przed OTA; jeśli chcesz odinstalować KernelSU, użyj opcji \"Odinstaluj całkowicie\".</string>
|
<string name="settings_restore_stock_image_message">Przywróć obraz fabryczny (jeśli istnieje kopia zapasowa), zwykle używany przed OTA; jeśli chcesz odinstalować KernelSU, użyj opcji \"Odinstaluj całkowicie\".</string>
|
||||||
@@ -126,8 +137,237 @@
|
|||||||
<string name="flash_failed">Flashowanie nieudane</string>
|
<string name="flash_failed">Flashowanie nieudane</string>
|
||||||
<string name="selected_lkm">Wybrano LKM: %s</string>
|
<string name="selected_lkm">Wybrano LKM: %s</string>
|
||||||
<string name="save_log">Zapisz dzienniki</string>
|
<string name="save_log">Zapisz dzienniki</string>
|
||||||
<string name="action">Akcja</string>
|
|
||||||
<string name="log_saved">Dzienniki zapisane</string>
|
<string name="log_saved">Dzienniki zapisane</string>
|
||||||
<string name="module_sort_action_first">Sortuj (najpierw działania)</string>
|
<string name="status_supported">Supported</string>
|
||||||
<string name="module_sort_enabled_first">Sortuj (najpierw włączone)</string>
|
<string name="status_not_supported">Not Supported</string>
|
||||||
|
<string name="status_unknown">Unknown</string>
|
||||||
|
<string name="sus_su_mode">SuS SU mode:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||||
|
<string name="unknown_module">unknown module</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
||||||
|
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
||||||
|
<string name="confirm">Confirm</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup successful (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup failed: %1$s</string>
|
||||||
|
<string name="backup_modules">backup modules</string>
|
||||||
|
<string name="restore_modules">restore modules</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Modules restored successfully, restart required</string>
|
||||||
|
<string name="restore_failed">Restore failed: %1$s</string>
|
||||||
|
<string name="restart_now">Restart Now</string>
|
||||||
|
<string name="unknown_error">Unknown error</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
||||||
|
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
||||||
|
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Allowlist</string>
|
||||||
|
<string name="restore_allowlist">Restore Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Custom App Background</string>
|
||||||
|
<string name="settings_custom_background_summary">Select an image as background</string>
|
||||||
|
<string name="settings_card_alpha">Navigation bar transparency</string>
|
||||||
|
<string name="settings_restore_default">Restore default</string>
|
||||||
|
<string name="home_android_version">Android version</string>
|
||||||
|
<string name="home_device_model">Device model</string>
|
||||||
|
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
||||||
|
<string name="settings_disable_su">Disable su compatibility</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
||||||
|
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
||||||
|
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Enabled</string>
|
||||||
|
<string name="selinux_disabled">Disabled</string>
|
||||||
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
||||||
|
<string name="hide_other_info">Hide other info</string>
|
||||||
|
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
||||||
|
<string name="hide_susfs_status">Hide SuSFS status</string>
|
||||||
|
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
||||||
|
<string name="hide_link_card">Hide Link Card Status</string>
|
||||||
|
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
||||||
|
<string name="theme_mode">Theme</string>
|
||||||
|
<string name="theme_follow_system">Follow system</string>
|
||||||
|
<string name="theme_light">Light</string>
|
||||||
|
<string name="theme_dark">Dark</string>
|
||||||
|
<string name="manual_hook">Manual Hook</string>
|
||||||
|
<string name="dynamic_color_title">Dynamic colours</string>
|
||||||
|
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
||||||
|
<string name="choose_theme_color">Choose a theme colour</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Green</string>
|
||||||
|
<string name="color_purple">Purple</string>
|
||||||
|
<string name="color_orange">Orange</string>
|
||||||
|
<string name="color_pink">Pink</string>
|
||||||
|
<string name="color_gray">Gray</string>
|
||||||
|
<string name="color_yellow">Yellow</string>
|
||||||
|
<string name="flash_option">Brush Options</string>
|
||||||
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
||||||
|
<string name="root_required">Requires root privileges</string>
|
||||||
|
<string name="copy_failed">File Copy Failure</string>
|
||||||
|
<string name="reboot_complete_title">Scrubbing complete</string>
|
||||||
|
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
||||||
|
<string name="yes">Yes</string>
|
||||||
|
<string name="no">No</string>
|
||||||
|
<string name="failed_reboot">Reboot Failed</string>
|
||||||
|
<string name="batch_authorization">empower</string>
|
||||||
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
|
<string name="kpm_version">Version</string>
|
||||||
|
<string name="kpm_author">Author</string>
|
||||||
|
<string name="kpm_uninstall">Uninstall</string>
|
||||||
|
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
||||||
|
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
||||||
|
<string name="kpm_install">Install</string>
|
||||||
|
<string name="kpm_install_success">Load of kpm module successful</string>
|
||||||
|
<string name="kpm_install_failed">Load of kpm module failed</string>
|
||||||
|
<string name="kpm_args">Parameters</string>
|
||||||
|
<string name="kpm_control">Execute</string>
|
||||||
|
<string name="home_kpm_version">KPM Version</string>
|
||||||
|
<string name="close_notice">Close</string>
|
||||||
|
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
||||||
|
<string name="kpm_control_success">Success</string>
|
||||||
|
<string name="kpm_control_failed">Failed</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
||||||
|
<string name="not_supported">Unsupported</string>
|
||||||
|
<string name="supported">Supported</string>
|
||||||
|
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Invalid KPM file</string>
|
||||||
|
<string name="kernel_patched">Kernel not patched</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel not configured</string>
|
||||||
|
<string name="custom_settings">Custom settings</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Load</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embed</string>
|
||||||
|
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancel</string>
|
||||||
|
<string name="theme_color">Theme Color</string>
|
||||||
|
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
||||||
|
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
||||||
|
<string name="image_editor_title">Adjust background image</string>
|
||||||
|
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
||||||
|
<string name="background_image_error">Could not load image</string>
|
||||||
|
<string name="reprovision">Reprovision</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash Complete</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparing…</string>
|
||||||
|
<string name="horizon_cleaning_files">Cleaning files…</string>
|
||||||
|
<string name="horizon_copying_files">Copying files…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
||||||
|
<string name="horizon_patching_script">Patching flash script…</string>
|
||||||
|
<string name="horizon_flashing">Flashing kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completed</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Select Flash Slot</string>
|
||||||
|
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
||||||
|
<string name="slot_a">Slot A</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Selected slot: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
||||||
|
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
||||||
|
<string name="current_slot">Current Slot:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Copy failed</string>
|
||||||
|
<string name="horizon_unknown_error">Unknown error</string>
|
||||||
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
|
<string name="configuration">Configure</string>
|
||||||
|
<string name="app_settings">Application Settings</string>
|
||||||
|
<string name="tools">Tools</string>
|
||||||
|
<string name="currently_selected">Currently</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Removals</string>
|
||||||
|
<string name="apps_with_root">Applications with root privileges</string>
|
||||||
|
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
||||||
|
<string name="other_apps">Applications with unchanged defaults</string>
|
||||||
|
<string name="no_apps_found">Application not found</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
||||||
|
<string name="selinux_change_failed">SELinux Status change failed</string>
|
||||||
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
|
<string name="appearance_settings">Customize the toolbar</string>
|
||||||
|
<string name="back">Comeback</string>
|
||||||
|
<string name="expand">Be in full swing</string>
|
||||||
|
<string name="collapse">put away</string>
|
||||||
|
<string name="susfs_enabled">SuSFS enabled</string>
|
||||||
|
<string name="susfs_disabled">SuSFS disabled</string>
|
||||||
|
<string name="background_set_success">Background set successfully</string>
|
||||||
|
<string name="background_removed">Removed custom backgrounds</string>
|
||||||
|
<string name="root_require_for_install">Requires root privileges</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">DPI setting</string>
|
||||||
|
<string name="app_dpi_title">Applied DPI</string>
|
||||||
|
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
||||||
|
<string name="dpi_size_small">Small </string>
|
||||||
|
<string name="dpi_size_medium">Medium </string>
|
||||||
|
<string name="dpi_size_large">Big</string>
|
||||||
|
<string name="dpi_size_extra_large">oversize</string>
|
||||||
|
<string name="dpi_size_custom">customizable</string>
|
||||||
|
<string name="dpi_apply_settings">Applying DPI settings</string>
|
||||||
|
<string name="dpi_confirm_title">Confirm DPI change</string>
|
||||||
|
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
||||||
|
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">App Language</string>
|
||||||
|
<string name="language_follow_system">Follow System</string>
|
||||||
|
<string name="language_changed">Language changed, restarting to apply changes</string>
|
||||||
|
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Top</string>
|
||||||
|
<string name="scroll_to_bottom">Bottom</string>
|
||||||
|
<string name="scroll_to_top_description">Scroll to top</string>
|
||||||
|
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
||||||
|
<string name="authorized">authorized</string>
|
||||||
|
<string name="unauthorized">unauthorized</string>
|
||||||
|
<string name="selected">Selected</string>
|
||||||
|
<string name="select">option</string>
|
||||||
|
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">error code</string>
|
||||||
|
<string name="check_log">Please check the log</string>
|
||||||
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,80 +1,371 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="home_not_installed">Não instalado</string>
|
|
||||||
<string name="home">Início</string>
|
<string name="home">Início</string>
|
||||||
|
<string name="home_not_installed">Não instalado</string>
|
||||||
<string name="home_click_to_install">Clique para instalar</string>
|
<string name="home_click_to_install">Clique para instalar</string>
|
||||||
<string name="home_working">Funcionando</string>
|
<string name="home_working">Funcionando</string>
|
||||||
|
<string name="home_working_version">Versão: %d</string>
|
||||||
<string name="home_superuser_count">Super Usuário: %d</string>
|
<string name="home_superuser_count">Super Usuário: %d</string>
|
||||||
<string name="home_module_count">Módulos: %d</string>
|
<string name="home_module_count">Módulos: %d</string>
|
||||||
<string name="home_working_version">Versão: %d</string>
|
|
||||||
<string name="home_kernel">Kernel</string>
|
|
||||||
<string name="install">Instalar</string>
|
|
||||||
<string name="home_unsupported">Sem suporte</string>
|
<string name="home_unsupported">Sem suporte</string>
|
||||||
<string name="home_unsupported_reason">KernelSU suporta apenas kernels GKI agora</string>
|
<string name="home_unsupported_reason">KernelSU suporta apenas kernels GKI agora</string>
|
||||||
<string name="home_selinux_status">Status do SELinux</string>
|
<string name="home_kernel">Kernel</string>
|
||||||
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
|
<string name="home_susfs_version">Versão SuSFS</string>
|
||||||
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Versão do aplicativo</string>
|
<string name="home_manager_version">Versão do aplicativo</string>
|
||||||
<string name="module_failed_to_disable">Falha ao desativar o módulo: %s</string>
|
|
||||||
<string name="home_fingerprint">Impressão digital</string>
|
<string name="home_fingerprint">Impressão digital</string>
|
||||||
|
<string name="home_selinux_status">Status do SELinux</string>
|
||||||
<string name="selinux_status_disabled">Desabilitado</string>
|
<string name="selinux_status_disabled">Desabilitado</string>
|
||||||
<string name="selinux_status_enforcing">Impondo</string>
|
<string name="selinux_status_enforcing">Impondo</string>
|
||||||
<string name="selinux_status_permissive">Permissivo</string>
|
<string name="selinux_status_permissive">Permissivo</string>
|
||||||
<string name="selinux_status_unknown">Desconhecido</string>
|
<string name="selinux_status_unknown">Desconhecido</string>
|
||||||
<string name="superuser">Super Usuário</string>
|
<string name="superuser">Super Usuário</string>
|
||||||
<string name="module_failed_to_enable">Falha ao ativar o módulo: %s</string>
|
<string name="module_failed_to_enable">Falha ao ativar o módulo: %s</string>
|
||||||
|
<string name="module_failed_to_disable">Falha ao desativar o módulo: %s</string>
|
||||||
<string name="module_empty">Nenhum módulo instalado</string>
|
<string name="module_empty">Nenhum módulo instalado</string>
|
||||||
<string name="uninstall">Desinstalar</string>
|
|
||||||
<string name="module">Modulos</string>
|
<string name="module">Modulos</string>
|
||||||
<string name="reboot">Reiniciar</string>
|
<string name="module_sort_action_first">Ordenar (exceto primeiro)</string>
|
||||||
|
<string name="module_sort_enabled_first">Ordenar (Habilitado primeiro)</string>
|
||||||
|
<string name="uninstall">Desinstalar</string>
|
||||||
|
<string name="restore">Restaurar</string>
|
||||||
<string name="module_install">Instalar</string>
|
<string name="module_install">Instalar</string>
|
||||||
<string name="reboot_userspace">Reinicialização Suave</string>
|
<string name="install">Instalar</string>
|
||||||
|
<string name="reboot">Reiniciar</string>
|
||||||
<string name="settings">Configurações</string>
|
<string name="settings">Configurações</string>
|
||||||
<string name="reboot_bootloader">Reinicializar modo Bootloader</string>
|
<string name="reboot_userspace">Reinicialização Suave</string>
|
||||||
<string name="reboot_recovery">Reiniciar modo recuperação</string>
|
<string name="reboot_recovery">Reiniciar modo recuperação</string>
|
||||||
|
<string name="reboot_bootloader">Reinicializar modo Bootloader</string>
|
||||||
|
<string name="reboot_download">Reiniciar para baixar</string>
|
||||||
|
<string name="reboot_edl">Reiniciar em EDL</string>
|
||||||
|
<string name="about">Sobre</string>
|
||||||
|
<string name="module_uninstall_confirm">Tem certeza de que deseja desinstalar o módulo %s\?</string>
|
||||||
|
<string name="module_uninstall_success">%s desinstalado</string>
|
||||||
<string name="module_uninstall_failed">Falha ao desinstalar: %s</string>
|
<string name="module_uninstall_failed">Falha ao desinstalar: %s</string>
|
||||||
<string name="module_version">Versão</string>
|
<string name="module_version">Versão</string>
|
||||||
<string name="module_author">Autor</string>
|
<string name="module_author">Autor</string>
|
||||||
<string name="refresh">Atualizar</string>
|
<string name="refresh">Atualizar</string>
|
||||||
<string name="hide_system_apps">Esconder apps do sistema</string>
|
|
||||||
<string name="reboot_download">Reiniciar para baixar</string>
|
|
||||||
<string name="reboot_edl">Reiniciar em EDL</string>
|
|
||||||
<string name="module_uninstall_confirm">Tem certeza de que deseja desinstalar o módulo %s\?</string>
|
|
||||||
<string name="about">Sobre</string>
|
|
||||||
<string name="send_log">Enviar log</string>
|
|
||||||
<string name="module_uninstall_success">%s desinstalado</string>
|
|
||||||
<string name="show_system_apps">Mostrar aplicativos do sistema</string>
|
<string name="show_system_apps">Mostrar aplicativos do sistema</string>
|
||||||
|
<string name="hide_system_apps">Esconder apps do sistema</string>
|
||||||
|
<string name="send_log">Enviar log</string>
|
||||||
|
<string name="safe_mode">Modo de segurança</string>
|
||||||
|
<string name="reboot_to_apply">Reinicie para entrar em vigor</string>
|
||||||
|
<string name="module_magisk_conflict">Os módulos estão desativados porque estão em conflito com os do Magisk!</string>
|
||||||
|
<string name="home_learn_kernelsu">Aprender KernelSU</string>
|
||||||
|
<string name="home_learn_kernelsu_url">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
||||||
<string name="home_click_to_learn_kernelsu">Aprenda a instalar o KernelSU e usar os módulos</string>
|
<string name="home_click_to_learn_kernelsu">Aprenda a instalar o KernelSU e usar os módulos</string>
|
||||||
|
<string name="home_support_title">Apoie-nos</string>
|
||||||
<string name="home_support_content">O KernelSU é, e sempre será, gratuito e de código aberto. No entanto, você pode nos mostrar que se importa fazendo uma doação.</string>
|
<string name="home_support_content">O KernelSU é, e sempre será, gratuito e de código aberto. No entanto, você pode nos mostrar que se importa fazendo uma doação.</string>
|
||||||
<string name="profile_namespace_individual">Individual</string>
|
<string name="about_source_code"><![CDATA[Veja o código fonte no %1$s<br/>Entre em nosso canal no %2$s]]></string>
|
||||||
<string name="profile_namespace_global">Global</string>
|
|
||||||
<string name="profile_namespace_inherited">Herdado</string>
|
|
||||||
<string name="profile_default">Padrão</string>
|
<string name="profile_default">Padrão</string>
|
||||||
<string name="profile_template">Modelo</string>
|
<string name="profile_template">Modelo</string>
|
||||||
<string name="profile_custom">Personalizado</string>
|
<string name="profile_custom">Personalizado</string>
|
||||||
<string name="profile_name">Nome do perfil</string>
|
<string name="profile_name">Nome do perfil</string>
|
||||||
<string name="profile_namespace">Montar namespace</string>
|
<string name="profile_namespace">Montar namespace</string>
|
||||||
<string name="safe_mode">Modo de segurança</string>
|
<string name="profile_namespace_inherited">Herdado</string>
|
||||||
<string name="reboot_to_apply">Reinicie para entrar em vigor</string>
|
<string name="profile_namespace_global">Global</string>
|
||||||
<string name="home_learn_kernelsu">Aprender KernelSU</string>
|
<string name="profile_namespace_individual">Individual</string>
|
||||||
<string name="module_magisk_conflict">Os módulos estão desativados porque estão em conflito com os do Magisk!</string>
|
|
||||||
<string name="home_support_title">Apoie-nos</string>
|
|
||||||
<string name="profile_groups">Grupos</string>
|
<string name="profile_groups">Grupos</string>
|
||||||
<string name="profile_capabilities">Capacidades</string>
|
<string name="profile_capabilities">Capacidades</string>
|
||||||
<string name="profile_selinux_context">contexto SELinux</string>
|
<string name="profile_selinux_context">contexto SELinux</string>
|
||||||
<string name="profile_selinux_domain">Domínio</string>
|
|
||||||
<string name="module_update">Atualização</string>
|
|
||||||
<string name="profile_umount_modules">Desativar modulos</string>
|
<string name="profile_umount_modules">Desativar modulos</string>
|
||||||
<string name="failed_to_update_app_profile">Falha ao atualizar o perfil do aplicativo para %s</string>
|
<string name="failed_to_update_app_profile">Falha ao atualizar o perfil do aplicativo para %s</string>
|
||||||
|
<string name="require_kernel_version" formatted="false">A versão atual do KernelSU %d é muito baixa para o gerenciador funcionar corretamente. Atualize para a versão %d ou superior!</string>
|
||||||
<string name="settings_umount_modules_default">Módulos desativados por padrão</string>
|
<string name="settings_umount_modules_default">Módulos desativados por padrão</string>
|
||||||
<string name="settings_umount_modules_default_summary">O valor padrão global para \"Módulos Umount\" em Perfis de Aplicativos. Se ativado, removerá todas as modificações de módulo do sistema para aplicativos que não possuem um Perfil definido.</string>
|
<string name="settings_umount_modules_default_summary">O valor padrão global para \"Módulos Umount\" em Perfis de Aplicativos. Se ativado, removerá todas as modificações de módulo do sistema para aplicativos que não possuem um Perfil definido.</string>
|
||||||
<string name="profile_selinux_rules">Regras</string>
|
<string name="settings_susfs_toggle">Desabilitar ganchos de \"Kprobe\"</string>
|
||||||
<string name="profile_umount_modules_summary">Ativar esta opção permitirá que o KernelSU restaure quaisquer arquivos modificados pelos módulos para este aplicativo.</string>
|
<string name="profile_umount_modules_summary">Ativar esta opção permitirá que o KernelSU restaure quaisquer arquivos modificados pelos módulos para este aplicativo.</string>
|
||||||
<string name="module_start_downloading">Iniciar o download: %s</string>
|
<string name="profile_selinux_domain">Domínio</string>
|
||||||
|
<string name="profile_selinux_rules">Regras</string>
|
||||||
|
<string name="module_update">Atualização</string>
|
||||||
<string name="module_downloading">Baixando módulo: %s</string>
|
<string name="module_downloading">Baixando módulo: %s</string>
|
||||||
<string name="failed_to_update_sepolicy">Falha ao atualizar as regras do SELinux para: %s</string>
|
<string name="module_start_downloading">Iniciar o download: %s</string>
|
||||||
<string name="home_learn_kernelsu_url" formatted="false">https://kernelsu.org/guide/what-is-kernelsu.html</string>
|
|
||||||
<string name="restart_app">Reiniciar</string>
|
|
||||||
<string name="launch_app">Lançar</string>
|
|
||||||
<string name="force_stop_app">Forçar parada</string>
|
|
||||||
<string name="new_version_available">Nova versão: %s está disponível, clique para baixar</string>
|
<string name="new_version_available">Nova versão: %s está disponível, clique para baixar</string>
|
||||||
|
<string name="launch_app">Lançar</string>
|
||||||
|
<string name="force_stop_app" formatted="false">Forçar parada</string>
|
||||||
|
<string name="restart_app">Reiniciar</string>
|
||||||
|
<string name="failed_to_update_sepolicy">Falha ao atualizar as regras do SELinux para: %s</string>
|
||||||
|
<string name="module_changelog">Registro de alterações</string>
|
||||||
|
<string name="settings_profile_template">Modelo do Perfil do Aplicativo</string>
|
||||||
|
<string name="settings_profile_template_summary">Gerenciar modelo local e online do perfil do aplicativo</string>
|
||||||
|
<string name="app_profile_template_create">Criar modelo</string>
|
||||||
|
<string name="app_profile_template_edit">Editar modelo</string>
|
||||||
|
<string name="app_profile_template_id">ID</string>
|
||||||
|
<string name="app_profile_template_id_invalid">ID de modelo incorreta</string>
|
||||||
|
<string name="app_profile_template_name">Nome</string>
|
||||||
|
<string name="app_profile_template_description">Descrição</string>
|
||||||
|
<string name="app_profile_template_save">Salvar</string>
|
||||||
|
<string name="app_profile_template_delete">Apagar</string>
|
||||||
|
<string name="app_profile_template_view">Ver template</string>
|
||||||
|
<string name="app_profile_template_readonly">Somente leitura</string>
|
||||||
|
<string name="app_profile_template_id_exist">O ID do modelo já existe!</string>
|
||||||
|
<string name="app_profile_import_export">Importar/Exportar</string>
|
||||||
|
<string name="app_profile_import_from_clipboard">Importar da área de transferência</string>
|
||||||
|
<string name="app_profile_export_to_clipboard">Exportar para área de transferência</string>
|
||||||
|
<string name="app_profile_template_export_empty">Não foi possível encontrar modelo local para exportar!</string>
|
||||||
|
<string name="app_profile_template_import_success">Importado com sucesso</string>
|
||||||
|
<string name="app_profile_template_sync">Sincronizar modelos on-line</string>
|
||||||
|
<string name="app_profile_template_save_failed">Falha ao salvar o modelo</string>
|
||||||
|
<string name="app_profile_template_import_empty">A área de transferência está vazia!</string>
|
||||||
|
<string name="module_changelog_failed">Falha ao buscar o registro de alterações: %s</string>
|
||||||
|
<string name="settings_check_update">Verificar atualização</string>
|
||||||
|
<string name="settings_check_update_summary">Verifique automaticamente se há atualizações ao abrir o app</string>
|
||||||
|
<string name="grant_root_failed">Falha ao conceder acesso root!</string>
|
||||||
|
<string name="action">Ações</string>
|
||||||
|
<string name="open">Abrir</string>
|
||||||
|
<string name="close">Fechar</string>
|
||||||
|
<string name="enable_web_debugging">Ativar depuração do WebView</string>
|
||||||
|
<string name="enable_web_debugging_summary">Pode ser usado para depurar o WebUI. Por favor, ative somente quando necessário.</string>
|
||||||
|
<string name="direct_install">Instalação direta (recomendada)</string>
|
||||||
|
<string name="select_file">Selecione uma imagem que precisa ser corrigida</string>
|
||||||
|
<string name="install_inactive_slot">Instalar no slot inativo (após o OTA)</string>
|
||||||
|
<string name="install_inactive_slot_warning">Seu dispositivo será **FORÇADO** para ligar no slot inativo atual após uma reinicialização!\nUse esta opção apenas depois que OTA for finalizado.\nContinuar?</string>
|
||||||
|
<string name="install_next">Avançar</string>
|
||||||
|
<string name="select_file_tip">A imagem da partição %1$s é recomendada</string>
|
||||||
|
<string name="select_kmi">Selecionar KMI</string>
|
||||||
|
<string name="settings_uninstall">Desinstalar</string>
|
||||||
|
<string name="settings_uninstall_temporary">Desinstalar temporariamente</string>
|
||||||
|
<string name="settings_uninstall_permanent">Desinstalar permanentemente</string>
|
||||||
|
<string name="settings_restore_stock_image">Restaurar imagem de fábrica</string>
|
||||||
|
<string name="settings_uninstall_temporary_message">Desinstale temporariamente o KernelSU e restaure ao estado original após a próxima reinicialização</string>
|
||||||
|
<string name="settings_uninstall_permanent_message">Desinstale o KernelSU (root e todos os módulos) completamente e permanentemente</string>
|
||||||
|
<string name="settings_restore_stock_image_message">Restaure a imagem de fábrica (se existir um backup), geralmente usada antes do OTA. Se você precisar desinstalar o KernelSU, use \"Desinstalar permanentemente\".</string>
|
||||||
|
<string name="flashing">Flasheando</string>
|
||||||
|
<string name="flash_success">Flash bem-sucedido</string>
|
||||||
|
<string name="flash_failed">Flash falhou</string>
|
||||||
|
<string name="selected_lkm">LKM selecionado: %s</string>
|
||||||
<string name="save_log">Salvar Registros</string>
|
<string name="save_log">Salvar Registros</string>
|
||||||
|
<string name="log_saved">Registros salvos</string>
|
||||||
|
<string name="status_supported">Apoie-nos</string>
|
||||||
|
<string name="status_not_supported">Não Suportado</string>
|
||||||
|
<string name="status_unknown">Desconhecido</string>
|
||||||
|
<string name="sus_su_mode">Modo SU SuSU:</string>
|
||||||
|
<!-- Module related -->
|
||||||
|
<string name="module_install_confirm">¿confirmar la instalación del módulo %1$s?</string>
|
||||||
|
<string name="unknown_module">módulo desconocido</string>
|
||||||
|
<!-- Restore related -->
|
||||||
|
<string name="restore_confirm_title">Confirmar Restauração de Módulo</string>
|
||||||
|
<string name="restore_confirm_message">Esta operação irá sobrescrever todos os módulos existentes. Continuar?</string>
|
||||||
|
<string name="confirm">Confirmação</string>
|
||||||
|
<string name="cancel">Cancelar</string>
|
||||||
|
<!-- Backup related -->
|
||||||
|
<string name="backup_success">Backup bem sucedido (tar.gz)</string>
|
||||||
|
<string name="backup_failed">Backup falhou: %1$s</string>
|
||||||
|
<string name="backup_modules">módulos de backup</string>
|
||||||
|
<string name="restore_modules">restaurar módulos</string>
|
||||||
|
<!-- Restore related messages -->
|
||||||
|
<string name="restore_success">Módulos restaurados com sucesso, reinicialização necessária</string>
|
||||||
|
<string name="restore_failed">Falha na restauração: %1$s</string>
|
||||||
|
<string name="restart_now">Reiniciar agora</string>
|
||||||
|
<string name="unknown_error">Erro desconhecido</string>
|
||||||
|
<!-- Command related -->
|
||||||
|
<string name="command_execution_failed">A execução do comando falhou: %1$s</string>
|
||||||
|
<!-- Allowlist related -->
|
||||||
|
<string name="allowlist_backup_success">Backup concluído</string>
|
||||||
|
<string name="allowlist_backup_failed">Falha no backup permitido: %1$s</string>
|
||||||
|
<string name="allowlist_restore_confirm_title">Confirmar Restauração de Lista</string>
|
||||||
|
<string name="allowlist_restore_confirm_message">Esta operação irá sobrescrever a lista de permissão atual. Continuar?</string>
|
||||||
|
<string name="allowlist_restore_success">Allowlist restaurada com sucesso</string>
|
||||||
|
<string name="allowlist_restore_failed">Falha na restauração do Allowlist: %1$s</string>
|
||||||
|
<string name="backup_allowlist">Backup Permitido</string>
|
||||||
|
<string name="restore_allowlist">Restaurar Allowlist</string>
|
||||||
|
<string name="settings_custom_background">Fundo personalizado do App</string>
|
||||||
|
<string name="settings_custom_background_summary">Selecione uma imagem como plano de fundo</string>
|
||||||
|
<string name="settings_card_alpha">Transparência da barra de navegação</string>
|
||||||
|
<string name="settings_restore_default">Restaurar padrões</string>
|
||||||
|
<string name="home_android_version">Android Version: </string>
|
||||||
|
<string name="home_device_model">Modelo do aparelho</string>
|
||||||
|
<string name="su_not_allowed">Conceder superusuário à %s não é permitido</string>
|
||||||
|
<string name="settings_disable_su">Desativar compatibilidade com su</string>
|
||||||
|
<string name="settings_disable_su_summary">Temporariamente desativar qualquer aplicativo de obter privilégios de superusuário através do comando Wait su (os processos raiz existentes não serão afetados).</string>
|
||||||
|
<string name="using_mksu_manager">Você está usando o gerenciador do SukiSU Beta</string>
|
||||||
|
<string name="module_install_multiple_confirm">Você tem certeza que deseja instalar os módulos %d selecionados?</string>
|
||||||
|
<string name="module_install_multiple_confirm_with_names">Tem certeza que deseja instalar os seguintes módulos %1$d ? \n\n%2$s</string>
|
||||||
|
<string name="more_settings">More settings</string>
|
||||||
|
<string name="selinux">SELinux</string>
|
||||||
|
<string name="selinux_enabled">Ativado</string>
|
||||||
|
<string name="selinux_disabled">Desabilitado</string>
|
||||||
|
<string name="simple_mode">Modo de simplicidade</string>
|
||||||
|
<string name="simple_mode_summary">Oculta cartas desnecessárias quando ativadas</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version">Ocultar versão kernel</string>
|
||||||
|
<string name="hide_kernel_kernelsu_version_summary">Ocultar versão kernel</string>
|
||||||
|
<string name="hide_other_info">Ocultar outras informações</string>
|
||||||
|
<string name="hide_other_info_summary">Oculta informações sobre o número de super usuários, módulos e módulos do KPM na página inicial</string>
|
||||||
|
<string name="hide_susfs_status">Ocultar status SuSFS</string>
|
||||||
|
<string name="hide_susfs_status_summary">Ocultar informações de status SuSFS na página inicial</string>
|
||||||
|
<string name="hide_link_card">Ocultar status do link</string>
|
||||||
|
<string name="hide_link_card_summary">Ocultar informações do cartão do link na página inicial</string>
|
||||||
|
<string name="theme_mode">Tema</string>
|
||||||
|
<string name="theme_follow_system">Seguir o sistema</string>
|
||||||
|
<string name="theme_light">Claro</string>
|
||||||
|
<string name="theme_dark">Escuro</string>
|
||||||
|
<string name="manual_hook">Hook manual</string>
|
||||||
|
<string name="dynamic_color_title">Cor dinâmica</string>
|
||||||
|
<string name="dynamic_color_summary">Cores dinâmicas usando temas de sistema</string>
|
||||||
|
<string name="choose_theme_color">Escolha uma cor temática</string>
|
||||||
|
<string name="color_default">Blue</string>
|
||||||
|
<string name="color_green">Verde</string>
|
||||||
|
<string name="color_purple">Violeta</string>
|
||||||
|
<string name="color_orange">Laranja</string>
|
||||||
|
<string name="color_pink">Rosa</string>
|
||||||
|
<string name="color_gray">Cinza</string>
|
||||||
|
<string name="color_yellow">Amarelo</string>
|
||||||
|
<string name="flash_option">Opções do pincel</string>
|
||||||
|
<string name="flash_option_tip">Selecione o arquivo a ser instalado</string>
|
||||||
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
|
<string name="horizon_kernel_summary">Instalar o arquivo kernel AnyKernel3</string>
|
||||||
|
<string name="root_required">Requer privilégios de superusuário</string>
|
||||||
|
<string name="copy_failed">Falha ao copiar arquivo</string>
|
||||||
|
<string name="reboot_complete_title">Esboço completo</string>
|
||||||
|
<string name="reboot_complete_msg">Reiniciar imediatamente?</string>
|
||||||
|
<string name="yes">Sim</string>
|
||||||
|
<string name="no">Não</string>
|
||||||
|
<string name="failed_reboot">Reinicialização falhou</string>
|
||||||
|
<string name="batch_authorization">empoderar</string>
|
||||||
|
<string name="batch_cancel_authorization">retirar</string>
|
||||||
|
<string name="backup">Backup</string>
|
||||||
|
<string name="kpm_title">KPM</string>
|
||||||
|
<string name="kpm_empty">Não há módulos do kernel instalados neste momento</string>
|
||||||
|
<string name="kpm_version">Versão</string>
|
||||||
|
<string name="kpm_author">Autor</string>
|
||||||
|
<string name="kpm_uninstall">Desinstalar</string>
|
||||||
|
<string name="kpm_uninstall_success">Desinstalado com sucesso</string>
|
||||||
|
<string name="kpm_uninstall_failed">Falha ao desinstalar</string>
|
||||||
|
<string name="kpm_install">Instalar</string>
|
||||||
|
<string name="kpm_install_success">Carregamento do módulo kpm com sucesso</string>
|
||||||
|
<string name="kpm_install_failed">Falha ao carregar o módulo kpm</string>
|
||||||
|
<string name="kpm_args">Parâmetros</string>
|
||||||
|
<string name="kpm_control">Executar</string>
|
||||||
|
<string name="home_kpm_version">Versão do KPM</string>
|
||||||
|
<string name="close_notice">Fechar</string>
|
||||||
|
<string name="kernel_module_notice">As seguintes funções do módulo de kernel foram desenvolvidas pelo KernelPatch e modificadas para incluir as funções do módulo de kernel do SukiSU Ultra</string>
|
||||||
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra aguarda ansiosamente</string>
|
||||||
|
<string name="kpm_control_success">Sucesso</string>
|
||||||
|
<string name="kpm_control_failed">Falhou</string>
|
||||||
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra será uma ramificação relativamente independente da KSU no futuro, mas ainda apreciamos o KernelSU e o MKSU, etc. para suas contribuições!</string>
|
||||||
|
<string name="not_supported">Sem suporte</string>
|
||||||
|
<string name="supported">Apoie-nos</string>
|
||||||
|
<string name="home_kpm_module">"Número de módulos KPM: %d "</string>
|
||||||
|
<string name="kpm_invalid_file">Arquivo KPM inválido</string>
|
||||||
|
<string name="kernel_patched">Kernel não corrigido</string>
|
||||||
|
<string name="kernel_not_enabled">Kernel não configurado</string>
|
||||||
|
<string name="custom_settings">Configurações personalizadas</string>
|
||||||
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
|
<string name="kpm_install_mode_load">Carga</string>
|
||||||
|
<string name="kpm_install_mode_embed">Embutir</string>
|
||||||
|
<string name="kpm_install_mode_description">Por favor seleccione: %1\$s Modo de instalación del Módulo \n\nCarga: Cargar temporalmente el módulo \nInsertar: Instalar permanentemente en el sistema</string>
|
||||||
|
<string name="log_failed_to_check_module_file">Falha ao verificar a existência do arquivo do módulo</string>
|
||||||
|
<string name="snackbar_failed_to_check_module_file">Não foi possível verificar se o arquivo do módulo existe</string>
|
||||||
|
<string name="confirm_uninstall_title">Confirmar Desinstalação</string>
|
||||||
|
<string name="confirm_uninstall_confirm">Desinstalar</string>
|
||||||
|
<string name="confirm_uninstall_dismiss">Cancelar</string>
|
||||||
|
<string name="theme_color">Cor do tema</string>
|
||||||
|
<string name="invalid_file_type">Tipo de arquivo incorreto! Selecione o arquivo .kpm.</string>
|
||||||
|
<string name="confirm_uninstall_title_with_filename">Desinstalar</string>
|
||||||
|
<string name="confirm_uninstall_content">O seguinte KPM será desinstalado: %s</string>
|
||||||
|
<string name="settings_susfs_toggle_summary">Desative os hooks kprobe criados pelo KernelSU, usando ganchos embutidos em vez disso, o que é semelhante ao método de gancho do kernel GKI.</string>
|
||||||
|
<string name="image_editor_title">Ajustar imagem de fundo</string>
|
||||||
|
<string name="image_editor_hint">Use dois dedos para ampliar a imagem e um dedo para arrastá-la para ajustar a posição</string>
|
||||||
|
<string name="background_image_error">Não foi possível carregar a imagem</string>
|
||||||
|
<string name="reprovision">Restituição</string>
|
||||||
|
<!-- Kernel Flash Progress Related -->
|
||||||
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
|
<string name="horizon_flash_complete">Flash concluído</string>
|
||||||
|
<!-- Flash Status Related -->
|
||||||
|
<string name="horizon_preparing">Preparando…</string>
|
||||||
|
<string name="horizon_cleaning_files">limpando arquivos…</string>
|
||||||
|
<string name="horizon_copying_files">Copiando arquivo…</string>
|
||||||
|
<string name="horizon_extracting_tool">Extraindo a ferramenta flash…</string>
|
||||||
|
<string name="horizon_patching_script">Atualizando o script flash…</string>
|
||||||
|
<string name="horizon_flashing">Flasheando kernel…</string>
|
||||||
|
<string name="horizon_flash_complete_status">Flash completo</string>
|
||||||
|
<!-- Slot selection related strings -->
|
||||||
|
<string name="select_slot_title">Selecionar Slot em Flash</string>
|
||||||
|
<string name="select_slot_description">Por favor, selecione o slot de destino para flashear a inicialização</string>
|
||||||
|
<string name="slot_a">Slot B</string>
|
||||||
|
<string name="slot_b">Slot B</string>
|
||||||
|
<string name="selected_slot">Slot selecionado: %1$s</string>
|
||||||
|
<string name="horizon_getting_original_slot">Obtendo o espaço original</string>
|
||||||
|
<string name="horizon_setting_target_slot">Configurando o slot especificado</string>
|
||||||
|
<string name="horizon_restoring_original_slot">Restaurar Slot Padrão</string>
|
||||||
|
<string name="current_slot">Slot Atual:%1$s </string>
|
||||||
|
<!-- Error Messages -->
|
||||||
|
<string name="horizon_copy_failed">Falha ao copiar</string>
|
||||||
|
<string name="horizon_unknown_error">Você parece estar convertendo de um formato com degradação para um sem perdas. Esteja ciente que a perda de qualidade não pode ser desfeita, então este processo não melhorará a qualidade do áudio e provavelmente aumentará o tamanho do arquivo. Continuar assim mesmo?</string>
|
||||||
|
<string name="flash_failed_message">Flash falhou</string>
|
||||||
|
<!-- lkm/gki install -->
|
||||||
|
<string name="Lkm_install_methods">LKM reparo/instalação</string>
|
||||||
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
|
<string name="kernel_version_log">Kernel</string>
|
||||||
|
<string name="tool_version_log">Usando a ferramenta de correção:%1$s</string>
|
||||||
|
<string name="configuration">Configurar</string>
|
||||||
|
<string name="app_settings">Configurações Do Aplicativo</string>
|
||||||
|
<string name="tools">Ferramentas</string>
|
||||||
|
<string name="currently_selected">Atual</string>
|
||||||
|
<!-- String resources used in SuperUser -->
|
||||||
|
<string name="clear">Remoções</string>
|
||||||
|
<string name="apps_with_root">Aplicativos com privilégios de superusuário</string>
|
||||||
|
<string name="apps_with_custom_profile">Aplicativos com configurações personalizadas</string>
|
||||||
|
<string name="other_apps">Aplicações com padrões não alterados</string>
|
||||||
|
<string name="no_apps_found">Aplicativo não encontrado</string>
|
||||||
|
<string name="selinux_enabled_toast">SELinux habilitado</string>
|
||||||
|
<string name="selinux_disabled_toast">SELinux Desativado</string>
|
||||||
|
<string name="selinux_change_failed">Falha na alteração de estado do SELinux</string>
|
||||||
|
<string name="advanced_settings">Configurações Avançadas</string>
|
||||||
|
<string name="appearance_settings">Personaliza a barra de ferramentas.</string>
|
||||||
|
<string name="back">Retorno</string>
|
||||||
|
<string name="expand">Esteja em pleno balanço</string>
|
||||||
|
<string name="collapse">jogou fora</string>
|
||||||
|
<string name="susfs_enabled">SuSFS habilitado</string>
|
||||||
|
<string name="susfs_disabled">SuSFS desativado</string>
|
||||||
|
<string name="background_set_success">Fundo definido com sucesso</string>
|
||||||
|
<string name="background_removed">Remover</string>
|
||||||
|
<string name="root_require_for_install">Requer privilégios de superusuário</string>
|
||||||
|
<!-- KPM display settings -->
|
||||||
|
<string name="show_kpm_info">Exibir função KPM</string>
|
||||||
|
<string name="show_kpm_info_summary">Exibir informações e funções do KPM na barra inicial e inferior (Precisa reabrir o aplicativo)</string>
|
||||||
|
<!-- Webui X settings -->
|
||||||
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Injetar Eruda na WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Injetar um console de depuração na WebUI X para facilitar a depuração. Requer depuração da web para estar ligada.</string>
|
||||||
|
<!-- DPI setting related strings -->
|
||||||
|
<string name="dpi_settings">Configuração de DPI</string>
|
||||||
|
<string name="app_dpi_title">DPI aplicado</string>
|
||||||
|
<string name="app_dpi_summary">Ajustar a densidade de exibição da tela apenas para o aplicativo atual</string>
|
||||||
|
<string name="dpi_size_small">Pequeno </string>
|
||||||
|
<string name="dpi_size_medium">Média </string>
|
||||||
|
<string name="dpi_size_large">Grande</string>
|
||||||
|
<string name="dpi_size_extra_large">extra grande</string>
|
||||||
|
<string name="dpi_size_custom">Customizável</string>
|
||||||
|
<string name="dpi_apply_settings">Aplicando configurações de DPI</string>
|
||||||
|
<string name="dpi_confirm_title">Confirmar alteração de DPI</string>
|
||||||
|
<string name="dpi_confirm_message">Tem certeza que deseja alterar o DPI do aplicativo do %1$d para %2$d?</string>
|
||||||
|
<string name="dpi_confirm_summary">O aplicativo precisa ser reiniciado para aplicar as novas configurações DPI, não afeta a barra de status do sistema ou outras aplicações</string>
|
||||||
|
<string name="dpi_applied_success">DPI foi definido para %1$d, efetivo após reiniciar o aplicativo</string>
|
||||||
|
<!-- Language settings related strings -->
|
||||||
|
<string name="language_setting">Língua do aplicativo</string>
|
||||||
|
<string name="language_follow_system">Padrão do sistema</string>
|
||||||
|
<string name="language_changed">Idioma alterado, reiniciando para aplicar as alterações</string>
|
||||||
|
<string name="settings_card_dim">Ajuste da escuridão do cartão</string>
|
||||||
|
<!-- Super User Related -->
|
||||||
|
<string name="scroll_to_top">Mais votados</string>
|
||||||
|
<string name="scroll_to_bottom">Parte Inferior</string>
|
||||||
|
<string name="scroll_to_top_description">Rolar para o topo</string>
|
||||||
|
<string name="scroll_to_bottom_description">Role até o final</string>
|
||||||
|
<string name="authorized">autorizado</string>
|
||||||
|
<string name="unauthorized">Não autorizado</string>
|
||||||
|
<string name="selected">Selecionado</string>
|
||||||
|
<string name="select">opção</string>
|
||||||
|
<string name="profile_umount_modules_disable">Desativar o módulo personalizado de desinstalação</string>
|
||||||
|
<!-- Flash related -->
|
||||||
|
<string name="error_code">Código de erro</string>
|
||||||
|
<string name="check_log">Por favor, verifique o log</string>
|
||||||
|
<string name="installing_module">Módulo sendo instalado %1$d/%2$d</string>
|
||||||
|
<string name="module_failed_count">%d Falha ao instalar um novo módulo</string>
|
||||||
|
<string name="module_download_error">Falha ao baixar módulo</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||