Compare commits

..

14 Commits

Author SHA1 Message Date
KOWX712
8237a5f6fd deps: update workflow 2025-08-28 21:39:07 +08:00
KOWX712
d9c05cb0e8 misc: change crowdin schedule to weekly 2025-08-28 21:36:48 +08:00
KOWX712
c8dbbce80c opt: update kernelsu.js 2025-08-28 21:34:38 +08:00
KOWX712
422d05e97b opt: update color scheme 2025-08-28 21:34:25 +08:00
KOWX712
070f8a7597 misc: update .extra
Signed-off-by: KOWX712 <leecc0503@gmail.com>
2025-08-28 02:06:29 +08:00
Juno Bủh
8cb83690d6 fix: Vietnamese language name (#102) 2025-08-16 23:38:09 +08:00
KOWX712
ad3e1f7bb1 opt: sync translation from Crowdin (#94)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-08-15 15:11:54 +08:00
Juno Bủh
ddac4adf7d opt: update Vietnamese Translation (#98) 2025-08-12 18:03:17 +08:00
Tam Huynh
f1665c54e9 feat: Add Vietnamese translation (#96) 2025-08-12 01:14:13 +08:00
github-actions[bot]
b4aa08cf3f deps: update OpenSSL binaries 2025-08-09 14:37:53 +00:00
KOWX712
b5d4efb292 fix: missing set security patch option in beakthoven's fork
latest version of beakthoven's TS fork has removed other author from module.prop and causing unsupported version.
2025-08-09 22:37:36 +08:00
KOWX712
0a9750902d misc: update .extra 2025-07-28 13:10:34 +08:00
KOWX712
2f5dd03530 opt: refine rtl related code 2025-07-26 00:41:36 +08:00
KOWX712
3d9d2843fe misc: drop unknown key generation workflow
branch will be removed in next release, all unknown keybox user should update to v4.0 or newer version
2025-07-25 18:56:26 +08:00
24 changed files with 366 additions and 131 deletions

2
.extra

File diff suppressed because one or more lines are too long

View File

@@ -22,7 +22,7 @@ jobs:
version_tag_exists: ${{ steps.check_tag.outputs.version_tag_exists }}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
fetch-depth: 0
fetch-tags: true
@@ -46,7 +46,7 @@ jobs:
if: github.event_name != 'pull_request'
run: |
# marked.js
curl -Ls https://cdn.jsdelivr.net/npm/marked/marked.min.js > module/webui/scripts/assets/marked.min.js
curl -LSs https://cdn.jsdelivr.net/npm/marked/marked.min.js > module/webui/scripts/assets/marked.min.js || echo "Failed to download marked.min.js"
# OpenSSL
gh release download -R KOWX712/openssl-static-build -p "*.tar.gz" -O openssl.tar.gz
@@ -115,7 +115,7 @@ jobs:
if: ${{ needs.build.outputs.version_tag_exists == 'false' && github.event_name != 'pull_request' }}
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
fetch-depth: 0

View File

@@ -6,7 +6,7 @@ on:
paths:
- 'module/webui/locales/strings/*.xml'
schedule:
- cron: '0 0 * * *'
- cron: '0 0 * * 0'
workflow_dispatch:
jobs:
@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Crowdin Action
uses: crowdin/github-action@v2

View File

@@ -1,35 +0,0 @@
name: generate
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
generate:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
ref: 'bot'
- name: Generate and encode
run: |
curl -Ls https://raw.githubusercontent.com/KOWX712/keyboxGenerator/main/keyboxGenerator_v2.0.py | python3
base64 -w 0 "keybox.xml" | xxd -p | tr -d '\n' > .device
- name: Commit changes
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git add .device
LAST_COMMIT_MSG=$(git log -1 --pretty=%B)
if [[ "$LAST_COMMIT_MSG" == "Update .device" ]]; then
git commit --amend --no-edit
git push --force
else
git commit -m "Update .device"
git push
fi

Binary file not shown.

Binary file not shown.

View File

@@ -41,6 +41,7 @@
- [chisewaguri](https://github.com/chisewaguri)
- [Rem01Gaming](https://github.com/Rem01Gaming)
- [Mesazane](https://github.com/mesazane)
---
@@ -57,7 +58,13 @@
---
### Polish
## Korean
- [dhlrunner](https://github.com/dhlrunner)
---
## Polish
- [Bladius2024](https://github.com/Bladius2024)
@@ -70,6 +77,12 @@
---
## Russian
- [Andfi](https://crowdin.com/profile/andfi)
---
## Spanish
- [Keinta15](https://github.com/Keinta15)
@@ -87,3 +100,11 @@
- [StepanSad](https://github.com/StepanSad)
- [IlliaS](https://github.com/IlliaS)
- [Валентин Паник](https://crowdin.com/profile/panikvalentin)
---
## Vietnamese
- [doanvtamhuynh](https://github.com/doanvtamhuynh)
- [SaleOff](https://github.com/SaleOff)

View File

@@ -11,12 +11,14 @@
"id": "Bahasa Indonesia",
"it": "Italiano",
"ja": "日本語",
"ko": "한국어",
"pt-BR": "Português",
"pl": "Polski",
"ru": "Русский",
"tl": "Filipino",
"tr": "Türkçe",
"uk": "Українська",
"vi": "Tiếng Việt",
"zh-CN": "简体中文",
"zh-TW": "繁體中文"
}

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_default">Default Sistem</string>
<string name="more_language">Lainnya</string>
<!-- Header -->
<string name="header_title">Tricky Addon</string>
<!-- Help Menu-->
@@ -51,6 +52,7 @@
<string name="menu_set_custom_keybox">Gunakan Keybox Kustom</string>
<string name="menu_set_verified_boot_hash">Atur Verified Boot Hash</string>
<string name="menu_set_security_patch">Atur Patch Keamanan</string>
<string name="menu_set_devconfig">Atur Konfigurasi Pengembang</string>
<string name="menu_about">Tentang</string>
<!-- Boot Hash -->
<string name="boot_hash_title">Verified Boot Hash</string>
@@ -61,6 +63,7 @@
<string name="about_module_name_line2">Perbarui Daftar Target</string>
<string name="about_by">oleh</string>
<string name="about_telegram_channel">Saluran Telegram</string>
<string name="about_canary_update">Perbarui ke versi Canary terbaru</string>
<string name="about_disclaimer">Modul ini bukan bagian dari Tricky Store. Jangan laporkan masalah ke Tricky Store jika mengalami kendala.</string>
<string name="about_acknowledgment">Pengakuan</string>
<!-- Prompt -->
@@ -76,7 +79,9 @@
<string name="prompt_save_error">Gagal menyimpan konfigurasi</string>
<string name="prompt_uninstall_prompt">WebUI akan dicopot setelah perangkat dimulai ulang</string>
<string name="prompt_uninstall_failed">Gagal mencopot pemasangan WebUI</string>
<string name="prompt_checking_update">Memeriksa pembaruan...</string>
<string name="prompt_new_update">Pembaruan baru tersedia!</string>
<string name="prompt_no_update">Saat ini tidak ada pembaruan yang tersedia</string>
<string name="prompt_downloading">Mengunduh pembaruan...</string>
<string name="prompt_downloaded">Unduhan selesai</string>
<string name="prompt_download_fail">Gagal mengunduh pembaruan</string>

View File

@@ -52,6 +52,7 @@
<string name="menu_set_custom_keybox">カスタム Keybox を設定</string>
<string name="menu_set_verified_boot_hash">確認付きブートハッシュを設定</string>
<string name="menu_set_security_patch">セキュリティパッチを設定</string>
<string name="menu_set_devconfig">DevConfig を設定</string>
<string name="menu_about">このアドオンについて</string>
<!-- Boot Hash -->
<string name="boot_hash_title">ブートハッシュ</string>

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_default">시스템 기본</string>
<string name="more_language">더 보기</string>
<!-- Header -->
<!-- Help Menu-->
<string name="help_help_instructions">설명서</string>
<string name="help_save_and_update">저장</string>
<string name="help_save_and_update_description">현재 설정을 target.txt에 저장</string>
<string name="help_refresh">새로 고침</string>
<string name="help_refresh_description">앱 리스트와 제외 리스트를 새로 고치기</string>
<string name="help_select_deselect">모두 선택 &amp; 모두 선택 해제</string>
<string name="help_select_description">현재 표시된 리스트에서 모든 앱을 선택하거나 선택 해제합니다.</string>
<string name="help_select_denylist">DenyList에서 선택</string>
<string name="help_select_denylist_description">(권장됨) Magisk 사용자만 사용할 수 있으며, DenyList에 포함된 앱을 선택합니다.</string>
<string name="help_deselect_unnecessary">필요 없는 앱 선택 해제</string>
<string name="help_deselect_unnecessary_description">불필요한 카테고리: Xposed 모듈, 루트 관리자, 루트 관련 앱, 및 부트로더 상태를 절대 확인하지 않는 일반 앱을 선택 해제합니다. 이 옵션은 인터넷 연결이 필요합니다.</string>
<string name="help_add_system_app">시스템 앱 추가</string>
<string name="help_add_system_app_description">특정 시스템 앱을 앱 리스트에 추가합니다.</string>
<string name="help_set_keybox">AOSP 및 유효한 키박스 설정</string>
<string name="help_set_keybox_description">Tricky Store의 keybox.xml을 교체합니다. 유효 키박스 옵션은 인터넷 연결이 필요하며 항상 사용할 수 있는 것은 아닙니다.</string>
<string name="help_set_custom_keybox">유저 정의 키박스 설정</string>
<string name="help_set_custom_keybox_description">기기 저장소에서 키박스를 가져옵니다. XML 파일만 지원됩니다.</string>
<string name="help_set_security_patch">보안 패치 설정</string>
<string name="help_set_security_patch_description">유저 정의 보안 패치 스푸핑을 설정합니다. 자동 구성은 PIF 모듈에서 보안 패치를 사용합니다. 빈 상태로 두고 저장하면 자동 구성을 비활성화합니다.</string>
<string name="help_set_verified_boot_hash">Verified Boot 해시 설정</string>
<string name="help_set_verified_boot_hash_description">Key Attestation Demo에서 검증된 verifiedBootHash 값을 가져옵니다. ro.boot.vbmeta.digest를 재설정하여 비정상적인 부팅 상태를 수정합니다.</string>
<!-- Update -->
<string name="update_update_available">새 버전이 준비되었습니다.</string>
<string name="update_redirect_to_release">탭해서 최신 버전을 다운로드합니다.</string>
<string name="update_changelog">변경 로그</string>
<string name="update_install">설치</string>
<string name="update_reboot">재부팅</string>
<!-- Search -->
<string name="search_bar_search_placeholder">검색</string>
<!-- Functional Button -->
<string name="functional_button_save_and_update_button">저장</string>
<string name="functional_button_uninstall_webui">WebUI 제거</string>
<!-- Loading -->
<string name="loading_loading">로드 중...</string>
<!-- Menu -->
<string name="menu_refresh">새로 고칭</string>
<string name="menu_select_all">모두 선택</string>
<string name="menu_deselect_all">모두 선택 해제</string>
<string name="menu_select_denylist">DenyList에서 선택</string>
<string name="menu_deselect_unnecessary">필요 없는 앱 선택 해제</string>
<string name="menu_add_system_app">시스템 앱 추가</string>
<string name="menu_set_aosp_keybox">AOSP 키박스 설정</string>
<string name="menu_set_unknown_keybox">알 수 없는 키박스 설정</string>
<string name="menu_set_valid_keybox">유효 키박스 설정</string>
<string name="menu_set_custom_keybox">유저 정의 키박스 설정</string>
<string name="menu_set_verified_boot_hash">Verified Boot 해시 설정</string>
<string name="menu_set_security_patch">보안 패치 설정</string>
<string name="menu_set_devconfig">DevConfig 설정</string>
<string name="menu_about">정보</string>
<!-- Boot Hash -->
<string name="boot_hash_title">부트 해시</string>
<string name="boot_hash_input_placeholder">여기에 검증된 Boot Hash 값을 입력하세요.</string>
<string name="boot_hash_save_button">저장</string>
<!-- About -->
<string name="about_disclaimer">이 모듈은 Tricky Store 모듈의 일부가 아닙니다! 문제가 발생하더라도 Tricky Store에 절대로 보고하지 마십시오.</string>
<string name="about_acknowledgment">크레딧</string>
<!-- Prompt -->
<string name="prompt_no_internet">인터넷 연결을 확인해주세요.</string>
<string name="prompt_aosp_key_set">AOSP 키박스가 성공적으로 설정되었습니다.</string>
<string name="prompt_key_set_error">키박스 갱신에 실패했습니다.</string>
<string name="prompt_unknown_key_set">알 수 없는 키박스가 성공적으로 설정되었습니다.</string>
<string name="prompt_valid_key_set">유효 키박스가 성공적으로 설정되었습니다.</string>
<string name="prompt_no_valid">유효 키박스를 찾을수 없습니다.</string>
<string name="prompt_boot_hash_set">Verified Boot 해쉬가 성공적으로 설정되었습니다.</string>
<string name="prompt_boot_hash_set_error">Verified Boot 설정에 실패했습니다.</string>
<string name="prompt_saved_target">target.txt에 설정을 저장했습니다.</string>
<string name="prompt_save_error">설정 저장에 실패했습니다.</string>
<string name="prompt_uninstall_prompt">재부팅 후 WebUI가 제거됩니다.</string>
<string name="prompt_uninstall_failed">WebUI 제거에 실패했습니다.</string>
<string name="prompt_checking_update">업데이트 확인 중...</string>
<string name="prompt_new_update">새 업데이트가 있습니다!</string>
<string name="prompt_no_update">현재 업데이트가 없습니다.</string>
<string name="prompt_downloading">새 업데이트 다운로드 중...</string>
<string name="prompt_downloaded">다운로드 완료</string>
<string name="prompt_download_fail">업데이트 다운로드에 실패했습니다.</string>
<string name="prompt_installing">업데이트 설치 중...</string>
<string name="prompt_installed">설치가 성공적으로 완료되었습니다. 지금 재부팅해 주세요.</string>
<string name="prompt_install_fail">설치에 실패했습니다. 수동으로 업데이트해 주세요.</string>
<string name="prompt_rebooting">재부팅 중...</string>
<string name="prompt_reboot_fail">재부팅에 실패했습니다. 수동으로 재부팅해 주세요.</string>
<string name="prompt_custom_key_set">유저 정의 키박스가 성공적으로 설정되었습니다.</string>
<string name="prompt_custom_key_set_error">유저 정의 키박스 설정에 실패했습니다.</string>
<string name="prompt_no_file_selected">선택된 파일이 없습니다.</string>
<string name="prompt_system_app_not_found">시스탬 앱을 찾을수 없습니다.</string>
<string name="prompt_system_app_error">시스탬 앱 추가에 실패했습니다.</string>
<!-- Security Patch -->
<string name="security_patch_title">보안 패치</string>
<string name="security_patch_advanced_mode">고급</string>
<string name="security_patch_get_date">보안 패치 날짜 가져오기</string>
<string name="security_patch_auto">자동</string>
<string name="security_patch_save">저장</string>
<string name="security_patch_fetching">가져오는 중...</string>
<string name="security_patch_fetched">확인</string>
<string name="security_patch_get_failed">보안 패치 날짜 취득에 실패했습니다.</string>
<string name="security_patch_unable_to_connect">source.android.com에 연결할 수 없습니다.</string>
<string name="security_patch_auto_success">자동 설정이 켜졌습니다.</string>
<string name="security_patch_auto_failed">자동 설정 활성화에 실패했습니다.</string>
<string name="security_patch_save_success">보안 패치를 성공적으로 저장했습니다.</string>
<string name="security_patch_save_failed">보안 패치 저장에 실패했습니다.</string>
<string name="security_patch_value_empty">보안 패치 구성이 비활성화 되어 있습니다.</string>
<string name="security_patch_invalid_all">잘못된 형식</string>
<string name="security_patch_invalid_boot">잘못된 boot 형식</string>
<string name="security_patch_invalid_system">잘못된 system 형식</string>
<string name="security_patch_invalid_vendor">잘못된 vendor 형식</string>
<!-- Add System App -->
<string name="add_system_app_title">시스템 앱 추가</string>
<string name="add_system_app_add">추가</string>
<string name="add_system_app_current_list">현재 시스탬 앱 리스트</string>
<!-- Uninstall confirmation -->
<string name="confirmation_uninstall_title">삭제 확인</string>
<string name="confirmation_uninstall_message">정말 Tricky Addon을 삭제할까요?</string>
<string name="confirmation_uninstall_cancel">취소</string>
<string name="confirmation_uninstall_confirm">확인</string>
</resources>

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_default">Системный по умолчанию</string>
<string name="more_language">Больше</string>
<!-- Header -->
<string name="header_title">Tricky Addon</string>
<!-- Help Menu-->
@@ -51,6 +52,7 @@
<string name="menu_set_custom_keybox">Установить свой keybox</string>
<string name="menu_set_verified_boot_hash">Установить verified boot hash</string>
<string name="menu_set_security_patch">Установить security patch</string>
<string name="menu_set_devconfig">Установить DevConfig</string>
<string name="menu_about">О программе</string>
<!-- Boot Hash -->
<string name="boot_hash_title">Boot Hash</string>
@@ -61,6 +63,7 @@
<string name="about_module_name_line2">Обновить список целей</string>
<string name="about_by">от</string>
<string name="about_telegram_channel">Канал в Telegram</string>
<string name="about_canary_update">Обновить до последней версии canary</string>
<string name="about_disclaimer">Этот WebUI не является частью Tricky Store, НЕ сообщайте автору Tricky Store о любых возникающих проблемах.</string>
<string name="about_acknowledgment">Благодарности</string>
<!-- Prompt -->
@@ -76,7 +79,9 @@
<string name="prompt_save_error">Не удалось сохранить конфигурацию</string>
<string name="prompt_uninstall_prompt">WebUI будет удален после перезагрузки</string>
<string name="prompt_uninstall_failed">Не удалось удалить WebUI</string>
<string name="prompt_checking_update">Проверяем обновления...</string>
<string name="prompt_new_update">Доступно новое обновление!</string>
<string name="prompt_no_update">Обновлений на данный момент нет</string>
<string name="prompt_downloading">Загрузка нового обновления...</string>
<string name="prompt_downloaded">Загрузка завершена</string>
<string name="prompt_download_fail">Не удалось загрузить обновление</string>
@@ -99,6 +104,7 @@
<string name="security_patch_fetching">Получение...</string>
<string name="security_patch_fetched">Готово</string>
<string name="security_patch_get_failed">Не удалось получить дату патча безопасности</string>
<string name="security_patch_unable_to_connect">Не удалось подключиться к source.android.com</string>
<string name="security_patch_auto_success">Автоматическая конфигурация успешно включена</string>
<string name="security_patch_auto_failed">Не удалось включить автоматическую конфигурацию</string>
<string name="security_patch_save_success">Патч безопасности успешно сохранен</string>

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_default">System Default</string>
<string name="more_language">Більше</string>
<!-- Header -->
<string name="header_title">Tricky Addon</string>
<!-- Help Menu-->
@@ -51,6 +52,7 @@
<string name="menu_set_custom_keybox">Встановити користувацький ключ</string>
<string name="menu_set_verified_boot_hash">Встановити перевірений хеш завантаження</string>
<string name="menu_set_security_patch">Встановити патч безпеки</string>
<string name="menu_set_devconfig">Встановити конфігурацію розробника</string>
<string name="menu_about">Деталі</string>
<!-- Boot Hash -->
<string name="boot_hash_title">Хеш завантаження</string>

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="system_default">Mặc định hệ thống</string>
<string name="more_language">Thêm</string>
<!-- Header -->
<!-- Help Menu-->
<string name="help_help_instructions">Hướng dẫn</string>
<string name="help_save_and_update">Lưu</string>
<string name="help_save_and_update_description">Lưu cấu hình hiện tại vào target.txt</string>
<string name="help_refresh">Làm mới</string>
<string name="help_refresh_description">Làm mới danh sách ứng dụng và danh sách loại trừ</string>
<string name="help_select_deselect">Chọn &amp; Bỏ chọn tất cả</string>
<string name="help_select_description">Chọn hoặc bỏ chọn tất cả ứng dụng trong giao diện hiện tại</string>
<string name="help_select_denylist">Chọn từ DenyList</string>
<string name="help_select_denylist_description">Chỉ khả dụng trong Magisk, chọn ứng dụng nằm trong DenyList. Khuyến nghị sử dụng</string>
<string name="help_deselect_unnecessary">Bỏ chọn không cần thiết</string>
<string name="help_deselect_unnecessary_description">Danh mục không cần thiết: Trình quản lý root, module Xposed, ứng dụng liên quan đến root và các ứng dụng thông thường không bao giờ kiểm tra trạng thái bootloader. Tùy chọn này yêu cầu kết nối Internet</string>
<string name="help_add_system_app">Thêm ứng dụng hệ thống</string>
<string name="help_add_system_app_description">Thêm ứng dụng hệ thống cụ thể vào danh sách ứng dụng</string>
<string name="help_set_keybox">Đặt AOSP &amp; Keybox hợp lệ</string>
<string name="help_set_keybox_description">Thay thế keybox.xml của Tricky Store. Tùy chọn Keybox hợp lệ yêu cầu kết nối Internet và không phải lúc nào cũng khả dụng</string>
<string name="help_set_custom_keybox">Đặt Keybox tùy chỉnh</string>
<string name="help_set_custom_keybox_description">Nhập Keybox từ bộ nhớ thiết bị của bạn. Chỉ hỗ trợ tệp xml</string>
<string name="help_set_security_patch">Đặt bản vá bảo mật</string>
<string name="help_set_security_patch_description">Đặt spoof bản vá bảo mật tùy chỉnh. Cấu hình tự động sẽ sử dụng bản vá bảo mật từ module PIF. Để trống và lưu để tắt cấu hình tự động</string>
<string name="help_set_verified_boot_hash">Đặt Verified Boot Hash</string>
<string name="help_set_verified_boot_hash_description">Lấy giá trị verifiedBootHash từ Key Attestation Demo. Sửa trạng thái boot bất thường bằng cách đặt lại ro.boot.vbmeta.digest</string>
<!-- Update -->
<string name="update_update_available">Đã có phiên bản mới</string>
<string name="update_redirect_to_release">Nhấn để tải phiên bản mới nhất</string>
<string name="update_changelog">Nhật ký thay đổi</string>
<string name="update_install">Cài đặt</string>
<string name="update_reboot">Khởi động lại</string>
<!-- Search -->
<string name="search_bar_search_placeholder">Tìm kiếm</string>
<!-- Functional Button -->
<string name="functional_button_save_and_update_button">Lưu</string>
<string name="functional_button_uninstall_webui">Gỡ cài đặt WebUI</string>
<!-- Loading -->
<string name="loading_loading">Đang tải...</string>
<!-- Menu -->
<string name="menu_refresh">Làm mới</string>
<string name="menu_select_all">Chọn tất cả</string>
<string name="menu_deselect_all">Bỏ chọn tất cả</string>
<string name="menu_select_denylist">Chọn từ DenyList</string>
<string name="menu_deselect_unnecessary">Bỏ chọn không cần thiết</string>
<string name="menu_add_system_app">Thêm ứng dụng hệ thống</string>
<string name="menu_set_aosp_keybox">Đặt AOSP Keybox</string>
<string name="menu_set_unknown_keybox">Đặt Keybox không xác định</string>
<string name="menu_set_valid_keybox">Đặt Keybox hợp lệ</string>
<string name="menu_set_custom_keybox">Đặt Keybox tùy chỉnh</string>
<string name="menu_set_verified_boot_hash">Đặt Verified Boot Hash</string>
<string name="menu_set_security_patch">Đặt bản vá bảo mật</string>
<string name="menu_set_devconfig">Đặt DevConfig</string>
<string name="menu_about">Giới thiệu</string>
<!-- Boot Hash -->
<string name="boot_hash_input_placeholder">Dán Verified Boot Hash của bạn vào đây</string>
<string name="boot_hash_save_button">Lưu</string>
<!-- About -->
<string name="about_module_name_line2">Cập nhật danh sách mục tiêu</string>
<string name="about_by">Bởi</string>
<string name="about_telegram_channel">Kênh Telegram</string>
<string name="about_canary_update">Cập nhật lên phiên bản canary mới nhất</string>
<string name="about_disclaimer">Module này không phải là một phần của module Tricky Store. KHÔNG báo cáo bất kỳ vấn đề nào cho Tricky Store nếu gặp phải</string>
<string name="about_acknowledgment">Lời cảm ơn</string>
<!-- Prompt -->
<string name="prompt_no_internet">Vui lòng kiểm tra kết nối Internet của bạn</string>
<string name="prompt_aosp_key_set">Đã đặt AOSP keybox thành công</string>
<string name="prompt_key_set_error">Không thể cập nhật keybox</string>
<string name="prompt_unknown_key_set">Đã đặt keybox không xác định thành công</string>
<string name="prompt_valid_key_set">Đã đặt keybox hợp lệ thành công</string>
<string name="prompt_no_valid">Không tìm thấy Keybox hợp lệ</string>
<string name="prompt_boot_hash_set">Đã lưu Verified Boot Hash thành công</string>
<string name="prompt_boot_hash_set_error">Không thể cập nhật Verified Boot Hash</string>
<string name="prompt_saved_target">Đã lưu cấu hình vào target.txt</string>
<string name="prompt_save_error">Không thể lưu cấu hình</string>
<string name="prompt_uninstall_prompt">WebUI sẽ bị Gỡ cài đặt sau khi khởi động lại</string>
<string name="prompt_uninstall_failed">Không thể Gỡ cài đặt WebUI</string>
<string name="prompt_checking_update">Đang kiểm tra cập nhật...</string>
<string name="prompt_new_update">Có bản cập nhật mới!</string>
<string name="prompt_no_update">Hiện không có bản cập nhật nào</string>
<string name="prompt_downloading">Đang tải bản cập nhật mới...</string>
<string name="prompt_downloaded">Tải xuống hoàn tất</string>
<string name="prompt_download_fail">Không thể tải bản cập nhật</string>
<string name="prompt_installing">Đang cài đặt bản cập nhật...</string>
<string name="prompt_installed">Cài đặt thành công, khởi động lại ngay.</string>
<string name="prompt_install_fail">Không thể cài đặt, vui lòng cập nhật thủ công</string>
<string name="prompt_rebooting">Đang khởi động lại...</string>
<string name="prompt_reboot_fail">Không thể khởi động lại, vui lòng khởi động lại thủ công</string>
<string name="prompt_custom_key_set">Đã đặt keybox tùy chỉnh thành công</string>
<string name="prompt_custom_key_set_error">Không thể đặt keybox tùy chỉnh</string>
<string name="prompt_no_file_selected">Chưa chọn tệp nào</string>
<string name="prompt_system_app_not_found">Không tìm thấy ứng dụng hệ thống</string>
<string name="prompt_system_app_error">Không thể thêm ứng dụng hệ thống</string>
<!-- Security Patch -->
<string name="security_patch_title">Bản vá bảo mật</string>
<string name="security_patch_advanced_mode">Nâng cao</string>
<string name="security_patch_get_date">Lấy ngày bản vá bảo mật</string>
<string name="security_patch_auto">Tự động</string>
<string name="security_patch_save">Lưu</string>
<string name="security_patch_fetching">Đang lấy...</string>
<string name="security_patch_fetched">Hoàn tất</string>
<string name="security_patch_get_failed">Không thể lấy ngày bản vá bảo mật</string>
<string name="security_patch_unable_to_connect">Không thể kết nối tới source.android.com</string>
<string name="security_patch_auto_success">Bật cấu hình tự động thành công</string>
<string name="security_patch_auto_failed">Không thể bật cấu hình tự động</string>
<string name="security_patch_save_success">Đã lưu bản vá bảo mật thành công</string>
<string name="security_patch_save_failed">Không thể lưu bản vá bảo mật</string>
<string name="security_patch_value_empty">Đã tắt cấu hình bản vá bảo mật</string>
<string name="security_patch_invalid_all">Định dạng không hợp lệ</string>
<string name="security_patch_invalid_boot">Định dạng boot không hợp lệ</string>
<string name="security_patch_invalid_system">Định dạng system không hợp lệ</string>
<string name="security_patch_invalid_vendor">Định dạng vendor không hợp lệ</string>
<!-- Add System App -->
<string name="add_system_app_title">Thêm ứng dụng hệ thống</string>
<string name="add_system_app_add">Thêm</string>
<string name="add_system_app_current_list">Danh sách ứng dụng hệ thống hiện tại</string>
<!-- Uninstall confirmation -->
<string name="confirmation_uninstall_title">Xác nhận gỡ cài đặt?</string>
<string name="confirmation_uninstall_message">Bạn có chắc muốn Gỡ cài đặt Tricky Addon không?</string>
<string name="confirmation_uninstall_cancel">Hủy</string>
<string name="confirmation_uninstall_confirm">Xác nhận</string>
</resources>

View File

@@ -104,7 +104,7 @@ export function spawn(command, args = [], options = {}) {
ksu.spawn(command, JSON.stringify(args), JSON.stringify(options), callbackName);
} else {
setTimeout(() => {
child.emit("error", "ksu is not defined");
child.stderr.emit("data", "ksu is not defined");
child.emit("exit", 1);
}, 0);
}

View File

@@ -101,23 +101,8 @@ export async function loadTranslations() {
// Support for rtl language
const isRTL = rtlLang.includes(lang.split('-')[0]);
if (isRTL) {
document.documentElement.setAttribute('dir', 'rtl');
document.documentElement.setAttribute('lang', lang);
// Load extra rtl css
fetch('styles/rtl_styles.css')
.then(res => res.text())
.then(css => {
const style = document.createElement('style');
style.textContent = css;
document.head.appendChild(style);
});
} else {
document.documentElement.setAttribute('dir', 'ltr');
document.documentElement.setAttribute('lang', lang);
}
document.documentElement.setAttribute('dir', isRTL ? 'rtl' : 'ltr');
// Generate language menu
await generateLanguageMenu();
} catch (error) {

View File

@@ -68,7 +68,7 @@ function checkTrickyStoreVersion() {
const securityPatchElement = document.getElementById('security-patch');
exec(`
TS_version=$(grep "versionCode=" "/data/adb/modules/tricky_store/module.prop" | cut -d'=' -f2)
if grep -q "James" "/data/adb/modules/tricky_store/module.prop"; then
if grep -qE "James|beakthoven" "/data/adb/modules/tricky_store/module.prop"; then
echo 0
elif [ "$TS_version" -ge 158 ]; then
echo 0
@@ -123,7 +123,7 @@ export function linkRedirect(link) {
.then(({ errno }) => {
if (errno !== 0) toast("Failed to open link");
});
},100);
}, 100);
}
// Save configure and preserve ! and ? in target.txt

View File

@@ -72,6 +72,11 @@
}
}
[dir="rtl"] .link-icon svg {
padding-right: unset;
padding-left: 3px;
}
#telegram {
background-color: #38A7ED;
}

View File

@@ -240,6 +240,11 @@
position: relative;
}
[dir="rtl"] .app-icon-container {
margin-right: unset;
margin-left: 10px;
}
.loader {
position: absolute;
top: 0;

View File

@@ -79,6 +79,11 @@
}
}
[dir="rtl"] .file-item svg {
margin-right: unset;
margin-left: 10px;
}
.file-item span {
flex-grow: 1;
overflow: hidden;

View File

@@ -6,36 +6,40 @@
--bottom-inset: var(--window-inset-bottom, 0px);
/* Background colors */
--bg-primary: var(--background, #F5F5F5);
--bg-secondary: var(--tonalSurface, #fff);
--bg-input: var(--surfaceBright, #F5F5F5);
--bg-primary: var(--background, #fbf8ff);
--bg-secondary: var(--tonalSurface, #f3f0f9);
--bg-input: var(--surfaceBright, #fbf8ff);
/* Text colors */
--text-primary: var(--onSurface, #000);
--text-primary: var(--onSurface, #1b1b21);
--text-secondary: var(--onSurfaceVariant, #757575);
/* Border colors */
--border-color: var(--outlineVariant, #ccc);
--border-color: var(--outlineVariant, #c7c5d0);
/* Button colors */
--btn-primary: var(--primary, #007bff);
--btn-primary: var(--primary, #565992);
--btn-primary-text: var(--onPrimary, #fff);
--btn-uninstall: var(--error, #FF3636);
--btn-uninstall: #f26767;
}
@media (prefers-color-scheme: dark) {
:root {
/* Background colors */
--bg-primary: var(--background, #151515);
--bg-secondary: var(--tonalSurface, #292929);
--bg-input: var(--surfaceBright, #1b1b1b);
--bg-primary: var(--background, #131318);
--bg-secondary: var(--tonalSurface, #1c1c24);
--bg-input: var(--surfaceBright, #2c2c30);
/* Text colors */
--text-primary: var(--onSurface, #fff);
--text-primary: var(--onSurface, #e4e1e9);
--text-secondary: var(--onSurfaceVariant, #C2C2C2);
/* Border colors */
--border-color: var(--outlineVariant, #636363);
--border-color: var(--outlineVariant, #46464f);
/* Button colors */
--btn-primary: var(--primary, #bfc2ff);
--btn-primary-text: var(--onPrimary, #272b60);
}
}
@@ -111,6 +115,11 @@ body {
user-select: none;
}
[dir="rtl"] .close-btn {
right: unset;
left: 12px;
}
.prompt {
position: fixed;
bottom: 0;

View File

@@ -26,6 +26,12 @@
font-weight: bold;
}
[dir="rtl"] #module-version,
[dir="rtl"] #title {
padding-left: unset;
padding-right: 5px;
}
.no-connection {
height: 100%;
display: flex;
@@ -45,6 +51,11 @@
display: inline-block;
}
[dir="rtl"] .language-dropdown {
margin-left: unset;
margin-right: auto;
}
.language-button {
height: 100%;
display: flex;
@@ -76,6 +87,12 @@
transition: all 0.2s ease;
}
[dir="rtl"] .language-menu {
right: unset;
left: 5px;
transform-origin: top left;
}
.language-menu.show {
opacity: 1;
transform: translateY(0) scale(1);

View File

@@ -1,57 +0,0 @@
#module-version,
#title {
padding-left: unset;
padding-right: 5px;
}
.language-dropdown {
margin-left: unset;
margin-right: auto;
}
.language-menu {
right: unset;
left: 5px;
transform-origin: top left;
}
.close-btn {
right: unset;
left: 12px;
}
.search-icon {
left: unset;
right: 15px;
}
.search-card {
left: unset;
right: 0;
}
.menu {
right: unset;
left: 0;
}
.menu-options {
right: unset;
left: 0;
transform: translateX(-120%);
}
.app-icon-container {
margin-right: unset;
margin-left: 10px;
}
.link-icon svg {
padding-right: unset;
padding-left: 3px;
}
.file-item svg {
margin-right: unset;
margin-left: 10px;
}

View File

@@ -26,6 +26,11 @@
position: absolute;
}
[dir="rtl"] .search-card {
left: unset;
right: 0;
}
.search-icon {
position: absolute;
padding-top: 5px;
@@ -33,6 +38,11 @@
z-index: 1000;
}
[dir="rtl"] .search-icon {
left: unset;
right: 15px;
}
.search-input {
position: absolute;
border: none;
@@ -65,6 +75,11 @@
height: 100%;
}
[dir="rtl"] .menu {
right: unset;
left: 0;
}
.menu-toggle {
display: none;
}
@@ -113,6 +128,12 @@
user-select: none;
}
[dir="rtl"] .menu-options {
right: unset;
left: 0;
transform: translateX(-120%);
}
#select-denylist,
#security-patch {
display: none;