Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
uuid = "BC42CABB-0F8D-43D1-AEA5-89E15BDB110F"
type = "1"
version = "2.0">
</Bucket>
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>TrollFools.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>1</integer>
</dict>
<key>trollfoolscli.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</plist>
19 changes: 19 additions & 0 deletions TrollFools/RenameManager.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import Foundation
import Combine
import SwiftUI

final class RenameManager: ObservableObject {
@Published var plugInRenames: [String: String] {
didSet {
storage.wrappedValue = plugInRenames
}
}

private var storage: CodableStorage<[String: String]>

init(appId: String) {
let initialStorage = CodableStorage<[String: String]>(key: "PlugInRenames-\(appId)", defaultValue: [:])
self.storage = initialStorage
self.plugInRenames = initialStorage.wrappedValue
}
}
36 changes: 36 additions & 0 deletions TrollFools/UnsupportedAppListView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
//
// UnsupportedAppListView.swift
// TrollFools
//
// Created by Z on 2025/9/12.
//

import SwiftUI

struct UnsupportedAppListView: View {
let unsupportedApps: [App]
@Binding var isPresented: Bool

init(unsupportedApps: [App], isPresented: Binding<Bool>) {
self.unsupportedApps = unsupportedApps
self._isPresented = isPresented
}

var body: some View {
NavigationView {
List(unsupportedApps) { app in
AppListCell(app: app)
}
.listStyle(.insetGrouped)
.navigationTitle(NSLocalizedString("Unsupported Applications", comment: ""))
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .confirmationAction) {
Button(NSLocalizedString("Done", comment: "")) {
isPresented = false
}
}
}
}
}
}
58 changes: 29 additions & 29 deletions TrollFools/vi.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -14,31 +14,31 @@
"Advanced Settings" = "Cài đặt nâng cao";

/* No comment provided by engineer. */
"Advertisement" = "Quảng Cáo";
"Advertisement" = "Advertisement";

/* TODO */
"After the app upgrade, any injected plugins will be disabled. You will need to manually re-enable them." = "Sau khi nâng cấp ứng dụng, bất kỳ plugin nào đã được tiêm sẽ bị vô hiệu hóa. Bạn sẽ cần phải kích hoạt lại chúng một cách thủ công.";
"After the app upgrade, any injected plugins will be disabled. You will need to manually re-enable them." = "After the app upgrade, any injected plugins will be disabled. You will need to manually re-enable them.";

/* TODO */
"All" = "Tất cả";
"All" = "All";

/* TODO */
"All Applications" = "Tất cả ứng dụng";
"All Applications" = "All Applications";

/* TODO */
"An awesome music visualizer." = "Một trình tạo hình ảnh âm nhạc tuyệt vời.";
"An awesome music visualizer." = "An awesome music visualizer.";

/* No comment provided by engineer. */
"And %d more unsupported user applications." = "Có %d ứng dụng người dùng không được hỗ trợ.";

/* TODO */
"Are you sure you want to eject all plug-ins? This action cannot be undone." = "Bạn có chắc chắn muốn gỡ bỏ tất cả plug-in không? Hành động này không thể hoàn tác.";
"Are you sure you want to eject all plug-ins? This action cannot be undone." = "Are you sure you want to eject all plug-ins? This action cannot be undone.";

/* TODO */
"Bringing back the most advanced system and security analysis tool." = "Mang trở lại công cụ phân tích hệ thống và bảo mật tiên tiến nhất.";
"Bringing back the most advanced system and security analysis tool." = "Bringing back the most advanced system and security analysis tool.";

/* TODO */
"Buy our paid products to support us if you like TrollFools!" = "Mua sản phẩm trả phí của chúng tôi để ủng hộ chúng tôi nếu bạn thích TrollFools!";
"Buy our paid products to support us if you like TrollFools!" = "Buy our paid products to support us if you like TrollFools!";

/* No comment provided by engineer. */
"Cancel" = "Hủy";
Expand All @@ -53,10 +53,10 @@
"Confirm" = "Xác nhận";

/* TODO */
"Continue" = "Tiếp tục";
"Continue" = "Continue";

/* TODO */
"Continue and Don’t Show Again" = "Tiếp tục và không hiển thị lại";
"Continue and Don’t Show Again" = "Continue and Don’t Show Again";

/* No comment provided by engineer. */
"Copy" = "Sao chép";
Expand All @@ -65,7 +65,7 @@
"Copyright" = "Bản quyền";

/* TODO */
"Disable All" = "Vô hiệu hóa tất cả";
"Disable All" = "Disable All";

/* No comment provided by engineer. */
"Do you want to clear this log file “%@”?" = "Bạn có muốn xóa tệp nhật ký này “%@”?";
Expand All @@ -86,10 +86,10 @@
"Error" = "Lỗi";

/* TODO */
"Export" = "Xuất ra";
"Export" = "Export";

/* TODO */
"Export All" = "Xuất tất cả";
"Export All" = "Export All";

/* No comment provided by engineer. */
"Failed" = "Thất bại";
Expand All @@ -110,22 +110,22 @@
"Fast" = "Tiêm nhanh";

/* TODO */
"Fast, feature-rich VNC server for iOS: remote control made simple." = "Máy chủ VNC nhanh, nhiều tính năng cho iOS: điều khiển từ xa trở nên đơn giản.";
"Fast, feature-rich VNC server for iOS: remote control made simple." = "Fast, feature-rich VNC server for iOS: remote control made simple.";

/* No comment provided by engineer. */
"Filza (URL Scheme) Not Installed" = "Filza (URL Scheme) chưa được cài đặt.";

/* TODO */
"Full-Fledged Automation Framework for TrollStore." = "Framework tự động hóa toàn diện cho TrollStore.";
"Full-Fledged Automation Framework for TrollStore." = "Full-Fledged Automation Framework for TrollStore.";

/* No comment provided by engineer. */
"Hide" = "Ẩn";
"Hide" = "Hide";

/* No comment provided by engineer. */
"If you do not know what these options mean, please do not change them." = "Nếu bạn không biết các tùy chọn này có ý nghĩa gì, đừng thay đổi chúng.";

/* TODO */
"Includes Disabled PlugIns" = "Bao gồm PlugIns bị vô hiệu hóa";
"Includes Disabled PlugIns" = "Includes Disabled PlugIns";

/* No comment provided by engineer. */
"Inject" = "Tiêm";
Expand All @@ -149,7 +149,7 @@
"Launch" = "Mở ứng dụng";

/* TODO */
"Lessica, huami1314, iosdump and other contributors" = "Lessica, huami1314, iosdump và các cộng tác viên khác";
"Lessica, huami1314, iosdump and other contributors" = "Lessica, huami1314, iosdump and other contributors";

/* TODO */
"Letterpress" = "Letterpress";
Expand All @@ -164,19 +164,19 @@
"Log Viewer" = "Trình xem nhật ký";

/* TODO */
"Manage" = "Quản lý";
"Manage" = "Manage";

/* TODO */
"Manage %d Plug-Ins" = "Quản lý %d Plug-Ins";
"Manage %d Plug-Ins" = "Manage %d Plug-Ins";

/* TODO */
"New version %@ available!" = "Phiên bản mới %@ có sẵn!";
"New version %@ available!" = "New version %@ available!";

/* No comment provided by engineer. */
"No Applications" = "Không có ứng dụng nào";
"No Applications" = "No Applications";

/* TODO */
"No dylib found in the Debian package." = "Không tìm thấy dylib trong gói Debian.";
"No dylib found in the Debian package." = "No dylib found in the Debian package.";

/* No comment provided by engineer. */
"No eligible framework found." = "Không tìm thấy framework đủ điều kiện.";
Expand All @@ -191,7 +191,7 @@
"No valid plug-ins found." = "Không tìm thấy plug-in hợp lệ.";

/* TODO */
"Notice" = "Lưu Ý";
"Notice" = "Notice";

/* No comment provided by engineer. */
"Only removable system applications are eligible and listed." = "Chỉ các ứng dụng hệ thống có thể gỡ bỏ và đủ điều kiện tiêm mới được liệt kê.";
Expand All @@ -218,7 +218,7 @@
"Rebuild Icon Cache" = "Làm mới bộ nhớ đệm biểu tượng";

/* TODO */
"Record your phone calls like never before." = "Ghi âm cuộc gọi điện thoại của Bạn chưa từng có trước đây.";
"Record your phone calls like never before." = "Record your phone calls like never before.";

/* No comment provided by engineer. */
"Reveil" = "Reveil";
Expand All @@ -230,7 +230,7 @@
"Search…" = "Tìm kiếm…";

/* TODO */
"Select an application to view details." = "Chọn một ứng dụng để xem chi tiết.";
"Select an application to view details." = "Select an application to view details.";

/* No comment provided by engineer. */
"Select Application to Inject" = "Chọn ứng dụng để tiêm";
Expand All @@ -254,7 +254,7 @@
"The content of text file “%@” is empty." = "Nội dung của tệp văn bản “%@” trống.";

/* TODO */
"This is an advertisement." = "Đây là một quảng cáo.";
"This is an advertisement." = "This is an advertisement.";

/* No comment provided by engineer. */
"TrollFools" = "TrollFools";
Expand All @@ -272,7 +272,7 @@
"TrollVNC" = "TrollVNC";

/* TODO */
"Unable to locate the data archive in the Debian package." = "Không thể tìm thấy kho lưu trữ dữ liệu trong gói Debian.";
"Unable to locate the data archive in the Debian package." = "Unable to locate the data archive in the Debian package.";

/* No comment provided by engineer. */
"Unlock Version" = "Mở khóa phiên bản";
Expand All @@ -296,4 +296,4 @@
"You need to rebuild the icon cache in TrollStore to apply changes." = "Bạn cần làm mới bộ nhớ đệm biểu tượng trong TrollStore để áp dụng các thay đổi.";

/* TODO */
"You’ve selected at least one Debian Package “%@”. We’re here to remind you that it will not work as it was in a jailbroken environment. Please make sure you know what you’re doing." = "Bạn đã chọn ít nhất một Gói Debian “%@”. Chúng tôi xin nhắc bạn rằng gói này sẽ không hoạt động như khi sử dụng trong môi trường đã bẻ khóa. Vui lòng đảm bảo bạn biết rõ mình đang làm gì.";
"You’ve selected at least one Debian Package “%@”. We’re here to remind you that it will not work as it was in a jailbroken environment. Please make sure you know what you’re doing." = "You’ve selected at least one Debian Package “%@”. We’re here to remind you that it will not work as it was in a jailbroken environment. Please make sure you know what you’re doing.";