Fix tab delay view issues

Fix tray action issues

Fix get profile redirect client ua issues

Fix proxy card delay view issues

Add Russian, Japanese adaptation

Fix some issues
This commit is contained in:
chen08209
2025-03-05 16:08:50 +08:00
parent eada271c49
commit e92900dbbd
44 changed files with 2568 additions and 503 deletions

View File

@@ -67,7 +67,6 @@ jobs:
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: 3.24.5
channel: stable
cache: true

Binary file not shown.

View File

@@ -28,6 +28,14 @@ import (
"sync"
)
func splitByComma(s string) interface{} {
parts := strings.Split(s, ",")
if len(parts) > 1 {
return parts
}
return s
}
var (
isRunning = false
runLock sync.Mutex
@@ -162,7 +170,17 @@ func decorationConfig(profileId string, cfg config.RawConfig) *config.RawConfig
func genHosts(hosts, patchHosts map[string]any) {
for k, v := range patchHosts {
hosts[k] = v
if str, ok := v.(string); ok {
hosts[k] = splitByComma(str)
}
}
}
func modPatchDns(dns *config.RawDNS) {
for pair := dns.NameServerPolicy.Oldest(); pair != nil; pair = pair.Next() {
if str, ok := pair.Value.(string); ok {
dns.NameServerPolicy.Set(pair.Key, splitByComma(str))
}
}
}
@@ -228,6 +246,7 @@ func overwriteConfig(targetConfig *config.RawConfig, patchConfig config.RawConfi
}
genHosts(targetConfig.Hosts, patchConfig.Hosts)
if configParams.OverrideDns {
modPatchDns(&patchConfig.DNS)
targetConfig.DNS = patchConfig.DNS
} else {
if targetConfig.DNS.Enable == false {

View File

@@ -62,15 +62,15 @@ class ApplicationState extends ConsumerState<Application> {
_autoUpdateProfilesTask();
globalState.appController = AppController(context, ref);
globalState.measure = Measure.of(context);
ref.listenManual(themeSettingProvider.select((state) => state.fontFamily),
(prev, next) {
if (prev != next) {
globalState.measure = Measure.of(
context,
fontFamily: next.value,
);
}
}, fireImmediately: true);
// ref.listenManual(themeSettingProvider.select((state) => state.fontFamily),
// (prev, next) {
// if (prev != next) {
// globalState.measure = Measure.of(
// context,
// fontFamily: next.value,
// );
// }
// }, fireImmediately: true);
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
final currentContext = globalState.navigatorKey.currentContext;
if (currentContext != null) {
@@ -194,7 +194,6 @@ class ApplicationState extends ConsumerState<Application> {
themeMode: themeProps.themeMode,
theme: ThemeData(
useMaterial3: true,
fontFamily: themeProps.fontFamily.value,
pageTransitionsTheme: _pageTransitionsTheme,
colorScheme: _getAppColorScheme(
brightness: Brightness.light,
@@ -204,13 +203,12 @@ class ApplicationState extends ConsumerState<Application> {
),
darkTheme: ThemeData(
useMaterial3: true,
fontFamily: themeProps.fontFamily.value,
pageTransitionsTheme: _pageTransitionsTheme,
colorScheme: _getAppColorScheme(
brightness: Brightness.dark,
systemColorSchemes: systemColorSchemes,
primaryColor: themeProps.primaryColor,
).toPrueBlack(themeProps.prueBlack),
).toPureBlack(themeProps.pureBlack),
),
home: child,
);

View File

@@ -1,7 +1,6 @@
import 'package:flutter/material.dart';
extension ColorExtension on Color {
Color get toLight {
return withOpacity(0.8);
}
@@ -51,7 +50,7 @@ extension ColorExtension on Color {
}
extension ColorSchemeExtension on ColorScheme {
ColorScheme toPrueBlack(bool isPrueBlack) => isPrueBlack
ColorScheme toPureBlack(bool isPrueBlack) => isPrueBlack
? copyWith(
surface: Colors.black,
surfaceContainer: surfaceContainer.darken(

View File

@@ -1,24 +1,24 @@
import 'dart:io';
import 'package:fl_clash/common/common.dart';
import '../state.dart';
import 'package:fl_clash/state.dart';
class FlClashHttpOverrides extends HttpOverrides {
static String handleFindProxy(Uri url) {
if ([localhost].contains(url.host)) {
return "DIRECT";
}
final port = globalState.config.patchClashConfig.mixedPort;
final isStart = globalState.appState.runTime != null;
commonPrint.log("find $url proxy:$isStart");
if (!isStart) return "DIRECT";
return "PROXY localhost:$port";
}
@override
HttpClient createHttpClient(SecurityContext? context) {
final client = super.createHttpClient(context);
client.badCertificateCallback = (_, __, ___) => true;
client.findProxy = (url) {
if ([localhost].contains(url.host)) {
return "DIRECT";
}
final port = globalState.config.patchClashConfig.mixedPort;
final isStart = globalState.appState.runTime != null;
commonPrint.log("find $url proxy:$isStart");
if (!isStart) return "DIRECT";
return "PROXY localhost:$port";
};
client.findProxy = handleFindProxy;
return client;
}
}

View File

@@ -3,6 +3,7 @@ import 'dart:io';
import 'dart:typed_data';
import 'package:dio/dio.dart';
import 'package:dio/io.dart';
import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/models/models.dart';
import 'package:fl_clash/state.dart';
@@ -10,6 +11,7 @@ import 'package:flutter/cupertino.dart';
class Request {
late final Dio _dio;
late final Dio _clashDio;
String? userAgent;
Request() {
@@ -20,22 +22,24 @@ class Request {
},
),
);
_clashDio = Dio();
_clashDio.httpClientAdapter = IOHttpClientAdapter(createHttpClient: () {
final client = HttpClient();
client.findProxy = (Uri uri) {
client.userAgent = globalState.ua;
return FlClashHttpOverrides.handleFindProxy(uri);
};
return client;
});
}
Future<Response> getFileResponseForUrl(String url) async {
final response = await _dio
.get(
url,
options: Options(
headers: {
"User-Agent": globalState.ua,
},
responseType: ResponseType.bytes,
),
)
.timeout(
httpTimeoutDuration * 6,
);
final response = await _clashDio.get(
url,
options: Options(
responseType: ResponseType.bytes,
),
);
return response;
}
@@ -109,9 +113,6 @@ class Request {
.get(
"http://$localhost:$helperPort/ping",
options: Options(
headers: {
"User-Agent": browserUa,
},
responseType: ResponseType.plain,
),
)

View File

@@ -28,7 +28,9 @@ class AppController {
AppController(this.context, WidgetRef ref) : _ref = ref;
updateClashConfigDebounce() {
debouncer.call(DebounceTag.updateClashConfig, updateClashConfig);
debouncer.call(DebounceTag.updateClashConfig, () {
updateClashConfig(true);
});
}
updateGroupsDebounce() {
@@ -41,10 +43,12 @@ class AppController {
});
}
applyProfileDebounce() {
debouncer.call(DebounceTag.addCheckIpNum, () {
applyProfile();
});
applyProfileDebounce({
bool silence = false,
}) {
debouncer.call(DebounceTag.applyProfile, (silence) {
applyProfile(silence: silence);
}, args: [silence]);
}
savePreferencesDebounce() {
@@ -156,18 +160,18 @@ class AppController {
.read(profilesProvider.notifier)
.setProfile(newProfile.copyWith(isUpdating: false));
if (profile.id == _ref.read(currentProfileIdProvider)) {
applyProfileDebounce();
applyProfileDebounce(silence: true);
}
}
_setProfile(Profile profile) {
setProfile(Profile profile) {
_ref.read(profilesProvider.notifier).setProfile(profile);
}
setProfile(Profile profile) {
_setProfile(profile);
setProfileAndAutoApply(Profile profile) {
_ref.read(profilesProvider.notifier).setProfile(profile);
if (profile.id == _ref.read(currentProfileIdProvider)) {
applyProfileDebounce();
applyProfileDebounce(silence: true);
}
}
@@ -219,8 +223,8 @@ class AppController {
return currentGroupName;
}
getRealProxyName(proxyName) {
return _ref.read(getRealTestUrlProvider(proxyName));
ProxyCardState getProxyCardState(proxyName) {
return _ref.read(getProxyCardStateProvider(proxyName));
}
getSelectedProxyName(groupName) {
@@ -232,7 +236,7 @@ class AppController {
if (profile == null || profile.currentGroupName == groupName) {
return;
}
_setProfile(
setProfile(
profile.copyWith(currentGroupName: groupName),
);
}
@@ -754,13 +758,13 @@ class AppController {
updateSystemProxy() {
_ref.read(networkSettingProvider.notifier).updateState(
(state) => state.copyWith(
systemProxy: state.systemProxy,
systemProxy: !state.systemProxy,
),
);
}
updateStart() {
updateStatus(_ref.read(runTimeProvider.notifier).isStart);
updateStatus(!_ref.read(runTimeProvider.notifier).isStart);
}
updateCurrentSelectedMap(String groupName, String proxyName) {
@@ -794,10 +798,10 @@ class AppController {
_ref.read(patchClashConfigProvider.notifier).updateState(
(state) => state.copyWith(mode: mode),
);
if (mode == Mode.global) {
updateCurrentGroupName(GroupName.GLOBAL.name);
}
addCheckIpNumDebounce();
// if (mode == Mode.global) {
// updateCurrentGroupName(GroupName.GLOBAL.name);
// }
// addCheckIpNumDebounce();
}
updateAutoLaunch() {

View File

@@ -219,8 +219,6 @@ enum ProxiesIconStyle {
}
enum FontFamily {
system(),
miSans("MiSans"),
twEmoji("Twemoji"),
icon("Icons");

View File

@@ -48,6 +48,32 @@ class StatusItem extends ConsumerWidget {
}
}
class ListenItem extends ConsumerWidget {
const ListenItem({super.key});
@override
Widget build(BuildContext context, ref) {
final listen =
ref.watch(patchClashConfigProvider.select((state) => state.dns.listen));
return ListItem.input(
title: Text(appLocalizations.listen),
subtitle: Text(listen),
delegate: InputDelegate(
title: appLocalizations.listen,
value: listen,
onChanged: (String? value) {
if (value == null) {
return;
}
ref
.read(patchClashConfigProvider.notifier)
.updateState((state) => state.copyWith.dns(listen: value));
},
),
);
}
}
class PreferH3Item extends ConsumerWidget {
const PreferH3Item({super.key});
@@ -596,6 +622,7 @@ class DnsOptions extends StatelessWidget {
title: appLocalizations.options,
items: [
const StatusItem(),
const ListenItem(),
const UseHostsItem(),
const UseSystemHostsItem(),
const IPv6Item(),

View File

@@ -80,9 +80,9 @@ class _EditProfileState extends State<EditProfile> {
);
}
}
appController.setProfile(await profile.saveFile(fileData!));
appController.setProfileAndAutoApply(await profile.saveFile(fileData!));
} else if (!hasUpdate) {
appController.setProfile(profile);
appController.setProfileAndAutoApply(profile);
} else {
globalState.homeScaffoldKey.currentState?.loadingRun(
() async {

View File

@@ -181,10 +181,6 @@ class ProfileItem extends StatelessWidget {
await globalState.appController.deleteProfile(profile.id);
}
_handleUpdateProfile() async {
await globalState.safeRun<void>(updateProfile);
}
Future updateProfile() async {
final appController = globalState.appController;
if (profile.type == ProfileType.file) return;
@@ -323,7 +319,7 @@ class ProfileItem extends StatelessWidget {
icon: Icons.sync_alt_sharp,
label: appLocalizations.sync,
onPressed: () {
_handleUpdateProfile();
updateProfile();
},
),
// ActionItemData(

View File

@@ -22,44 +22,46 @@ double getItemHeight(ProxyCardType proxyCardType) {
proxyDelayTest(Proxy proxy, [String? testUrl]) async {
final appController = globalState.appController;
final proxyName = appController.getRealProxyName(proxy.name);
final url = appController.getRealTestUrl(testUrl);
final state = appController.getProxyCardState(proxy.name);
final url = state.testUrl.getSafeValue(
appController.getRealTestUrl(testUrl),
);
appController.setDelay(
Delay(
url: url,
name: proxyName,
name: state.proxyName,
value: 0,
),
);
appController.setDelay(
await clashCore.getDelay(
url,
proxyName,
state.proxyName,
),
);
}
delayTest(List<Proxy> proxies, [String? testUrl]) async {
final appController = globalState.appController;
final proxyNames = proxies
.map((proxy) => appController.getRealProxyName(proxy.name))
.toSet()
.toList();
final url = appController.getRealTestUrl(testUrl);
final proxyNames = proxies.map((proxy) => proxy.name).toSet().toList();
final delayProxies = proxyNames.map<Future>((proxyName) async {
final state = appController.getProxyCardState(proxyName);
final url = state.testUrl.getSafeValue(
appController.getRealTestUrl(testUrl),
);
final name = state.proxyName;
appController.setDelay(
Delay(
url: url,
name: proxyName,
name: name,
value: 0,
),
);
appController.setDelay(
await clashCore.getDelay(
url,
proxyName,
name,
),
);
}).toList();

View File

@@ -108,7 +108,7 @@ class ProxiesTabFragmentState extends ConsumerState<ProxiesTabFragment>
_tabControllerListener([int? index]) {
int? groupIndex = index;
if(groupIndex == -1){
if (groupIndex == -1) {
return;
}
final appController = globalState.appController;

View File

@@ -98,7 +98,7 @@ class _ThemeColorsBoxState extends ConsumerState<ThemeColorsBox> {
Widget build(BuildContext context) {
return Column(
children: [
_FontFamilyItem(),
// _FontFamilyItem(),
_ThemeModeItem(),
_PrimaryColorItem(),
_PrueBlackItem(),
@@ -110,74 +110,74 @@ class _ThemeColorsBoxState extends ConsumerState<ThemeColorsBox> {
}
}
class _FontFamilyItem extends ConsumerWidget {
const _FontFamilyItem();
@override
Widget build(BuildContext context, WidgetRef ref) {
final fontFamily =
ref.watch(themeSettingProvider.select((state) => state.fontFamily));
List<FontFamilyItem> fontFamilyItems = [
FontFamilyItem(
label: appLocalizations.systemFont,
fontFamily: FontFamily.system,
),
const FontFamilyItem(
label: "MiSans",
fontFamily: FontFamily.miSans,
),
];
return ItemCard(
info: Info(
label: appLocalizations.fontFamily,
iconData: Icons.text_fields,
),
child: Container(
margin: const EdgeInsets.only(
left: 16,
right: 16,
),
height: 48,
child: ListView.separated(
scrollDirection: Axis.horizontal,
itemBuilder: (_, index) {
final fontFamilyItem = fontFamilyItems[index];
return CommonCard(
isSelected: fontFamilyItem.fontFamily == fontFamily,
onPressed: () {
ref.read(themeSettingProvider.notifier).updateState(
(state) => state.copyWith(
fontFamily: fontFamilyItem.fontFamily,
),
);
},
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Flexible(
child: Text(
fontFamilyItem.label,
),
),
],
),
),
);
},
separatorBuilder: (_, __) {
return const SizedBox(
width: 16,
);
},
itemCount: fontFamilyItems.length,
),
),
);
}
}
// class _FontFamilyItem extends ConsumerWidget {
// const _FontFamilyItem();
//
// @override
// Widget build(BuildContext context, WidgetRef ref) {
// final fontFamily =
// ref.watch(themeSettingProvider.select((state) => state.fontFamily));
// List<FontFamilyItem> fontFamilyItems = [
// FontFamilyItem(
// label: appLocalizations.systemFont,
// fontFamily: FontFamily.system,
// ),
// const FontFamilyItem(
// label: "roboto",
// fontFamily: FontFamily.roboto,
// ),
// ];
// return ItemCard(
// info: Info(
// label: appLocalizations.fontFamily,
// iconData: Icons.text_fields,
// ),
// child: Container(
// margin: const EdgeInsets.only(
// left: 16,
// right: 16,
// ),
// height: 48,
// child: ListView.separated(
// scrollDirection: Axis.horizontal,
// itemBuilder: (_, index) {
// final fontFamilyItem = fontFamilyItems[index];
// return CommonCard(
// isSelected: fontFamilyItem.fontFamily == fontFamily,
// onPressed: () {
// ref.read(themeSettingProvider.notifier).updateState(
// (state) => state.copyWith(
// fontFamily: fontFamilyItem.fontFamily,
// ),
// );
// },
// child: Padding(
// padding: const EdgeInsets.symmetric(horizontal: 16),
// child: Row(
// mainAxisSize: MainAxisSize.min,
// mainAxisAlignment: MainAxisAlignment.start,
// children: [
// Flexible(
// child: Text(
// fontFamilyItem.label,
// ),
// ),
// ],
// ),
// ),
// );
// },
// separatorBuilder: (_, __) {
// return const SizedBox(
// width: 16,
// );
// },
// itemCount: fontFamilyItems.length,
// ),
// ),
// );
// }
// }
class _ThemeModeItem extends ConsumerWidget {
const _ThemeModeItem();
@@ -320,7 +320,7 @@ class _PrueBlackItem extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final prueBlack =
ref.watch(themeSettingProvider.select((state) => state.prueBlack));
ref.watch(themeSettingProvider.select((state) => state.pureBlack));
return Padding(
padding: const EdgeInsets.symmetric(vertical: 16),
child: ListItem.switchItem(
@@ -328,13 +328,13 @@ class _PrueBlackItem extends ConsumerWidget {
Icons.contrast,
color: context.colorScheme.primary,
),
title: Text(appLocalizations.prueBlackMode),
title: Text(appLocalizations.pureBlackMode),
delegate: SwitchDelegate(
value: prueBlack,
onChanged: (value) {
ref.read(themeSettingProvider.notifier).updateState(
(state) => state.copyWith(
prueBlack: value,
pureBlack: value,
),
);
},

View File

@@ -30,6 +30,8 @@
"other": "Other",
"about": "About",
"en": "English",
"ja": "Japanese",
"ru": "Russian",
"zh_CN": "Simplified Chinese",
"theme": "Theme",
"themeDesc": "Set dark mode,adjust the color",
@@ -215,12 +217,12 @@
"go": "Go",
"externalLink": "External link",
"otherContributors": "Other contributors",
"autoCloseConnections": "Auto lose connections",
"autoCloseConnections": "Auto close connections",
"autoCloseConnectionsDesc": "Auto close connections after change node",
"onlyStatisticsProxy": "Only statistics proxy",
"onlyStatisticsProxyDesc": "When turned on, only statistics proxy traffic",
"deleteProfileTip": "Sure you want to delete the current profile?",
"prueBlackMode": "Prue black mode",
"pureBlackMode": "Pure black mode",
"keepAliveIntervalDesc": "Tcp keep alive interval",
"entries": " entries",
"local": "Local",
@@ -343,5 +345,6 @@
"copyLink": "Copy link",
"exportFile": "Export file",
"cacheCorrupt": "The cache is corrupt. Do you want to clear it?",
"detectionTip": "Relying on third-party api is for reference only"
"detectionTip": "Relying on third-party api is for reference only",
"listen": "Listen"
}

350
lib/l10n/arb/intl_ja.arb Normal file
View File

@@ -0,0 +1,350 @@
{
"rule": "ルール",
"global": "グローバル",
"direct": "ダイレクト",
"dashboard": "ダッシュボード",
"proxies": "プロキシ",
"profile": "プロファイル",
"profiles": "プロファイル一覧",
"tools": "ツール",
"logs": "ログ",
"logsDesc": "ログキャプチャ記録",
"resources": "リソース",
"resourcesDesc": "外部リソース関連情報",
"trafficUsage": "トラフィック使用量",
"coreInfo": "コア情報",
"nullCoreInfoDesc": "コア情報を取得できません",
"networkSpeed": "ネットワーク速度",
"outboundMode": "アウトバウンドモード",
"networkDetection": "ネットワーク検出",
"upload": "アップロード",
"download": "ダウンロード",
"noProxy": "プロキシなし",
"noProxyDesc": "プロファイルを作成するか、有効なプロファイルを追加してください",
"nullProfileDesc": "プロファイルがありません。追加してください",
"nullLogsDesc": "ログがありません",
"settings": "設定",
"language": "言語",
"defaultText": "デフォルト",
"more": "詳細",
"other": "その他",
"about": "について",
"en": "英語",
"ja": "日本語",
"ru": "ロシア語",
"zh_CN": "簡体字中国語",
"theme": "テーマ",
"themeDesc": "ダークモードの設定、色の調整",
"override": "上書き",
"overrideDesc": "プロキシ関連設定を上書き",
"allowLan": "LANを許可",
"allowLanDesc": "LAN経由でのプロキシアクセスを許可",
"tun": "TUN",
"tunDesc": "管理者モードでのみ有効",
"minimizeOnExit": "終了時に最小化",
"minimizeOnExitDesc": "システムの終了イベントを変更",
"autoLaunch": "自動起動",
"autoLaunchDesc": "システムの自動起動に従う",
"silentLaunch": "バックグラウンド起動",
"silentLaunchDesc": "バックグラウンドで起動",
"autoRun": "自動実行",
"autoRunDesc": "アプリ起動時に自動実行",
"logcat": "ログキャット",
"logcatDesc": "無効化するとログエントリを非表示",
"autoCheckUpdate": "自動更新チェック",
"autoCheckUpdateDesc": "起動時に更新を自動チェック",
"accessControl": "アクセス制御",
"accessControlDesc": "アプリケーションのプロキシアクセスを設定",
"application": "アプリケーション",
"applicationDesc": "アプリ関連設定を変更",
"edit": "編集",
"confirm": "確認",
"update": "更新",
"add": "追加",
"save": "保存",
"delete": "削除",
"years": "年",
"months": "月",
"hours": "時間",
"days": "日",
"minutes": "分",
"seconds": "秒",
"ago": "前",
"just": "たった今",
"qrcode": "QRコード",
"qrcodeDesc": "QRコードをスキャンしてプロファイルを取得",
"url": "URL",
"urlDesc": "URL経由でプロファイルを取得",
"file": "ファイル",
"fileDesc": "プロファイルを直接アップロード",
"name": "名前",
"profileNameNullValidationDesc": "プロファイル名を入力してください",
"profileUrlNullValidationDesc": "プロファイルURLを入力してください",
"profileUrlInvalidValidationDesc": "有効なプロファイルURLを入力してください",
"autoUpdate": "自動更新",
"autoUpdateInterval": "自動更新間隔(分)",
"profileAutoUpdateIntervalNullValidationDesc": "自動更新間隔を入力してください",
"profileAutoUpdateIntervalInvalidValidationDesc": "有効な間隔形式を入力してください",
"themeMode": "テーマモード",
"themeColor": "テーマカラー",
"preview": "プレビュー",
"auto": "自動",
"light": "ライト",
"dark": "ダーク",
"importFromURL": "URLからインポート",
"submit": "送信",
"doYouWantToPass": "通過させますか?",
"create": "作成",
"defaultSort": "デフォルト順",
"delaySort": "遅延順",
"nameSort": "名前順",
"pleaseUploadFile": "ファイルをアップロードしてください",
"pleaseUploadValidQrcode": "有効なQRコードをアップロードしてください",
"blacklistMode": "ブラックリストモード",
"whitelistMode": "ホワイトリストモード",
"filterSystemApp": "システムアプリを除外",
"cancelFilterSystemApp": "システムアプリの除外を解除",
"selectAll": "すべて選択",
"cancelSelectAll": "全選択解除",
"appAccessControl": "アプリアクセス制御",
"accessControlAllowDesc": "選択したアプリのみVPNを許可",
"accessControlNotAllowDesc": "選択したアプリをVPNから除外",
"selected": "選択済み",
"unableToUpdateCurrentProfileDesc": "現在のプロファイルを更新できません",
"noMoreInfoDesc": "追加情報なし",
"profileParseErrorDesc": "プロファイル解析エラー",
"proxyPort": "プロキシポート",
"proxyPortDesc": "Clashのリスニングポートを設定",
"port": "ポート",
"logLevel": "ログレベル",
"show": "表示",
"exit": "終了",
"systemProxy": "システムプロキシ",
"project": "プロジェクト",
"core": "コア",
"tabAnimation": "タブアニメーション",
"tabAnimationDesc": "有効化するとホームタブに切り替えアニメーションを追加",
"desc": "ClashMetaベースのマルチプラットフォームプロキシクライアント。シンプルで使いやすく、オープンソースで広告なし。",
"startVpn": "VPNを開始中...",
"stopVpn": "VPNを停止中...",
"discovery": "新しいバージョンを発見",
"compatible": "互換モード",
"compatibleDesc": "有効化すると一部機能を失いますが、Clashの完全サポートを獲得",
"notSelectedTip": "現在のプロキシグループは選択できません",
"tip": "ヒント",
"backupAndRecovery": "バックアップと復元",
"backupAndRecoveryDesc": "WebDAVまたはファイルでデータを同期",
"account": "アカウント",
"backup": "バックアップ",
"recovery": "復元",
"recoveryProfiles": "プロファイルのみ復元",
"recoveryAll": "全データ復元",
"recoverySuccess": "復元成功",
"backupSuccess": "バックアップ成功",
"noInfo": "情報なし",
"pleaseBindWebDAV": "WebDAVをバインドしてください",
"bind": "バインド",
"connectivity": "接続性:",
"webDAVConfiguration": "WebDAV設定",
"address": "アドレス",
"addressHelp": "WebDAVサーバーアドレス",
"addressTip": "有効なWebDAVアドレスを入力",
"password": "パスワード",
"passwordTip": "パスワードは必須です",
"accountTip": "アカウントは必須です",
"checkUpdate": "更新を確認",
"discoverNewVersion": "新バージョンを発見",
"checkUpdateError": "アプリは最新版です",
"goDownload": "ダウンロードへ",
"unknown": "不明",
"geoData": "地域データ",
"externalResources": "外部リソース",
"checking": "確認中...",
"country": "国",
"checkError": "確認エラー",
"search": "検索",
"allowBypass": "アプリがVPNをバイパスすることを許可",
"allowBypassDesc": "有効化すると一部アプリがVPNをバイパス",
"externalController": "外部コントローラー",
"externalControllerDesc": "有効化するとClashコアをポート9090で制御可能",
"ipv6Desc": "有効化するとIPv6トラフィックを受信可能",
"app": "アプリ",
"general": "一般",
"vpnSystemProxyDesc": "HTTPプロキシをVpnServiceに接続",
"systemProxyDesc": "HTTPプロキシをVpnServiceに接続",
"unifiedDelay": "統一遅延",
"unifiedDelayDesc": "ハンドシェイクなどの余分な遅延を削除",
"tcpConcurrent": "TCP並列処理",
"tcpConcurrentDesc": "TCP並列処理を許可",
"geodataLoader": "Geo低メモリモード",
"geodataLoaderDesc": "有効化するとGeo低メモリローダーを使用",
"requests": "リクエスト",
"requestsDesc": "最近のリクエスト記録を表示",
"findProcessMode": "プロセス検出",
"findProcessModeDesc": "有効化するとフラッシュバックのリスクあり",
"init": "初期化",
"infiniteTime": "長期有効",
"expirationTime": "有効期限",
"connections": "接続",
"connectionsDesc": "現在の接続データを表示",
"nullRequestsDesc": "リクエストなし",
"nullConnectionsDesc": "接続なし",
"intranetIP": "イントラネットIP",
"view": "表示",
"cut": "切り取り",
"copy": "コピー",
"paste": "貼り付け",
"testUrl": "URLテスト",
"sync": "同期",
"exclude": "最近のタスクから非表示",
"excludeDesc": "アプリがバックグラウンド時に最近のタスクから非表示",
"oneColumn": "1列",
"twoColumns": "2列",
"threeColumns": "3列",
"fourColumns": "4列",
"expand": "標準",
"shrink": "縮小",
"min": "最小化",
"tab": "タブ",
"list": "リスト",
"delay": "遅延",
"style": "スタイル",
"size": "サイズ",
"sort": "並び替え",
"columns": "列",
"proxiesSetting": "プロキシ設定",
"proxyGroup": "プロキシグループ",
"go": "移動",
"externalLink": "外部リンク",
"otherContributors": "その他の貢献者",
"autoCloseConnections": "接続を自動閉じる",
"autoCloseConnectionsDesc": "ノード変更後に接続を自動閉じる",
"onlyStatisticsProxy": "プロキシのみ統計",
"onlyStatisticsProxyDesc": "有効化するとプロキシトラフィックのみ統計",
"deleteProfileTip": "現在のプロファイルを削除しますか?",
"pureBlackMode": "純黒モード",
"keepAliveIntervalDesc": "TCPキープアライブ間隔",
"entries": " エントリ",
"local": "ローカル",
"remote": "リモート",
"remoteBackupDesc": "WebDAVにデータをバックアップ",
"remoteRecoveryDesc": "WebDAVからデータを復元",
"localBackupDesc": "ローカルにデータをバックアップ",
"localRecoveryDesc": "ファイルからデータを復元",
"mode": "モード",
"time": "時間",
"source": "ソース",
"allApps": "全アプリ",
"onlyOtherApps": "サードパーティアプリのみ",
"action": "アクション",
"intelligentSelected": "インテリジェント選択",
"clipboardImport": "クリップボードからインポート",
"clipboardExport": "クリップボードにエクスポート",
"layout": "レイアウト",
"tight": "密",
"standard": "標準",
"loose": "疎",
"profilesSort": "プロファイルの並び替え",
"start": "開始",
"stop": "停止",
"appDesc": "アプリ関連設定の処理",
"vpnDesc": "VPN関連設定の変更",
"generalDesc": "一般設定の上書き",
"dnsDesc": "DNS関連設定の更新",
"key": "キー",
"value": "値",
"notEmpty": "空欄不可",
"hostsDesc": "ホストを追加",
"vpnTip": "変更はVPN再起動後に有効",
"vpnEnableDesc": "VpnService経由で全システムトラフィックをルーティング",
"options": "オプション",
"loopback": "ループバック解除ツール",
"loopbackDesc": "UWPループバック解除用",
"providers": "プロバイダー",
"proxyProviders": "プロキシプロバイダー",
"ruleProviders": "ルールプロバイダー",
"overrideDns": "DNS上書き",
"overrideDnsDesc": "有効化するとプロファイルのDNS設定を上書き",
"status": "ステータス",
"statusDesc": "無効時はシステムDNSを使用",
"preferH3Desc": "DOHのHTTP/3を優先使用",
"respectRules": "ルール尊重",
"respectRulesDesc": "DNS接続がルールに従うproxy-server-nameserverの設定が必要",
"dnsMode": "DNSモード",
"fakeipRange": "Fakeip範囲",
"fakeipFilter": "Fakeipフィルター",
"defaultNameserver": "デフォルトネームサーバー",
"defaultNameserverDesc": "DNSサーバーの解決用",
"nameserver": "ネームサーバー",
"nameserverDesc": "ドメイン解決用",
"useHosts": "ホストを使用",
"useSystemHosts": "システムホストを使用",
"nameserverPolicy": "ネームサーバーポリシー",
"nameserverPolicyDesc": "対応するネームサーバーポリシーを指定",
"proxyNameserver": "プロキシネームサーバー",
"proxyNameserverDesc": "プロキシノード解決用ドメイン",
"fallback": "フォールバック",
"fallbackDesc": "通常はオフショアDNSを使用",
"fallbackFilter": "フォールバックフィルター",
"geoipCode": "GeoIPコード",
"ipcidr": "IPCIDR",
"domain": "ドメイン",
"reset": "リセット",
"action_view": "表示/非表示",
"action_start": "開始/停止",
"action_mode": "モード切替",
"action_proxy": "システムプロキシ",
"action_tun": "TUN",
"disclaimer": "免責事項",
"disclaimerDesc": "本ソフトウェアは学習交流や科学研究などの非営利目的でのみ使用されます。商用利用は厳禁です。いかなる商用活動も本ソフトウェアとは無関係です。",
"agree": "同意",
"hotkeyManagement": "ホットキー管理",
"hotkeyManagementDesc": "キーボードでアプリを制御",
"pressKeyboard": "キーボードを押してください",
"inputCorrectHotkey": "正しいホットキーを入力",
"hotkeyConflict": "ホットキー競合",
"remove": "削除",
"noHotKey": "ホットキーなし",
"noNetwork": "ネットワークなし",
"ipv6InboundDesc": "IPv6インバウンドを許可",
"exportLogs": "ログをエクスポート",
"exportSuccess": "エクスポート成功",
"iconStyle": "アイコンスタイル",
"onlyIcon": "アイコンのみ",
"noIcon": "なし",
"stackMode": "スタックモード",
"network": "ネットワーク",
"networkDesc": "ネットワーク関連設定の変更",
"bypassDomain": "バイパスドメイン",
"bypassDomainDesc": "システムプロキシ有効時のみ適用",
"resetTip": "リセットを確定",
"regExp": "正規表現",
"icon": "アイコン",
"iconConfiguration": "アイコン設定",
"noData": "データなし",
"adminAutoLaunch": "管理者自動起動",
"adminAutoLaunchDesc": "管理者モードで起動",
"fontFamily": "フォントファミリー",
"systemFont": "システムフォント",
"toggle": "トグル",
"system": "システム",
"routeMode": "ルートモード",
"routeMode_bypassPrivate": "プライベートルートをバイパス",
"routeMode_config": "設定を使用",
"routeAddress": "ルートアドレス",
"routeAddressDesc": "ルートアドレスを設定",
"pleaseInputAdminPassword": "管理者パスワードを入力",
"copyEnvVar": "環境変数をコピー",
"memoryInfo": "メモリ情報",
"cancel": "キャンセル",
"fileIsUpdate": "ファイルが変更されました。保存しますか?",
"profileHasUpdate": "プロファイルが変更されました。自動更新を無効化しますか?",
"hasCacheChange": "変更をキャッシュしますか?",
"nullProxies": "プロキシなし",
"copySuccess": "コピー成功",
"copyLink": "リンクをコピー",
"exportFile": "ファイルをエクスポート",
"cacheCorrupt": "キャッシュが破損しています。クリアしますか?",
"detectionTip": "サードパーティAPIに依存参考値",
"listen": "リスン"
}

350
lib/l10n/arb/intl_ru.arb Normal file
View File

@@ -0,0 +1,350 @@
{
"rule": "Правило",
"global": "Глобальный",
"direct": "Прямой",
"dashboard": "Панель управления",
"proxies": "Прокси",
"profile": "Профиль",
"profiles": "Профили",
"tools": "Инструменты",
"logs": "Логи",
"logsDesc": "Записи захвата логов",
"resources": "Ресурсы",
"resourcesDesc": "Информация, связанная с внешними ресурсами",
"trafficUsage": "Использование трафика",
"coreInfo": "Информация о ядре",
"nullCoreInfoDesc": "Не удалось получить информацию о ядре",
"networkSpeed": "Скорость сети",
"outboundMode": "Режим исходящего трафика",
"networkDetection": "Обнаружение сети",
"upload": "Загрузка",
"download": "Скачивание",
"noProxy": "Нет прокси",
"noProxyDesc": "Пожалуйста, создайте профиль или добавьте действительный профиль",
"nullProfileDesc": "Нет профиля, пожалуйста, добавьте профиль",
"nullLogsDesc": "Нет логов",
"settings": "Настройки",
"language": "Язык",
"defaultText": "По умолчанию",
"more": "Еще",
"other": "Другое",
"about": "О программе",
"en": "Английский",
"ja": "Японский",
"ru": "Русский",
"zh_CN": "Упрощенный китайский",
"theme": "Тема",
"themeDesc": "Установить темный режим, настроить цвет",
"override": "Переопределить",
"overrideDesc": "Переопределить конфигурацию, связанную с прокси",
"allowLan": "Разрешить LAN",
"allowLanDesc": "Разрешить доступ к прокси через локальную сеть",
"tun": "TUN",
"tunDesc": "действительно только в режиме администратора",
"minimizeOnExit": "Свернуть при выходе",
"minimizeOnExitDesc": "Изменить стандартное событие выхода из системы",
"autoLaunch": "Автозапуск",
"autoLaunchDesc": "Следовать автозапуску системы",
"silentLaunch": "Тихий запуск",
"silentLaunchDesc": "Запуск в фоновом режиме",
"autoRun": "Автозапуск",
"autoRunDesc": "Автоматический запуск при открытии приложения",
"logcat": "Logcat",
"logcatDesc": "Отключение скроет запись логов",
"autoCheckUpdate": "Автопроверка обновлений",
"autoCheckUpdateDesc": "Автоматически проверять обновления при запуске приложения",
"accessControl": "Контроль доступа",
"accessControlDesc": "Настройка доступа приложений к прокси",
"application": "Приложение",
"applicationDesc": "Изменение настроек, связанных с приложением",
"edit": "Редактировать",
"confirm": "Подтвердить",
"update": "Обновить",
"add": "Добавить",
"save": "Сохранить",
"delete": "Удалить",
"years": "Лет",
"months": "Месяцев",
"hours": "Часов",
"days": "Дней",
"minutes": "Минут",
"seconds": "Секунд",
"ago": " назад",
"just": "Только что",
"qrcode": "QR-код",
"qrcodeDesc": "Сканируйте QR-код для получения профиля",
"url": "URL",
"urlDesc": "Получить профиль через URL",
"file": "Файл",
"fileDesc": "Прямая загрузка профиля",
"name": "Имя",
"profileNameNullValidationDesc": "Пожалуйста, введите имя профиля",
"profileUrlNullValidationDesc": "Пожалуйста, введите URL профиля",
"profileUrlInvalidValidationDesc": "Пожалуйста, введите действительный URL профиля",
"autoUpdate": "Автообновление",
"autoUpdateInterval": "Интервал автообновления (минуты)",
"profileAutoUpdateIntervalNullValidationDesc": "Пожалуйста, введите интервал времени для автообновления",
"profileAutoUpdateIntervalInvalidValidationDesc": "Пожалуйста, введите действительный формат интервала времени",
"themeMode": "Режим темы",
"themeColor": "Цвет темы",
"preview": "Предпросмотр",
"auto": "Авто",
"light": "Светлый",
"dark": "Темный",
"importFromURL": "Импорт из URL",
"submit": "Отправить",
"doYouWantToPass": "Вы хотите пропустить",
"create": "Создать",
"defaultSort": "Сортировка по умолчанию",
"delaySort": "Сортировка по задержке",
"nameSort": "Сортировка по имени",
"pleaseUploadFile": "Пожалуйста, загрузите файл",
"pleaseUploadValidQrcode": "Пожалуйста, загрузите действительный QR-код",
"blacklistMode": "Режим черного списка",
"whitelistMode": "Режим белого списка",
"filterSystemApp": "Фильтровать системные приложения",
"cancelFilterSystemApp": "Отменить фильтрацию системных приложений",
"selectAll": "Выбрать все",
"cancelSelectAll": "Отменить выбор всего",
"appAccessControl": "Контроль доступа приложений",
"accessControlAllowDesc": "Разрешить только выбранным приложениям доступ к VPN",
"accessControlNotAllowDesc": "Выбранные приложения будут исключены из VPN",
"selected": "Выбрано",
"unableToUpdateCurrentProfileDesc": "невозможно обновить текущий профиль",
"noMoreInfoDesc": "Нет дополнительной информации",
"profileParseErrorDesc": "ошибка разбора профиля",
"proxyPort": "Порт прокси",
"proxyPortDesc": "Установить порт прослушивания Clash",
"port": "Порт",
"logLevel": "Уровень логов",
"show": "Показать",
"exit": "Выход",
"systemProxy": "Системный прокси",
"project": "Проект",
"core": "Ядро",
"tabAnimation": "Анимация вкладок",
"tabAnimationDesc": "При включении домашняя вкладка добавит анимацию переключения",
"desc": "Многоплатформенный прокси-клиент на основе ClashMeta, простой и удобный в использовании, с открытым исходным кодом и без рекламы.",
"startVpn": "Запуск VPN...",
"stopVpn": "Остановка VPN...",
"discovery": "Обнаружена новая версия",
"compatible": "Режим совместимости",
"compatibleDesc": "Включение приведет к потере части функциональности приложения, но обеспечит полную поддержку Clash.",
"notSelectedTip": "Текущая группа прокси не может быть выбрана.",
"tip": "подсказка",
"backupAndRecovery": "Резервное копирование и восстановление",
"backupAndRecoveryDesc": "Синхронизация данных через WebDAV или файл",
"account": "Аккаунт",
"backup": "Резервное копирование",
"recovery": "Восстановление",
"recoveryProfiles": "Только восстановление профилей",
"recoveryAll": "Восстановить все данные",
"recoverySuccess": "Восстановление успешно",
"backupSuccess": "Резервное копирование успешно",
"noInfo": "Нет информации",
"pleaseBindWebDAV": "Пожалуйста, привяжите WebDAV",
"bind": "Привязать",
"connectivity": "Связь:",
"webDAVConfiguration": "Конфигурация WebDAV",
"address": "Адрес",
"addressHelp": "Адрес сервера WebDAV",
"addressTip": "Пожалуйста, введите действительный адрес WebDAV",
"password": "Пароль",
"passwordTip": "Пароль не может быть пустым",
"accountTip": "Аккаунт не может быть пустым",
"checkUpdate": "Проверить обновления",
"discoverNewVersion": "Обнаружена новая версия",
"checkUpdateError": "Текущее приложение уже является последней версией",
"goDownload": "Перейти к загрузке",
"unknown": "Неизвестно",
"geoData": "Геоданные",
"externalResources": "Внешние ресурсы",
"checking": "Проверка...",
"country": "Страна",
"checkError": "Ошибка проверки",
"search": "Поиск",
"allowBypass": "Разрешить приложениям обходить VPN",
"allowBypassDesc": "Некоторые приложения могут обходить VPN при включении",
"externalController": "Внешний контроллер",
"externalControllerDesc": "При включении ядро Clash можно контролировать на порту 9090",
"ipv6Desc": "При включении будет возможно получать IPv6 трафик",
"app": "Приложение",
"general": "Общие",
"vpnSystemProxyDesc": "Прикрепить HTTP-прокси к VpnService",
"systemProxyDesc": "Прикрепить HTTP-прокси к VpnService",
"unifiedDelay": "Унифицированная задержка",
"unifiedDelayDesc": "Убрать дополнительные задержки, такие как рукопожатие",
"tcpConcurrent": "TCP параллелизм",
"tcpConcurrentDesc": "Включение позволит использовать параллелизм TCP",
"geodataLoader": "Режим низкого потребления памяти для геоданных",
"geodataLoaderDesc": "Включение будет использовать загрузчик геоданных с низким потреблением памяти",
"requests": "Запросы",
"requestsDesc": "Просмотр последних записей запросов",
"findProcessMode": "Режим поиска процесса",
"findProcessModeDesc": "Есть риск сбоя после включения",
"init": "Инициализация",
"infiniteTime": "Долгосрочное действие",
"expirationTime": "Время истечения",
"connections": "Соединения",
"connectionsDesc": "Просмотр текущих данных о соединениях",
"nullRequestsDesc": "Нет запросов",
"nullConnectionsDesc": "Нет соединений",
"intranetIP": "Внутренний IP",
"view": "Просмотр",
"cut": "Вырезать",
"copy": "Копировать",
"paste": "Вставить",
"testUrl": "Тест URL",
"sync": "Синхронизация",
"exclude": "Скрыть из последних задач",
"excludeDesc": "Когда приложение находится в фоновом режиме, оно скрыто из последних задач",
"oneColumn": "Один столбец",
"twoColumns": "Два столбца",
"threeColumns": "Три столбца",
"fourColumns": "Четыре столбца",
"expand": "Стандартный",
"shrink": "Сжать",
"min": "Мин",
"tab": "Вкладка",
"list": "Список",
"delay": "Задержка",
"style": "Стиль",
"size": "Размер",
"sort": "Сортировка",
"columns": "Столбцы",
"proxiesSetting": "Настройка прокси",
"proxyGroup": "Группа прокси",
"go": "Перейти",
"externalLink": "Внешняя ссылка",
"otherContributors": "Другие участники",
"autoCloseConnections": "Автоматическое закрытие соединений",
"autoCloseConnectionsDesc": "Автоматически закрывать соединения после смены узла",
"onlyStatisticsProxy": "Только статистика прокси",
"onlyStatisticsProxyDesc": "При включении будет учитываться только трафик прокси",
"deleteProfileTip": "Вы уверены, что хотите удалить текущий профиль?",
"pureBlackMode": "Чисто черный режим",
"keepAliveIntervalDesc": "Интервал поддержания TCP-соединения",
"entries": " записей",
"local": "Локальный",
"remote": "Удаленный",
"remoteBackupDesc": "Резервное копирование локальных данных на WebDAV",
"remoteRecoveryDesc": "Восстановление данных с WebDAV",
"localBackupDesc": "Резервное копирование локальных данных на локальный диск",
"localRecoveryDesc": "Восстановление данных из файла",
"mode": "Режим",
"time": "Время",
"source": "Источник",
"allApps": "Все приложения",
"onlyOtherApps": "Только сторонние приложения",
"action": "Действие",
"intelligentSelected": "Интеллектуальный выбор",
"clipboardImport": "Импорт из буфера обмена",
"clipboardExport": "Экспорт в буфер обмена",
"layout": "Макет",
"tight": "Плотный",
"standard": "Стандартный",
"loose": "Свободный",
"profilesSort": "Сортировка профилей",
"start": "Старт",
"stop": "Стоп",
"appDesc": "Обработка настроек, связанных с приложением",
"vpnDesc": "Изменение настроек, связанных с VPN",
"generalDesc": "Переопределение общих настроек",
"dnsDesc": "Обновление настроек, связанных с DNS",
"key": "Ключ",
"value": "Значение",
"notEmpty": "Не может быть пустым",
"hostsDesc": "Добавить Hosts",
"vpnTip": "Изменения вступят в силу после перезапуска VPN",
"vpnEnableDesc": "Автоматически направляет весь системный трафик через VpnService",
"options": "Опции",
"loopback": "Инструмент разблокировки Loopback",
"loopbackDesc": "Используется для разблокировки Loopback UWP",
"providers": "Провайдеры",
"proxyProviders": "Провайдеры прокси",
"ruleProviders": "Провайдеры правил",
"overrideDns": "Переопределить DNS",
"overrideDnsDesc": "Включение переопределит настройки DNS в профиле",
"status": "Статус",
"statusDesc": "Системный DNS будет использоваться при выключении",
"preferH3Desc": "Приоритетное использование HTTP/3 для DOH",
"respectRules": "Соблюдение правил",
"respectRulesDesc": "DNS-соединение следует правилам, необходимо настроить proxy-server-nameserver",
"dnsMode": "Режим DNS",
"fakeipRange": "Диапазон Fakeip",
"fakeipFilter": "Фильтр Fakeip",
"defaultNameserver": "Сервер имен по умолчанию",
"defaultNameserverDesc": "Для разрешения DNS-сервера",
"nameserver": "Сервер имен",
"nameserverDesc": "Для разрешения домена",
"useHosts": "Использовать hosts",
"useSystemHosts": "Использовать системные hosts",
"nameserverPolicy": "Политика сервера имен",
"nameserverPolicyDesc": "Указать соответствующую политику сервера имен",
"proxyNameserver": "Прокси-сервер имен",
"proxyNameserverDesc": "Домен для разрешения прокси-узлов",
"fallback": "Резервный",
"fallbackDesc": "Обычно используется оффшорный DNS",
"fallbackFilter": "Фильтр резервного DNS",
"geoipCode": "Код Geoip",
"ipcidr": "IPCIDR",
"domain": "Домен",
"reset": "Сброс",
"action_view": "Показать/Скрыть",
"action_start": "Старт/Стоп",
"action_mode": "Переключить режим",
"action_proxy": "Системный прокси",
"action_tun": "TUN",
"disclaimer": "Отказ от ответственности",
"disclaimerDesc": "Это программное обеспечение используется только в некоммерческих целях, таких как учебные обмены и научные исследования. Запрещено использовать это программное обеспечение в коммерческих целях. Любая коммерческая деятельность, если таковая имеется, не имеет отношения к этому программному обеспечению.",
"agree": "Согласен",
"hotkeyManagement": "Управление горячими клавишами",
"hotkeyManagementDesc": "Использование клавиатуры для управления приложением",
"pressKeyboard": "Пожалуйста, нажмите клавишу.",
"inputCorrectHotkey": "Пожалуйста, введите правильную горячую клавишу",
"hotkeyConflict": "Конфликт горячих клавиш",
"remove": "Удалить",
"noHotKey": "Нет горячей клавиши",
"noNetwork": "Нет сети",
"ipv6InboundDesc": "Разрешить входящий IPv6",
"exportLogs": "Экспорт логов",
"exportSuccess": "Экспорт успешен",
"iconStyle": "Стиль иконки",
"onlyIcon": "Только иконка",
"noIcon": "Нет иконки",
"stackMode": "Режим стека",
"network": "Сеть",
"networkDesc": "Изменение настроек, связанных с сетью",
"bypassDomain": "Обход домена",
"bypassDomainDesc": "Действует только при включенном системном прокси",
"resetTip": "Убедитесь, что хотите сбросить",
"regExp": "Регулярное выражение",
"icon": "Иконка",
"iconConfiguration": "Конфигурация иконки",
"noData": "Нет данных",
"adminAutoLaunch": "Автозапуск с правами администратора",
"adminAutoLaunchDesc": "Запуск с правами администратора при загрузке системы",
"fontFamily": "Семейство шрифтов",
"systemFont": "Системный шрифт",
"toggle": "Переключить",
"system": "Система",
"routeMode": "Режим маршрутизации",
"routeMode_bypassPrivate": "Обход частных адресов маршрутизации",
"routeMode_config": "Использовать конфигурацию",
"routeAddress": "Адрес маршрутизации",
"routeAddressDesc": "Настройка адреса прослушивания маршрутизации",
"pleaseInputAdminPassword": "Пожалуйста, введите пароль администратора",
"copyEnvVar": "Копирование переменных окружения",
"memoryInfo": "Информация о памяти",
"cancel": "Отмена",
"fileIsUpdate": "Файл был изменен. Хотите сохранить изменения?",
"profileHasUpdate": "Профиль был изменен. Хотите отключить автообновление?",
"hasCacheChange": "Хотите сохранить изменения в кэше?",
"nullProxies": "Нет прокси",
"copySuccess": "Копирование успешно",
"copyLink": "Копировать ссылку",
"exportFile": "Экспорт файла",
"cacheCorrupt": "Кэш поврежден. Хотите очистить его?",
"detectionTip": "Опирается на сторонний API, только для справки",
"listen": "Слушать"
}

View File

@@ -30,6 +30,8 @@
"other": "其他",
"about": "关于",
"en": "英语",
"ja": "日语",
"ru": "俄语",
"zh_CN": "中文简体",
"theme": "主题",
"themeDesc": "设置深色模式,调整色彩",
@@ -220,7 +222,7 @@
"onlyStatisticsProxy": "仅统计代理",
"onlyStatisticsProxyDesc": "开启后,将只统计代理流量",
"deleteProfileTip": "确定要删除当前配置吗?",
"prueBlackMode": "纯黑模式",
"pureBlackMode": "纯黑模式",
"keepAliveIntervalDesc": "TCP保持活动间隔",
"entries": "个条目",
"local": "本地",
@@ -343,5 +345,6 @@
"copyLink": "复制链接",
"exportFile": "导出文件",
"cacheCorrupt": "缓存已损坏,是否清空?",
"detectionTip": "依赖第三方api仅供参考"
"detectionTip": "依赖第三方api仅供参考",
"listen": "监听"
}

View File

@@ -17,11 +17,15 @@ import 'package:intl/message_lookup_by_library.dart';
import 'package:intl/src/intl_helpers.dart';
import 'messages_en.dart' as messages_en;
import 'messages_ja.dart' as messages_ja;
import 'messages_ru.dart' as messages_ru;
import 'messages_zh_CN.dart' as messages_zh_cn;
typedef Future<dynamic> LibraryLoader();
Map<String, LibraryLoader> _deferredLibraries = {
'en': () => new SynchronousFuture(null),
'ja': () => new SynchronousFuture(null),
'ru': () => new SynchronousFuture(null),
'zh_CN': () => new SynchronousFuture(null),
};
@@ -29,6 +33,10 @@ MessageLookupByLibrary? _findExact(String localeName) {
switch (localeName) {
case 'en':
return messages_en.messages;
case 'ja':
return messages_ja.messages;
case 'ru':
return messages_ru.messages;
case 'zh_CN':
return messages_zh_cn.messages;
default:

View File

@@ -89,7 +89,7 @@ class MessageLookup extends MessageLookupByLibrary {
"Auto check for updates when the app starts",
),
"autoCloseConnections": MessageLookupByLibrary.simpleMessage(
"Auto lose connections",
"Auto close connections",
),
"autoCloseConnectionsDesc": MessageLookupByLibrary.simpleMessage(
"Auto close connections after change node",
@@ -296,6 +296,7 @@ class MessageLookup extends MessageLookupByLibrary {
"ipv6InboundDesc": MessageLookupByLibrary.simpleMessage(
"Allow IPv6 inbound",
),
"ja": MessageLookupByLibrary.simpleMessage("Japanese"),
"just": MessageLookupByLibrary.simpleMessage("Just"),
"keepAliveIntervalDesc": MessageLookupByLibrary.simpleMessage(
"Tcp keep alive interval",
@@ -305,6 +306,7 @@ class MessageLookup extends MessageLookupByLibrary {
"layout": MessageLookupByLibrary.simpleMessage("Layout"),
"light": MessageLookupByLibrary.simpleMessage("Light"),
"list": MessageLookupByLibrary.simpleMessage("List"),
"listen": MessageLookupByLibrary.simpleMessage("Listen"),
"local": MessageLookupByLibrary.simpleMessage("Local"),
"localBackupDesc": MessageLookupByLibrary.simpleMessage(
"Backup local data to local",
@@ -470,7 +472,7 @@ class MessageLookup extends MessageLookupByLibrary {
"Set the Clash listening port",
),
"proxyProviders": MessageLookupByLibrary.simpleMessage("Proxy providers"),
"prueBlackMode": MessageLookupByLibrary.simpleMessage("Prue black mode"),
"pureBlackMode": MessageLookupByLibrary.simpleMessage("Pure black mode"),
"qrcode": MessageLookupByLibrary.simpleMessage("QR code"),
"qrcodeDesc": MessageLookupByLibrary.simpleMessage(
"Scan QR code to obtain profile",
@@ -513,6 +515,7 @@ class MessageLookup extends MessageLookupByLibrary {
"Bypass private route address",
),
"routeMode_config": MessageLookupByLibrary.simpleMessage("Use config"),
"ru": MessageLookupByLibrary.simpleMessage("Russian"),
"rule": MessageLookupByLibrary.simpleMessage("Rule"),
"ruleProviders": MessageLookupByLibrary.simpleMessage("Rule providers"),
"save": MessageLookupByLibrary.simpleMessage("Save"),

View File

@@ -0,0 +1,472 @@
// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
// This is a library that provides messages for a ja locale. All the
// messages from the main program should be duplicated here with the same
// function name.
// Ignore issues from commonly used lints in this file.
// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new
// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering
// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases
// ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes
// ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes
import 'package:intl/intl.dart';
import 'package:intl/message_lookup_by_library.dart';
final messages = new MessageLookup();
typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup extends MessageLookupByLibrary {
String get localeName => 'ja';
final messages = _notInlinedMessages(_notInlinedMessages);
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
"about": MessageLookupByLibrary.simpleMessage("について"),
"accessControl": MessageLookupByLibrary.simpleMessage("アクセス制御"),
"accessControlAllowDesc": MessageLookupByLibrary.simpleMessage(
"選択したアプリのみVPNを許可",
),
"accessControlDesc": MessageLookupByLibrary.simpleMessage(
"アプリケーションのプロキシアクセスを設定",
),
"accessControlNotAllowDesc": MessageLookupByLibrary.simpleMessage(
"選択したアプリをVPNから除外",
),
"account": MessageLookupByLibrary.simpleMessage("アカウント"),
"accountTip": MessageLookupByLibrary.simpleMessage("アカウントは必須です"),
"action": MessageLookupByLibrary.simpleMessage("アクション"),
"action_mode": MessageLookupByLibrary.simpleMessage("モード切替"),
"action_proxy": MessageLookupByLibrary.simpleMessage("システムプロキシ"),
"action_start": MessageLookupByLibrary.simpleMessage("開始/停止"),
"action_tun": MessageLookupByLibrary.simpleMessage("TUN"),
"action_view": MessageLookupByLibrary.simpleMessage("表示/非表示"),
"add": MessageLookupByLibrary.simpleMessage("追加"),
"address": MessageLookupByLibrary.simpleMessage("アドレス"),
"addressHelp": MessageLookupByLibrary.simpleMessage("WebDAVサーバーアドレス"),
"addressTip": MessageLookupByLibrary.simpleMessage("有効なWebDAVアドレスを入力"),
"adminAutoLaunch": MessageLookupByLibrary.simpleMessage("管理者自動起動"),
"adminAutoLaunchDesc": MessageLookupByLibrary.simpleMessage("管理者モードで起動"),
"ago": MessageLookupByLibrary.simpleMessage(""),
"agree": MessageLookupByLibrary.simpleMessage("同意"),
"allApps": MessageLookupByLibrary.simpleMessage("全アプリ"),
"allowBypass": MessageLookupByLibrary.simpleMessage("アプリがVPNをバイパスすることを許可"),
"allowBypassDesc": MessageLookupByLibrary.simpleMessage(
"有効化すると一部アプリがVPNをバイパス",
),
"allowLan": MessageLookupByLibrary.simpleMessage("LANを許可"),
"allowLanDesc": MessageLookupByLibrary.simpleMessage("LAN経由でのプロキシアクセスを許可"),
"app": MessageLookupByLibrary.simpleMessage("アプリ"),
"appAccessControl": MessageLookupByLibrary.simpleMessage("アプリアクセス制御"),
"appDesc": MessageLookupByLibrary.simpleMessage("アプリ関連設定の処理"),
"application": MessageLookupByLibrary.simpleMessage("アプリケーション"),
"applicationDesc": MessageLookupByLibrary.simpleMessage("アプリ関連設定を変更"),
"auto": MessageLookupByLibrary.simpleMessage("自動"),
"autoCheckUpdate": MessageLookupByLibrary.simpleMessage("自動更新チェック"),
"autoCheckUpdateDesc": MessageLookupByLibrary.simpleMessage(
"起動時に更新を自動チェック",
),
"autoCloseConnections": MessageLookupByLibrary.simpleMessage("接続を自動閉じる"),
"autoCloseConnectionsDesc": MessageLookupByLibrary.simpleMessage(
"ノード変更後に接続を自動閉じる",
),
"autoLaunch": MessageLookupByLibrary.simpleMessage("自動起動"),
"autoLaunchDesc": MessageLookupByLibrary.simpleMessage("システムの自動起動に従う"),
"autoRun": MessageLookupByLibrary.simpleMessage("自動実行"),
"autoRunDesc": MessageLookupByLibrary.simpleMessage("アプリ起動時に自動実行"),
"autoUpdate": MessageLookupByLibrary.simpleMessage("自動更新"),
"autoUpdateInterval": MessageLookupByLibrary.simpleMessage("自動更新間隔(分)"),
"backup": MessageLookupByLibrary.simpleMessage("バックアップ"),
"backupAndRecovery": MessageLookupByLibrary.simpleMessage("バックアップと復元"),
"backupAndRecoveryDesc": MessageLookupByLibrary.simpleMessage(
"WebDAVまたはファイルでデータを同期",
),
"backupSuccess": MessageLookupByLibrary.simpleMessage("バックアップ成功"),
"bind": MessageLookupByLibrary.simpleMessage("バインド"),
"blacklistMode": MessageLookupByLibrary.simpleMessage("ブラックリストモード"),
"bypassDomain": MessageLookupByLibrary.simpleMessage("バイパスドメイン"),
"bypassDomainDesc": MessageLookupByLibrary.simpleMessage("システムプロキシ有効時のみ適用"),
"cacheCorrupt": MessageLookupByLibrary.simpleMessage(
"キャッシュが破損しています。クリアしますか?",
),
"cancel": MessageLookupByLibrary.simpleMessage("キャンセル"),
"cancelFilterSystemApp": MessageLookupByLibrary.simpleMessage(
"システムアプリの除外を解除",
),
"cancelSelectAll": MessageLookupByLibrary.simpleMessage("全選択解除"),
"checkError": MessageLookupByLibrary.simpleMessage("確認エラー"),
"checkUpdate": MessageLookupByLibrary.simpleMessage("更新を確認"),
"checkUpdateError": MessageLookupByLibrary.simpleMessage("アプリは最新版です"),
"checking": MessageLookupByLibrary.simpleMessage("確認中..."),
"clipboardExport": MessageLookupByLibrary.simpleMessage("クリップボードにエクスポート"),
"clipboardImport": MessageLookupByLibrary.simpleMessage("クリップボードからインポート"),
"columns": MessageLookupByLibrary.simpleMessage(""),
"compatible": MessageLookupByLibrary.simpleMessage("互換モード"),
"compatibleDesc": MessageLookupByLibrary.simpleMessage(
"有効化すると一部機能を失いますが、Clashの完全サポートを獲得",
),
"confirm": MessageLookupByLibrary.simpleMessage("確認"),
"connections": MessageLookupByLibrary.simpleMessage("接続"),
"connectionsDesc": MessageLookupByLibrary.simpleMessage("現在の接続データを表示"),
"connectivity": MessageLookupByLibrary.simpleMessage("接続性:"),
"copy": MessageLookupByLibrary.simpleMessage("コピー"),
"copyEnvVar": MessageLookupByLibrary.simpleMessage("環境変数をコピー"),
"copyLink": MessageLookupByLibrary.simpleMessage("リンクをコピー"),
"copySuccess": MessageLookupByLibrary.simpleMessage("コピー成功"),
"core": MessageLookupByLibrary.simpleMessage("コア"),
"coreInfo": MessageLookupByLibrary.simpleMessage("コア情報"),
"country": MessageLookupByLibrary.simpleMessage(""),
"create": MessageLookupByLibrary.simpleMessage("作成"),
"cut": MessageLookupByLibrary.simpleMessage("切り取り"),
"dark": MessageLookupByLibrary.simpleMessage("ダーク"),
"dashboard": MessageLookupByLibrary.simpleMessage("ダッシュボード"),
"days": MessageLookupByLibrary.simpleMessage(""),
"defaultNameserver": MessageLookupByLibrary.simpleMessage("デフォルトネームサーバー"),
"defaultNameserverDesc": MessageLookupByLibrary.simpleMessage(
"DNSサーバーの解決用",
),
"defaultSort": MessageLookupByLibrary.simpleMessage("デフォルト順"),
"defaultText": MessageLookupByLibrary.simpleMessage("デフォルト"),
"delay": MessageLookupByLibrary.simpleMessage("遅延"),
"delaySort": MessageLookupByLibrary.simpleMessage("遅延順"),
"delete": MessageLookupByLibrary.simpleMessage("削除"),
"deleteProfileTip": MessageLookupByLibrary.simpleMessage(
"現在のプロファイルを削除しますか?",
),
"desc": MessageLookupByLibrary.simpleMessage(
"ClashMetaベースのマルチプラットフォームプロキシクライアント。シンプルで使いやすく、オープンソースで広告なし。",
),
"detectionTip": MessageLookupByLibrary.simpleMessage("サードパーティAPIに依存参考値"),
"direct": MessageLookupByLibrary.simpleMessage("ダイレクト"),
"disclaimer": MessageLookupByLibrary.simpleMessage("免責事項"),
"disclaimerDesc": MessageLookupByLibrary.simpleMessage(
"本ソフトウェアは学習交流や科学研究などの非営利目的でのみ使用されます。商用利用は厳禁です。いかなる商用活動も本ソフトウェアとは無関係です。",
),
"discoverNewVersion": MessageLookupByLibrary.simpleMessage("新バージョンを発見"),
"discovery": MessageLookupByLibrary.simpleMessage("新しいバージョンを発見"),
"dnsDesc": MessageLookupByLibrary.simpleMessage("DNS関連設定の更新"),
"dnsMode": MessageLookupByLibrary.simpleMessage("DNSモード"),
"doYouWantToPass": MessageLookupByLibrary.simpleMessage("通過させますか?"),
"domain": MessageLookupByLibrary.simpleMessage("ドメイン"),
"download": MessageLookupByLibrary.simpleMessage("ダウンロード"),
"edit": MessageLookupByLibrary.simpleMessage("編集"),
"en": MessageLookupByLibrary.simpleMessage("英語"),
"entries": MessageLookupByLibrary.simpleMessage(" エントリ"),
"exclude": MessageLookupByLibrary.simpleMessage("最近のタスクから非表示"),
"excludeDesc": MessageLookupByLibrary.simpleMessage(
"アプリがバックグラウンド時に最近のタスクから非表示",
),
"exit": MessageLookupByLibrary.simpleMessage("終了"),
"expand": MessageLookupByLibrary.simpleMessage("標準"),
"expirationTime": MessageLookupByLibrary.simpleMessage("有効期限"),
"exportFile": MessageLookupByLibrary.simpleMessage("ファイルをエクスポート"),
"exportLogs": MessageLookupByLibrary.simpleMessage("ログをエクスポート"),
"exportSuccess": MessageLookupByLibrary.simpleMessage("エクスポート成功"),
"externalController": MessageLookupByLibrary.simpleMessage("外部コントローラー"),
"externalControllerDesc": MessageLookupByLibrary.simpleMessage(
"有効化するとClashコアをポート9090で制御可能",
),
"externalLink": MessageLookupByLibrary.simpleMessage("外部リンク"),
"externalResources": MessageLookupByLibrary.simpleMessage("外部リソース"),
"fakeipFilter": MessageLookupByLibrary.simpleMessage("Fakeipフィルター"),
"fakeipRange": MessageLookupByLibrary.simpleMessage("Fakeip範囲"),
"fallback": MessageLookupByLibrary.simpleMessage("フォールバック"),
"fallbackDesc": MessageLookupByLibrary.simpleMessage("通常はオフショアDNSを使用"),
"fallbackFilter": MessageLookupByLibrary.simpleMessage("フォールバックフィルター"),
"file": MessageLookupByLibrary.simpleMessage("ファイル"),
"fileDesc": MessageLookupByLibrary.simpleMessage("プロファイルを直接アップロード"),
"fileIsUpdate": MessageLookupByLibrary.simpleMessage(
"ファイルが変更されました。保存しますか?",
),
"filterSystemApp": MessageLookupByLibrary.simpleMessage("システムアプリを除外"),
"findProcessMode": MessageLookupByLibrary.simpleMessage("プロセス検出"),
"findProcessModeDesc": MessageLookupByLibrary.simpleMessage(
"有効化するとフラッシュバックのリスクあり",
),
"fontFamily": MessageLookupByLibrary.simpleMessage("フォントファミリー"),
"fourColumns": MessageLookupByLibrary.simpleMessage("4列"),
"general": MessageLookupByLibrary.simpleMessage("一般"),
"generalDesc": MessageLookupByLibrary.simpleMessage("一般設定の上書き"),
"geoData": MessageLookupByLibrary.simpleMessage("地域データ"),
"geodataLoader": MessageLookupByLibrary.simpleMessage("Geo低メモリモード"),
"geodataLoaderDesc": MessageLookupByLibrary.simpleMessage(
"有効化するとGeo低メモリローダーを使用",
),
"geoipCode": MessageLookupByLibrary.simpleMessage("GeoIPコード"),
"global": MessageLookupByLibrary.simpleMessage("グローバル"),
"go": MessageLookupByLibrary.simpleMessage("移動"),
"goDownload": MessageLookupByLibrary.simpleMessage("ダウンロードへ"),
"hasCacheChange": MessageLookupByLibrary.simpleMessage("変更をキャッシュしますか?"),
"hostsDesc": MessageLookupByLibrary.simpleMessage("ホストを追加"),
"hotkeyConflict": MessageLookupByLibrary.simpleMessage("ホットキー競合"),
"hotkeyManagement": MessageLookupByLibrary.simpleMessage("ホットキー管理"),
"hotkeyManagementDesc": MessageLookupByLibrary.simpleMessage(
"キーボードでアプリを制御",
),
"hours": MessageLookupByLibrary.simpleMessage("時間"),
"icon": MessageLookupByLibrary.simpleMessage("アイコン"),
"iconConfiguration": MessageLookupByLibrary.simpleMessage("アイコン設定"),
"iconStyle": MessageLookupByLibrary.simpleMessage("アイコンスタイル"),
"importFromURL": MessageLookupByLibrary.simpleMessage("URLからインポート"),
"infiniteTime": MessageLookupByLibrary.simpleMessage("長期有効"),
"init": MessageLookupByLibrary.simpleMessage("初期化"),
"inputCorrectHotkey": MessageLookupByLibrary.simpleMessage("正しいホットキーを入力"),
"intelligentSelected": MessageLookupByLibrary.simpleMessage("インテリジェント選択"),
"intranetIP": MessageLookupByLibrary.simpleMessage("イントラネットIP"),
"ipcidr": MessageLookupByLibrary.simpleMessage("IPCIDR"),
"ipv6Desc": MessageLookupByLibrary.simpleMessage("有効化するとIPv6トラフィックを受信可能"),
"ipv6InboundDesc": MessageLookupByLibrary.simpleMessage("IPv6インバウンドを許可"),
"ja": MessageLookupByLibrary.simpleMessage("日本語"),
"just": MessageLookupByLibrary.simpleMessage("たった今"),
"keepAliveIntervalDesc": MessageLookupByLibrary.simpleMessage(
"TCPキープアライブ間隔",
),
"key": MessageLookupByLibrary.simpleMessage("キー"),
"language": MessageLookupByLibrary.simpleMessage("言語"),
"layout": MessageLookupByLibrary.simpleMessage("レイアウト"),
"light": MessageLookupByLibrary.simpleMessage("ライト"),
"list": MessageLookupByLibrary.simpleMessage("リスト"),
"listen": MessageLookupByLibrary.simpleMessage("リスン"),
"local": MessageLookupByLibrary.simpleMessage("ローカル"),
"localBackupDesc": MessageLookupByLibrary.simpleMessage("ローカルにデータをバックアップ"),
"localRecoveryDesc": MessageLookupByLibrary.simpleMessage("ファイルからデータを復元"),
"logLevel": MessageLookupByLibrary.simpleMessage("ログレベル"),
"logcat": MessageLookupByLibrary.simpleMessage("ログキャット"),
"logcatDesc": MessageLookupByLibrary.simpleMessage("無効化するとログエントリを非表示"),
"logs": MessageLookupByLibrary.simpleMessage("ログ"),
"logsDesc": MessageLookupByLibrary.simpleMessage("ログキャプチャ記録"),
"loopback": MessageLookupByLibrary.simpleMessage("ループバック解除ツール"),
"loopbackDesc": MessageLookupByLibrary.simpleMessage("UWPループバック解除用"),
"loose": MessageLookupByLibrary.simpleMessage(""),
"memoryInfo": MessageLookupByLibrary.simpleMessage("メモリ情報"),
"min": MessageLookupByLibrary.simpleMessage("最小化"),
"minimizeOnExit": MessageLookupByLibrary.simpleMessage("終了時に最小化"),
"minimizeOnExitDesc": MessageLookupByLibrary.simpleMessage(
"システムの終了イベントを変更",
),
"minutes": MessageLookupByLibrary.simpleMessage(""),
"mode": MessageLookupByLibrary.simpleMessage("モード"),
"months": MessageLookupByLibrary.simpleMessage(""),
"more": MessageLookupByLibrary.simpleMessage("詳細"),
"name": MessageLookupByLibrary.simpleMessage("名前"),
"nameSort": MessageLookupByLibrary.simpleMessage("名前順"),
"nameserver": MessageLookupByLibrary.simpleMessage("ネームサーバー"),
"nameserverDesc": MessageLookupByLibrary.simpleMessage("ドメイン解決用"),
"nameserverPolicy": MessageLookupByLibrary.simpleMessage("ネームサーバーポリシー"),
"nameserverPolicyDesc": MessageLookupByLibrary.simpleMessage(
"対応するネームサーバーポリシーを指定",
),
"network": MessageLookupByLibrary.simpleMessage("ネットワーク"),
"networkDesc": MessageLookupByLibrary.simpleMessage("ネットワーク関連設定の変更"),
"networkDetection": MessageLookupByLibrary.simpleMessage("ネットワーク検出"),
"networkSpeed": MessageLookupByLibrary.simpleMessage("ネットワーク速度"),
"noData": MessageLookupByLibrary.simpleMessage("データなし"),
"noHotKey": MessageLookupByLibrary.simpleMessage("ホットキーなし"),
"noIcon": MessageLookupByLibrary.simpleMessage("なし"),
"noInfo": MessageLookupByLibrary.simpleMessage("情報なし"),
"noMoreInfoDesc": MessageLookupByLibrary.simpleMessage("追加情報なし"),
"noNetwork": MessageLookupByLibrary.simpleMessage("ネットワークなし"),
"noProxy": MessageLookupByLibrary.simpleMessage("プロキシなし"),
"noProxyDesc": MessageLookupByLibrary.simpleMessage(
"プロファイルを作成するか、有効なプロファイルを追加してください",
),
"notEmpty": MessageLookupByLibrary.simpleMessage("空欄不可"),
"notSelectedTip": MessageLookupByLibrary.simpleMessage(
"現在のプロキシグループは選択できません",
),
"nullConnectionsDesc": MessageLookupByLibrary.simpleMessage("接続なし"),
"nullCoreInfoDesc": MessageLookupByLibrary.simpleMessage("コア情報を取得できません"),
"nullLogsDesc": MessageLookupByLibrary.simpleMessage("ログがありません"),
"nullProfileDesc": MessageLookupByLibrary.simpleMessage(
"プロファイルがありません。追加してください",
),
"nullProxies": MessageLookupByLibrary.simpleMessage("プロキシなし"),
"nullRequestsDesc": MessageLookupByLibrary.simpleMessage("リクエストなし"),
"oneColumn": MessageLookupByLibrary.simpleMessage("1列"),
"onlyIcon": MessageLookupByLibrary.simpleMessage("アイコンのみ"),
"onlyOtherApps": MessageLookupByLibrary.simpleMessage("サードパーティアプリのみ"),
"onlyStatisticsProxy": MessageLookupByLibrary.simpleMessage("プロキシのみ統計"),
"onlyStatisticsProxyDesc": MessageLookupByLibrary.simpleMessage(
"有効化するとプロキシトラフィックのみ統計",
),
"options": MessageLookupByLibrary.simpleMessage("オプション"),
"other": MessageLookupByLibrary.simpleMessage("その他"),
"otherContributors": MessageLookupByLibrary.simpleMessage("その他の貢献者"),
"outboundMode": MessageLookupByLibrary.simpleMessage("アウトバウンドモード"),
"override": MessageLookupByLibrary.simpleMessage("上書き"),
"overrideDesc": MessageLookupByLibrary.simpleMessage("プロキシ関連設定を上書き"),
"overrideDns": MessageLookupByLibrary.simpleMessage("DNS上書き"),
"overrideDnsDesc": MessageLookupByLibrary.simpleMessage(
"有効化するとプロファイルのDNS設定を上書き",
),
"password": MessageLookupByLibrary.simpleMessage("パスワード"),
"passwordTip": MessageLookupByLibrary.simpleMessage("パスワードは必須です"),
"paste": MessageLookupByLibrary.simpleMessage("貼り付け"),
"pleaseBindWebDAV": MessageLookupByLibrary.simpleMessage(
"WebDAVをバインドしてください",
),
"pleaseInputAdminPassword": MessageLookupByLibrary.simpleMessage(
"管理者パスワードを入力",
),
"pleaseUploadFile": MessageLookupByLibrary.simpleMessage(
"ファイルをアップロードしてください",
),
"pleaseUploadValidQrcode": MessageLookupByLibrary.simpleMessage(
"有効なQRコードをアップロードしてください",
),
"port": MessageLookupByLibrary.simpleMessage("ポート"),
"preferH3Desc": MessageLookupByLibrary.simpleMessage("DOHのHTTP/3を優先使用"),
"pressKeyboard": MessageLookupByLibrary.simpleMessage("キーボードを押してください"),
"preview": MessageLookupByLibrary.simpleMessage("プレビュー"),
"profile": MessageLookupByLibrary.simpleMessage("プロファイル"),
"profileAutoUpdateIntervalInvalidValidationDesc":
MessageLookupByLibrary.simpleMessage("有効な間隔形式を入力してください"),
"profileAutoUpdateIntervalNullValidationDesc":
MessageLookupByLibrary.simpleMessage("自動更新間隔を入力してください"),
"profileHasUpdate": MessageLookupByLibrary.simpleMessage(
"プロファイルが変更されました。自動更新を無効化しますか?",
),
"profileNameNullValidationDesc": MessageLookupByLibrary.simpleMessage(
"プロファイル名を入力してください",
),
"profileParseErrorDesc": MessageLookupByLibrary.simpleMessage(
"プロファイル解析エラー",
),
"profileUrlInvalidValidationDesc": MessageLookupByLibrary.simpleMessage(
"有効なプロファイルURLを入力してください",
),
"profileUrlNullValidationDesc": MessageLookupByLibrary.simpleMessage(
"プロファイルURLを入力してください",
),
"profiles": MessageLookupByLibrary.simpleMessage("プロファイル一覧"),
"profilesSort": MessageLookupByLibrary.simpleMessage("プロファイルの並び替え"),
"project": MessageLookupByLibrary.simpleMessage("プロジェクト"),
"providers": MessageLookupByLibrary.simpleMessage("プロバイダー"),
"proxies": MessageLookupByLibrary.simpleMessage("プロキシ"),
"proxiesSetting": MessageLookupByLibrary.simpleMessage("プロキシ設定"),
"proxyGroup": MessageLookupByLibrary.simpleMessage("プロキシグループ"),
"proxyNameserver": MessageLookupByLibrary.simpleMessage("プロキシネームサーバー"),
"proxyNameserverDesc": MessageLookupByLibrary.simpleMessage(
"プロキシノード解決用ドメイン",
),
"proxyPort": MessageLookupByLibrary.simpleMessage("プロキシポート"),
"proxyPortDesc": MessageLookupByLibrary.simpleMessage("Clashのリスニングポートを設定"),
"proxyProviders": MessageLookupByLibrary.simpleMessage("プロキシプロバイダー"),
"pureBlackMode": MessageLookupByLibrary.simpleMessage("純黒モード"),
"qrcode": MessageLookupByLibrary.simpleMessage("QRコード"),
"qrcodeDesc": MessageLookupByLibrary.simpleMessage("QRコードをスキャンしてプロファイルを取得"),
"recovery": MessageLookupByLibrary.simpleMessage("復元"),
"recoveryAll": MessageLookupByLibrary.simpleMessage("全データ復元"),
"recoveryProfiles": MessageLookupByLibrary.simpleMessage("プロファイルのみ復元"),
"recoverySuccess": MessageLookupByLibrary.simpleMessage("復元成功"),
"regExp": MessageLookupByLibrary.simpleMessage("正規表現"),
"remote": MessageLookupByLibrary.simpleMessage("リモート"),
"remoteBackupDesc": MessageLookupByLibrary.simpleMessage(
"WebDAVにデータをバックアップ",
),
"remoteRecoveryDesc": MessageLookupByLibrary.simpleMessage(
"WebDAVからデータを復元",
),
"remove": MessageLookupByLibrary.simpleMessage("削除"),
"requests": MessageLookupByLibrary.simpleMessage("リクエスト"),
"requestsDesc": MessageLookupByLibrary.simpleMessage("最近のリクエスト記録を表示"),
"reset": MessageLookupByLibrary.simpleMessage("リセット"),
"resetTip": MessageLookupByLibrary.simpleMessage("リセットを確定"),
"resources": MessageLookupByLibrary.simpleMessage("リソース"),
"resourcesDesc": MessageLookupByLibrary.simpleMessage("外部リソース関連情報"),
"respectRules": MessageLookupByLibrary.simpleMessage("ルール尊重"),
"respectRulesDesc": MessageLookupByLibrary.simpleMessage(
"DNS接続がルールに従うproxy-server-nameserverの設定が必要",
),
"routeAddress": MessageLookupByLibrary.simpleMessage("ルートアドレス"),
"routeAddressDesc": MessageLookupByLibrary.simpleMessage("ルートアドレスを設定"),
"routeMode": MessageLookupByLibrary.simpleMessage("ルートモード"),
"routeMode_bypassPrivate": MessageLookupByLibrary.simpleMessage(
"プライベートルートをバイパス",
),
"routeMode_config": MessageLookupByLibrary.simpleMessage("設定を使用"),
"ru": MessageLookupByLibrary.simpleMessage("ロシア語"),
"rule": MessageLookupByLibrary.simpleMessage("ルール"),
"ruleProviders": MessageLookupByLibrary.simpleMessage("ルールプロバイダー"),
"save": MessageLookupByLibrary.simpleMessage("保存"),
"search": MessageLookupByLibrary.simpleMessage("検索"),
"seconds": MessageLookupByLibrary.simpleMessage(""),
"selectAll": MessageLookupByLibrary.simpleMessage("すべて選択"),
"selected": MessageLookupByLibrary.simpleMessage("選択済み"),
"settings": MessageLookupByLibrary.simpleMessage("設定"),
"show": MessageLookupByLibrary.simpleMessage("表示"),
"shrink": MessageLookupByLibrary.simpleMessage("縮小"),
"silentLaunch": MessageLookupByLibrary.simpleMessage("バックグラウンド起動"),
"silentLaunchDesc": MessageLookupByLibrary.simpleMessage("バックグラウンドで起動"),
"size": MessageLookupByLibrary.simpleMessage("サイズ"),
"sort": MessageLookupByLibrary.simpleMessage("並び替え"),
"source": MessageLookupByLibrary.simpleMessage("ソース"),
"stackMode": MessageLookupByLibrary.simpleMessage("スタックモード"),
"standard": MessageLookupByLibrary.simpleMessage("標準"),
"start": MessageLookupByLibrary.simpleMessage("開始"),
"startVpn": MessageLookupByLibrary.simpleMessage("VPNを開始中..."),
"status": MessageLookupByLibrary.simpleMessage("ステータス"),
"statusDesc": MessageLookupByLibrary.simpleMessage("無効時はシステムDNSを使用"),
"stop": MessageLookupByLibrary.simpleMessage("停止"),
"stopVpn": MessageLookupByLibrary.simpleMessage("VPNを停止中..."),
"style": MessageLookupByLibrary.simpleMessage("スタイル"),
"submit": MessageLookupByLibrary.simpleMessage("送信"),
"sync": MessageLookupByLibrary.simpleMessage("同期"),
"system": MessageLookupByLibrary.simpleMessage("システム"),
"systemFont": MessageLookupByLibrary.simpleMessage("システムフォント"),
"systemProxy": MessageLookupByLibrary.simpleMessage("システムプロキシ"),
"systemProxyDesc": MessageLookupByLibrary.simpleMessage(
"HTTPプロキシをVpnServiceに接続",
),
"tab": MessageLookupByLibrary.simpleMessage("タブ"),
"tabAnimation": MessageLookupByLibrary.simpleMessage("タブアニメーション"),
"tabAnimationDesc": MessageLookupByLibrary.simpleMessage(
"有効化するとホームタブに切り替えアニメーションを追加",
),
"tcpConcurrent": MessageLookupByLibrary.simpleMessage("TCP並列処理"),
"tcpConcurrentDesc": MessageLookupByLibrary.simpleMessage("TCP並列処理を許可"),
"testUrl": MessageLookupByLibrary.simpleMessage("URLテスト"),
"theme": MessageLookupByLibrary.simpleMessage("テーマ"),
"themeColor": MessageLookupByLibrary.simpleMessage("テーマカラー"),
"themeDesc": MessageLookupByLibrary.simpleMessage("ダークモードの設定、色の調整"),
"themeMode": MessageLookupByLibrary.simpleMessage("テーマモード"),
"threeColumns": MessageLookupByLibrary.simpleMessage("3列"),
"tight": MessageLookupByLibrary.simpleMessage(""),
"time": MessageLookupByLibrary.simpleMessage("時間"),
"tip": MessageLookupByLibrary.simpleMessage("ヒント"),
"toggle": MessageLookupByLibrary.simpleMessage("トグル"),
"tools": MessageLookupByLibrary.simpleMessage("ツール"),
"trafficUsage": MessageLookupByLibrary.simpleMessage("トラフィック使用量"),
"tun": MessageLookupByLibrary.simpleMessage("TUN"),
"tunDesc": MessageLookupByLibrary.simpleMessage("管理者モードでのみ有効"),
"twoColumns": MessageLookupByLibrary.simpleMessage("2列"),
"unableToUpdateCurrentProfileDesc": MessageLookupByLibrary.simpleMessage(
"現在のプロファイルを更新できません",
),
"unifiedDelay": MessageLookupByLibrary.simpleMessage("統一遅延"),
"unifiedDelayDesc": MessageLookupByLibrary.simpleMessage(
"ハンドシェイクなどの余分な遅延を削除",
),
"unknown": MessageLookupByLibrary.simpleMessage("不明"),
"update": MessageLookupByLibrary.simpleMessage("更新"),
"upload": MessageLookupByLibrary.simpleMessage("アップロード"),
"url": MessageLookupByLibrary.simpleMessage("URL"),
"urlDesc": MessageLookupByLibrary.simpleMessage("URL経由でプロファイルを取得"),
"useHosts": MessageLookupByLibrary.simpleMessage("ホストを使用"),
"useSystemHosts": MessageLookupByLibrary.simpleMessage("システムホストを使用"),
"value": MessageLookupByLibrary.simpleMessage(""),
"view": MessageLookupByLibrary.simpleMessage("表示"),
"vpnDesc": MessageLookupByLibrary.simpleMessage("VPN関連設定の変更"),
"vpnEnableDesc": MessageLookupByLibrary.simpleMessage(
"VpnService経由で全システムトラフィックをルーティング",
),
"vpnSystemProxyDesc": MessageLookupByLibrary.simpleMessage(
"HTTPプロキシをVpnServiceに接続",
),
"vpnTip": MessageLookupByLibrary.simpleMessage("変更はVPN再起動後に有効"),
"webDAVConfiguration": MessageLookupByLibrary.simpleMessage("WebDAV設定"),
"whitelistMode": MessageLookupByLibrary.simpleMessage("ホワイトリストモード"),
"years": MessageLookupByLibrary.simpleMessage(""),
"zh_CN": MessageLookupByLibrary.simpleMessage("簡体字中国語"),
};
}

View File

@@ -0,0 +1,666 @@
// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
// This is a library that provides messages for a ru locale. All the
// messages from the main program should be duplicated here with the same
// function name.
// Ignore issues from commonly used lints in this file.
// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new
// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering
// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases
// ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes
// ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes
import 'package:intl/intl.dart';
import 'package:intl/message_lookup_by_library.dart';
final messages = new MessageLookup();
typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup extends MessageLookupByLibrary {
String get localeName => 'ru';
final messages = _notInlinedMessages(_notInlinedMessages);
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
"about": MessageLookupByLibrary.simpleMessage("О программе"),
"accessControl": MessageLookupByLibrary.simpleMessage("Контроль доступа"),
"accessControlAllowDesc": MessageLookupByLibrary.simpleMessage(
"Разрешить только выбранным приложениям доступ к VPN",
),
"accessControlDesc": MessageLookupByLibrary.simpleMessage(
"Настройка доступа приложений к прокси",
),
"accessControlNotAllowDesc": MessageLookupByLibrary.simpleMessage(
"Выбранные приложения будут исключены из VPN",
),
"account": MessageLookupByLibrary.simpleMessage("Аккаунт"),
"accountTip": MessageLookupByLibrary.simpleMessage(
"Аккаунт не может быть пустым",
),
"action": MessageLookupByLibrary.simpleMessage("Действие"),
"action_mode": MessageLookupByLibrary.simpleMessage("Переключить режим"),
"action_proxy": MessageLookupByLibrary.simpleMessage("Системный прокси"),
"action_start": MessageLookupByLibrary.simpleMessage("Старт/Стоп"),
"action_tun": MessageLookupByLibrary.simpleMessage("TUN"),
"action_view": MessageLookupByLibrary.simpleMessage("Показать/Скрыть"),
"add": MessageLookupByLibrary.simpleMessage("Добавить"),
"address": MessageLookupByLibrary.simpleMessage("Адрес"),
"addressHelp": MessageLookupByLibrary.simpleMessage("Адрес сервера WebDAV"),
"addressTip": MessageLookupByLibrary.simpleMessage(
"Пожалуйста, введите действительный адрес WebDAV",
),
"adminAutoLaunch": MessageLookupByLibrary.simpleMessage(
"Автозапуск с правами администратора",
),
"adminAutoLaunchDesc": MessageLookupByLibrary.simpleMessage(
"Запуск с правами администратора при загрузке системы",
),
"ago": MessageLookupByLibrary.simpleMessage(" назад"),
"agree": MessageLookupByLibrary.simpleMessage("Согласен"),
"allApps": MessageLookupByLibrary.simpleMessage("Все приложения"),
"allowBypass": MessageLookupByLibrary.simpleMessage(
"Разрешить приложениям обходить VPN",
),
"allowBypassDesc": MessageLookupByLibrary.simpleMessage(
"Некоторые приложения могут обходить VPN при включении",
),
"allowLan": MessageLookupByLibrary.simpleMessage("Разрешить LAN"),
"allowLanDesc": MessageLookupByLibrary.simpleMessage(
"Разрешить доступ к прокси через локальную сеть",
),
"app": MessageLookupByLibrary.simpleMessage("Приложение"),
"appAccessControl": MessageLookupByLibrary.simpleMessage(
"Контроль доступа приложений",
),
"appDesc": MessageLookupByLibrary.simpleMessage(
"Обработка настроек, связанных с приложением",
),
"application": MessageLookupByLibrary.simpleMessage("Приложение"),
"applicationDesc": MessageLookupByLibrary.simpleMessage(
"Изменение настроек, связанных с приложением",
),
"auto": MessageLookupByLibrary.simpleMessage("Авто"),
"autoCheckUpdate": MessageLookupByLibrary.simpleMessage(
"Автопроверка обновлений",
),
"autoCheckUpdateDesc": MessageLookupByLibrary.simpleMessage(
"Автоматически проверять обновления при запуске приложения",
),
"autoCloseConnections": MessageLookupByLibrary.simpleMessage(
"Автоматическое закрытие соединений",
),
"autoCloseConnectionsDesc": MessageLookupByLibrary.simpleMessage(
"Автоматически закрывать соединения после смены узла",
),
"autoLaunch": MessageLookupByLibrary.simpleMessage("Автозапуск"),
"autoLaunchDesc": MessageLookupByLibrary.simpleMessage(
"Следовать автозапуску системы",
),
"autoRun": MessageLookupByLibrary.simpleMessage("Автозапуск"),
"autoRunDesc": MessageLookupByLibrary.simpleMessage(
"Автоматический запуск при открытии приложения",
),
"autoUpdate": MessageLookupByLibrary.simpleMessage("Автообновление"),
"autoUpdateInterval": MessageLookupByLibrary.simpleMessage(
"Интервал автообновления (минуты)",
),
"backup": MessageLookupByLibrary.simpleMessage("Резервное копирование"),
"backupAndRecovery": MessageLookupByLibrary.simpleMessage(
"Резервное копирование и восстановление",
),
"backupAndRecoveryDesc": MessageLookupByLibrary.simpleMessage(
"Синхронизация данных через WebDAV или файл",
),
"backupSuccess": MessageLookupByLibrary.simpleMessage(
"Резервное копирование успешно",
),
"bind": MessageLookupByLibrary.simpleMessage("Привязать"),
"blacklistMode": MessageLookupByLibrary.simpleMessage(
"Режим черного списка",
),
"bypassDomain": MessageLookupByLibrary.simpleMessage("Обход домена"),
"bypassDomainDesc": MessageLookupByLibrary.simpleMessage(
"Действует только при включенном системном прокси",
),
"cacheCorrupt": MessageLookupByLibrary.simpleMessage(
"Кэш поврежден. Хотите очистить его?",
),
"cancel": MessageLookupByLibrary.simpleMessage("Отмена"),
"cancelFilterSystemApp": MessageLookupByLibrary.simpleMessage(
"Отменить фильтрацию системных приложений",
),
"cancelSelectAll": MessageLookupByLibrary.simpleMessage(
"Отменить выбор всего",
),
"checkError": MessageLookupByLibrary.simpleMessage("Ошибка проверки"),
"checkUpdate": MessageLookupByLibrary.simpleMessage("Проверить обновления"),
"checkUpdateError": MessageLookupByLibrary.simpleMessage(
"Текущее приложение уже является последней версией",
),
"checking": MessageLookupByLibrary.simpleMessage("Проверка..."),
"clipboardExport": MessageLookupByLibrary.simpleMessage(
"Экспорт в буфер обмена",
),
"clipboardImport": MessageLookupByLibrary.simpleMessage(
"Импорт из буфера обмена",
),
"columns": MessageLookupByLibrary.simpleMessage("Столбцы"),
"compatible": MessageLookupByLibrary.simpleMessage("Режим совместимости"),
"compatibleDesc": MessageLookupByLibrary.simpleMessage(
"Включение приведет к потере части функциональности приложения, но обеспечит полную поддержку Clash.",
),
"confirm": MessageLookupByLibrary.simpleMessage("Подтвердить"),
"connections": MessageLookupByLibrary.simpleMessage("Соединения"),
"connectionsDesc": MessageLookupByLibrary.simpleMessage(
"Просмотр текущих данных о соединениях",
),
"connectivity": MessageLookupByLibrary.simpleMessage("Связь:"),
"copy": MessageLookupByLibrary.simpleMessage("Копировать"),
"copyEnvVar": MessageLookupByLibrary.simpleMessage(
"Копирование переменных окружения",
),
"copyLink": MessageLookupByLibrary.simpleMessage("Копировать ссылку"),
"copySuccess": MessageLookupByLibrary.simpleMessage("Копирование успешно"),
"core": MessageLookupByLibrary.simpleMessage("Ядро"),
"coreInfo": MessageLookupByLibrary.simpleMessage("Информация о ядре"),
"country": MessageLookupByLibrary.simpleMessage("Страна"),
"create": MessageLookupByLibrary.simpleMessage("Создать"),
"cut": MessageLookupByLibrary.simpleMessage("Вырезать"),
"dark": MessageLookupByLibrary.simpleMessage("Темный"),
"dashboard": MessageLookupByLibrary.simpleMessage("Панель управления"),
"days": MessageLookupByLibrary.simpleMessage("Дней"),
"defaultNameserver": MessageLookupByLibrary.simpleMessage(
"Сервер имен по умолчанию",
),
"defaultNameserverDesc": MessageLookupByLibrary.simpleMessage(
"Для разрешения DNS-сервера",
),
"defaultSort": MessageLookupByLibrary.simpleMessage(
"Сортировка по умолчанию",
),
"defaultText": MessageLookupByLibrary.simpleMessage("По умолчанию"),
"delay": MessageLookupByLibrary.simpleMessage("Задержка"),
"delaySort": MessageLookupByLibrary.simpleMessage("Сортировка по задержке"),
"delete": MessageLookupByLibrary.simpleMessage("Удалить"),
"deleteProfileTip": MessageLookupByLibrary.simpleMessage(
"Вы уверены, что хотите удалить текущий профиль?",
),
"desc": MessageLookupByLibrary.simpleMessage(
"Многоплатформенный прокси-клиент на основе ClashMeta, простой и удобный в использовании, с открытым исходным кодом и без рекламы.",
),
"detectionTip": MessageLookupByLibrary.simpleMessage(
"Опирается на сторонний API, только для справки",
),
"direct": MessageLookupByLibrary.simpleMessage("Прямой"),
"disclaimer": MessageLookupByLibrary.simpleMessage(
"Отказ от ответственности",
),
"disclaimerDesc": MessageLookupByLibrary.simpleMessage(
"Это программное обеспечение используется только в некоммерческих целях, таких как учебные обмены и научные исследования. Запрещено использовать это программное обеспечение в коммерческих целях. Любая коммерческая деятельность, если таковая имеется, не имеет отношения к этому программному обеспечению.",
),
"discoverNewVersion": MessageLookupByLibrary.simpleMessage(
"Обнаружена новая версия",
),
"discovery": MessageLookupByLibrary.simpleMessage(
"Обнаружена новая версия",
),
"dnsDesc": MessageLookupByLibrary.simpleMessage(
"Обновление настроек, связанных с DNS",
),
"dnsMode": MessageLookupByLibrary.simpleMessage("Режим DNS"),
"doYouWantToPass": MessageLookupByLibrary.simpleMessage(
"Вы хотите пропустить",
),
"domain": MessageLookupByLibrary.simpleMessage("Домен"),
"download": MessageLookupByLibrary.simpleMessage("Скачивание"),
"edit": MessageLookupByLibrary.simpleMessage("Редактировать"),
"en": MessageLookupByLibrary.simpleMessage("Английский"),
"entries": MessageLookupByLibrary.simpleMessage(" записей"),
"exclude": MessageLookupByLibrary.simpleMessage(
"Скрыть из последних задач",
),
"excludeDesc": MessageLookupByLibrary.simpleMessage(
"Когда приложение находится в фоновом режиме, оно скрыто из последних задач",
),
"exit": MessageLookupByLibrary.simpleMessage("Выход"),
"expand": MessageLookupByLibrary.simpleMessage("Стандартный"),
"expirationTime": MessageLookupByLibrary.simpleMessage("Время истечения"),
"exportFile": MessageLookupByLibrary.simpleMessage("Экспорт файла"),
"exportLogs": MessageLookupByLibrary.simpleMessage("Экспорт логов"),
"exportSuccess": MessageLookupByLibrary.simpleMessage("Экспорт успешен"),
"externalController": MessageLookupByLibrary.simpleMessage(
"Внешний контроллер",
),
"externalControllerDesc": MessageLookupByLibrary.simpleMessage(
"При включении ядро Clash можно контролировать на порту 9090",
),
"externalLink": MessageLookupByLibrary.simpleMessage("Внешняя ссылка"),
"externalResources": MessageLookupByLibrary.simpleMessage(
"Внешние ресурсы",
),
"fakeipFilter": MessageLookupByLibrary.simpleMessage("Фильтр Fakeip"),
"fakeipRange": MessageLookupByLibrary.simpleMessage("Диапазон Fakeip"),
"fallback": MessageLookupByLibrary.simpleMessage("Резервный"),
"fallbackDesc": MessageLookupByLibrary.simpleMessage(
"Обычно используется оффшорный DNS",
),
"fallbackFilter": MessageLookupByLibrary.simpleMessage(
"Фильтр резервного DNS",
),
"file": MessageLookupByLibrary.simpleMessage("Файл"),
"fileDesc": MessageLookupByLibrary.simpleMessage("Прямая загрузка профиля"),
"fileIsUpdate": MessageLookupByLibrary.simpleMessage(
"Файл был изменен. Хотите сохранить изменения?",
),
"filterSystemApp": MessageLookupByLibrary.simpleMessage(
"Фильтровать системные приложения",
),
"findProcessMode": MessageLookupByLibrary.simpleMessage(
"Режим поиска процесса",
),
"findProcessModeDesc": MessageLookupByLibrary.simpleMessage(
"Есть риск сбоя после включения",
),
"fontFamily": MessageLookupByLibrary.simpleMessage("Семейство шрифтов"),
"fourColumns": MessageLookupByLibrary.simpleMessage("Четыре столбца"),
"general": MessageLookupByLibrary.simpleMessage("Общие"),
"generalDesc": MessageLookupByLibrary.simpleMessage(
"Переопределение общих настроек",
),
"geoData": MessageLookupByLibrary.simpleMessage("Геоданные"),
"geodataLoader": MessageLookupByLibrary.simpleMessage(
"Режим низкого потребления памяти для геоданных",
),
"geodataLoaderDesc": MessageLookupByLibrary.simpleMessage(
"Включение будет использовать загрузчик геоданных с низким потреблением памяти",
),
"geoipCode": MessageLookupByLibrary.simpleMessage("Код Geoip"),
"global": MessageLookupByLibrary.simpleMessage("Глобальный"),
"go": MessageLookupByLibrary.simpleMessage("Перейти"),
"goDownload": MessageLookupByLibrary.simpleMessage("Перейти к загрузке"),
"hasCacheChange": MessageLookupByLibrary.simpleMessage(
"Хотите сохранить изменения в кэше?",
),
"hostsDesc": MessageLookupByLibrary.simpleMessage("Добавить Hosts"),
"hotkeyConflict": MessageLookupByLibrary.simpleMessage(
"Конфликт горячих клавиш",
),
"hotkeyManagement": MessageLookupByLibrary.simpleMessage(
"Управление горячими клавишами",
),
"hotkeyManagementDesc": MessageLookupByLibrary.simpleMessage(
"Использование клавиатуры для управления приложением",
),
"hours": MessageLookupByLibrary.simpleMessage("Часов"),
"icon": MessageLookupByLibrary.simpleMessage("Иконка"),
"iconConfiguration": MessageLookupByLibrary.simpleMessage(
"Конфигурация иконки",
),
"iconStyle": MessageLookupByLibrary.simpleMessage("Стиль иконки"),
"importFromURL": MessageLookupByLibrary.simpleMessage("Импорт из URL"),
"infiniteTime": MessageLookupByLibrary.simpleMessage(
"Долгосрочное действие",
),
"init": MessageLookupByLibrary.simpleMessage("Инициализация"),
"inputCorrectHotkey": MessageLookupByLibrary.simpleMessage(
"Пожалуйста, введите правильную горячую клавишу",
),
"intelligentSelected": MessageLookupByLibrary.simpleMessage(
"Интеллектуальный выбор",
),
"intranetIP": MessageLookupByLibrary.simpleMessage("Внутренний IP"),
"ipcidr": MessageLookupByLibrary.simpleMessage("IPCIDR"),
"ipv6Desc": MessageLookupByLibrary.simpleMessage(
"При включении будет возможно получать IPv6 трафик",
),
"ipv6InboundDesc": MessageLookupByLibrary.simpleMessage(
"Разрешить входящий IPv6",
),
"ja": MessageLookupByLibrary.simpleMessage("Японский"),
"just": MessageLookupByLibrary.simpleMessage("Только что"),
"keepAliveIntervalDesc": MessageLookupByLibrary.simpleMessage(
"Интервал поддержания TCP-соединения",
),
"key": MessageLookupByLibrary.simpleMessage("Ключ"),
"language": MessageLookupByLibrary.simpleMessage("Язык"),
"layout": MessageLookupByLibrary.simpleMessage("Макет"),
"light": MessageLookupByLibrary.simpleMessage("Светлый"),
"list": MessageLookupByLibrary.simpleMessage("Список"),
"listen": MessageLookupByLibrary.simpleMessage("Слушать"),
"local": MessageLookupByLibrary.simpleMessage("Локальный"),
"localBackupDesc": MessageLookupByLibrary.simpleMessage(
"Резервное копирование локальных данных на локальный диск",
),
"localRecoveryDesc": MessageLookupByLibrary.simpleMessage(
"Восстановление данных из файла",
),
"logLevel": MessageLookupByLibrary.simpleMessage("Уровень логов"),
"logcat": MessageLookupByLibrary.simpleMessage("Logcat"),
"logcatDesc": MessageLookupByLibrary.simpleMessage(
"Отключение скроет запись логов",
),
"logs": MessageLookupByLibrary.simpleMessage("Логи"),
"logsDesc": MessageLookupByLibrary.simpleMessage("Записи захвата логов"),
"loopback": MessageLookupByLibrary.simpleMessage(
"Инструмент разблокировки Loopback",
),
"loopbackDesc": MessageLookupByLibrary.simpleMessage(
"Используется для разблокировки Loopback UWP",
),
"loose": MessageLookupByLibrary.simpleMessage("Свободный"),
"memoryInfo": MessageLookupByLibrary.simpleMessage("Информация о памяти"),
"min": MessageLookupByLibrary.simpleMessage("Мин"),
"minimizeOnExit": MessageLookupByLibrary.simpleMessage(
"Свернуть при выходе",
),
"minimizeOnExitDesc": MessageLookupByLibrary.simpleMessage(
"Изменить стандартное событие выхода из системы",
),
"minutes": MessageLookupByLibrary.simpleMessage("Минут"),
"mode": MessageLookupByLibrary.simpleMessage("Режим"),
"months": MessageLookupByLibrary.simpleMessage("Месяцев"),
"more": MessageLookupByLibrary.simpleMessage("Еще"),
"name": MessageLookupByLibrary.simpleMessage("Имя"),
"nameSort": MessageLookupByLibrary.simpleMessage("Сортировка по имени"),
"nameserver": MessageLookupByLibrary.simpleMessage("Сервер имен"),
"nameserverDesc": MessageLookupByLibrary.simpleMessage(
"Для разрешения домена",
),
"nameserverPolicy": MessageLookupByLibrary.simpleMessage(
"Политика сервера имен",
),
"nameserverPolicyDesc": MessageLookupByLibrary.simpleMessage(
"Указать соответствующую политику сервера имен",
),
"network": MessageLookupByLibrary.simpleMessage("Сеть"),
"networkDesc": MessageLookupByLibrary.simpleMessage(
"Изменение настроек, связанных с сетью",
),
"networkDetection": MessageLookupByLibrary.simpleMessage(
"Обнаружение сети",
),
"networkSpeed": MessageLookupByLibrary.simpleMessage("Скорость сети"),
"noData": MessageLookupByLibrary.simpleMessage("Нет данных"),
"noHotKey": MessageLookupByLibrary.simpleMessage("Нет горячей клавиши"),
"noIcon": MessageLookupByLibrary.simpleMessage("Нет иконки"),
"noInfo": MessageLookupByLibrary.simpleMessage("Нет информации"),
"noMoreInfoDesc": MessageLookupByLibrary.simpleMessage(
"Нет дополнительной информации",
),
"noNetwork": MessageLookupByLibrary.simpleMessage("Нет сети"),
"noProxy": MessageLookupByLibrary.simpleMessage("Нет прокси"),
"noProxyDesc": MessageLookupByLibrary.simpleMessage(
"Пожалуйста, создайте профиль или добавьте действительный профиль",
),
"notEmpty": MessageLookupByLibrary.simpleMessage("Не может быть пустым"),
"notSelectedTip": MessageLookupByLibrary.simpleMessage(
"Текущая группа прокси не может быть выбрана.",
),
"nullConnectionsDesc": MessageLookupByLibrary.simpleMessage(
"Нет соединений",
),
"nullCoreInfoDesc": MessageLookupByLibrary.simpleMessage(
"Не удалось получить информацию о ядре",
),
"nullLogsDesc": MessageLookupByLibrary.simpleMessage("Нет логов"),
"nullProfileDesc": MessageLookupByLibrary.simpleMessage(
"Нет профиля, пожалуйста, добавьте профиль",
),
"nullProxies": MessageLookupByLibrary.simpleMessage("Нет прокси"),
"nullRequestsDesc": MessageLookupByLibrary.simpleMessage("Нет запросов"),
"oneColumn": MessageLookupByLibrary.simpleMessage("Один столбец"),
"onlyIcon": MessageLookupByLibrary.simpleMessage("Только иконка"),
"onlyOtherApps": MessageLookupByLibrary.simpleMessage(
"Только сторонние приложения",
),
"onlyStatisticsProxy": MessageLookupByLibrary.simpleMessage(
"Только статистика прокси",
),
"onlyStatisticsProxyDesc": MessageLookupByLibrary.simpleMessage(
"При включении будет учитываться только трафик прокси",
),
"options": MessageLookupByLibrary.simpleMessage("Опции"),
"other": MessageLookupByLibrary.simpleMessage("Другое"),
"otherContributors": MessageLookupByLibrary.simpleMessage(
"Другие участники",
),
"outboundMode": MessageLookupByLibrary.simpleMessage(
"Режим исходящего трафика",
),
"override": MessageLookupByLibrary.simpleMessage("Переопределить"),
"overrideDesc": MessageLookupByLibrary.simpleMessage(
"Переопределить конфигурацию, связанную с прокси",
),
"overrideDns": MessageLookupByLibrary.simpleMessage("Переопределить DNS"),
"overrideDnsDesc": MessageLookupByLibrary.simpleMessage(
"Включение переопределит настройки DNS в профиле",
),
"password": MessageLookupByLibrary.simpleMessage("Пароль"),
"passwordTip": MessageLookupByLibrary.simpleMessage(
"Пароль не может быть пустым",
),
"paste": MessageLookupByLibrary.simpleMessage("Вставить"),
"pleaseBindWebDAV": MessageLookupByLibrary.simpleMessage(
"Пожалуйста, привяжите WebDAV",
),
"pleaseInputAdminPassword": MessageLookupByLibrary.simpleMessage(
"Пожалуйста, введите пароль администратора",
),
"pleaseUploadFile": MessageLookupByLibrary.simpleMessage(
"Пожалуйста, загрузите файл",
),
"pleaseUploadValidQrcode": MessageLookupByLibrary.simpleMessage(
"Пожалуйста, загрузите действительный QR-код",
),
"port": MessageLookupByLibrary.simpleMessage("Порт"),
"preferH3Desc": MessageLookupByLibrary.simpleMessage(
"Приоритетное использование HTTP/3 для DOH",
),
"pressKeyboard": MessageLookupByLibrary.simpleMessage(
"Пожалуйста, нажмите клавишу.",
),
"preview": MessageLookupByLibrary.simpleMessage("Предпросмотр"),
"profile": MessageLookupByLibrary.simpleMessage("Профиль"),
"profileAutoUpdateIntervalInvalidValidationDesc":
MessageLookupByLibrary.simpleMessage(
"Пожалуйста, введите действительный формат интервала времени",
),
"profileAutoUpdateIntervalNullValidationDesc":
MessageLookupByLibrary.simpleMessage(
"Пожалуйста, введите интервал времени для автообновления",
),
"profileHasUpdate": MessageLookupByLibrary.simpleMessage(
"Профиль был изменен. Хотите отключить автообновление?",
),
"profileNameNullValidationDesc": MessageLookupByLibrary.simpleMessage(
"Пожалуйста, введите имя профиля",
),
"profileParseErrorDesc": MessageLookupByLibrary.simpleMessage(
"ошибка разбора профиля",
),
"profileUrlInvalidValidationDesc": MessageLookupByLibrary.simpleMessage(
"Пожалуйста, введите действительный URL профиля",
),
"profileUrlNullValidationDesc": MessageLookupByLibrary.simpleMessage(
"Пожалуйста, введите URL профиля",
),
"profiles": MessageLookupByLibrary.simpleMessage("Профили"),
"profilesSort": MessageLookupByLibrary.simpleMessage("Сортировка профилей"),
"project": MessageLookupByLibrary.simpleMessage("Проект"),
"providers": MessageLookupByLibrary.simpleMessage("Провайдеры"),
"proxies": MessageLookupByLibrary.simpleMessage("Прокси"),
"proxiesSetting": MessageLookupByLibrary.simpleMessage("Настройка прокси"),
"proxyGroup": MessageLookupByLibrary.simpleMessage("Группа прокси"),
"proxyNameserver": MessageLookupByLibrary.simpleMessage(
"Прокси-сервер имен",
),
"proxyNameserverDesc": MessageLookupByLibrary.simpleMessage(
"Домен для разрешения прокси-узлов",
),
"proxyPort": MessageLookupByLibrary.simpleMessage("Порт прокси"),
"proxyPortDesc": MessageLookupByLibrary.simpleMessage(
"Установить порт прослушивания Clash",
),
"proxyProviders": MessageLookupByLibrary.simpleMessage("Провайдеры прокси"),
"pureBlackMode": MessageLookupByLibrary.simpleMessage("Чисто черный режим"),
"qrcode": MessageLookupByLibrary.simpleMessage("QR-код"),
"qrcodeDesc": MessageLookupByLibrary.simpleMessage(
"Сканируйте QR-код для получения профиля",
),
"recovery": MessageLookupByLibrary.simpleMessage("Восстановление"),
"recoveryAll": MessageLookupByLibrary.simpleMessage(
"Восстановить все данные",
),
"recoveryProfiles": MessageLookupByLibrary.simpleMessage(
"Только восстановление профилей",
),
"recoverySuccess": MessageLookupByLibrary.simpleMessage(
"Восстановление успешно",
),
"regExp": MessageLookupByLibrary.simpleMessage("Регулярное выражение"),
"remote": MessageLookupByLibrary.simpleMessage("Удаленный"),
"remoteBackupDesc": MessageLookupByLibrary.simpleMessage(
"Резервное копирование локальных данных на WebDAV",
),
"remoteRecoveryDesc": MessageLookupByLibrary.simpleMessage(
"Восстановление данных с WebDAV",
),
"remove": MessageLookupByLibrary.simpleMessage("Удалить"),
"requests": MessageLookupByLibrary.simpleMessage("Запросы"),
"requestsDesc": MessageLookupByLibrary.simpleMessage(
"Просмотр последних записей запросов",
),
"reset": MessageLookupByLibrary.simpleMessage("Сброс"),
"resetTip": MessageLookupByLibrary.simpleMessage(
"Убедитесь, что хотите сбросить",
),
"resources": MessageLookupByLibrary.simpleMessage("Ресурсы"),
"resourcesDesc": MessageLookupByLibrary.simpleMessage(
"Информация, связанная с внешними ресурсами",
),
"respectRules": MessageLookupByLibrary.simpleMessage("Соблюдение правил"),
"respectRulesDesc": MessageLookupByLibrary.simpleMessage(
"DNS-соединение следует правилам, необходимо настроить proxy-server-nameserver",
),
"routeAddress": MessageLookupByLibrary.simpleMessage("Адрес маршрутизации"),
"routeAddressDesc": MessageLookupByLibrary.simpleMessage(
"Настройка адреса прослушивания маршрутизации",
),
"routeMode": MessageLookupByLibrary.simpleMessage("Режим маршрутизации"),
"routeMode_bypassPrivate": MessageLookupByLibrary.simpleMessage(
"Обход частных адресов маршрутизации",
),
"routeMode_config": MessageLookupByLibrary.simpleMessage(
"Использовать конфигурацию",
),
"ru": MessageLookupByLibrary.simpleMessage("Русский"),
"rule": MessageLookupByLibrary.simpleMessage("Правило"),
"ruleProviders": MessageLookupByLibrary.simpleMessage("Провайдеры правил"),
"save": MessageLookupByLibrary.simpleMessage("Сохранить"),
"search": MessageLookupByLibrary.simpleMessage("Поиск"),
"seconds": MessageLookupByLibrary.simpleMessage("Секунд"),
"selectAll": MessageLookupByLibrary.simpleMessage("Выбрать все"),
"selected": MessageLookupByLibrary.simpleMessage("Выбрано"),
"settings": MessageLookupByLibrary.simpleMessage("Настройки"),
"show": MessageLookupByLibrary.simpleMessage("Показать"),
"shrink": MessageLookupByLibrary.simpleMessage("Сжать"),
"silentLaunch": MessageLookupByLibrary.simpleMessage("Тихий запуск"),
"silentLaunchDesc": MessageLookupByLibrary.simpleMessage(
"Запуск в фоновом режиме",
),
"size": MessageLookupByLibrary.simpleMessage("Размер"),
"sort": MessageLookupByLibrary.simpleMessage("Сортировка"),
"source": MessageLookupByLibrary.simpleMessage("Источник"),
"stackMode": MessageLookupByLibrary.simpleMessage("Режим стека"),
"standard": MessageLookupByLibrary.simpleMessage("Стандартный"),
"start": MessageLookupByLibrary.simpleMessage("Старт"),
"startVpn": MessageLookupByLibrary.simpleMessage("Запуск VPN..."),
"status": MessageLookupByLibrary.simpleMessage("Статус"),
"statusDesc": MessageLookupByLibrary.simpleMessage(
"Системный DNS будет использоваться при выключении",
),
"stop": MessageLookupByLibrary.simpleMessage("Стоп"),
"stopVpn": MessageLookupByLibrary.simpleMessage("Остановка VPN..."),
"style": MessageLookupByLibrary.simpleMessage("Стиль"),
"submit": MessageLookupByLibrary.simpleMessage("Отправить"),
"sync": MessageLookupByLibrary.simpleMessage("Синхронизация"),
"system": MessageLookupByLibrary.simpleMessage("Система"),
"systemFont": MessageLookupByLibrary.simpleMessage("Системный шрифт"),
"systemProxy": MessageLookupByLibrary.simpleMessage("Системный прокси"),
"systemProxyDesc": MessageLookupByLibrary.simpleMessage(
"Прикрепить HTTP-прокси к VpnService",
),
"tab": MessageLookupByLibrary.simpleMessage("Вкладка"),
"tabAnimation": MessageLookupByLibrary.simpleMessage("Анимация вкладок"),
"tabAnimationDesc": MessageLookupByLibrary.simpleMessage(
"При включении домашняя вкладка добавит анимацию переключения",
),
"tcpConcurrent": MessageLookupByLibrary.simpleMessage("TCP параллелизм"),
"tcpConcurrentDesc": MessageLookupByLibrary.simpleMessage(
"Включение позволит использовать параллелизм TCP",
),
"testUrl": MessageLookupByLibrary.simpleMessage("Тест URL"),
"theme": MessageLookupByLibrary.simpleMessage("Тема"),
"themeColor": MessageLookupByLibrary.simpleMessage("Цвет темы"),
"themeDesc": MessageLookupByLibrary.simpleMessage(
"Установить темный режим, настроить цвет",
),
"themeMode": MessageLookupByLibrary.simpleMessage("Режим темы"),
"threeColumns": MessageLookupByLibrary.simpleMessage("Три столбца"),
"tight": MessageLookupByLibrary.simpleMessage("Плотный"),
"time": MessageLookupByLibrary.simpleMessage("Время"),
"tip": MessageLookupByLibrary.simpleMessage("подсказка"),
"toggle": MessageLookupByLibrary.simpleMessage("Переключить"),
"tools": MessageLookupByLibrary.simpleMessage("Инструменты"),
"trafficUsage": MessageLookupByLibrary.simpleMessage(
"Использование трафика",
),
"tun": MessageLookupByLibrary.simpleMessage("TUN"),
"tunDesc": MessageLookupByLibrary.simpleMessage(
"действительно только в режиме администратора",
),
"twoColumns": MessageLookupByLibrary.simpleMessage("Два столбца"),
"unableToUpdateCurrentProfileDesc": MessageLookupByLibrary.simpleMessage(
"невозможно обновить текущий профиль",
),
"unifiedDelay": MessageLookupByLibrary.simpleMessage(
"Унифицированная задержка",
),
"unifiedDelayDesc": MessageLookupByLibrary.simpleMessage(
"Убрать дополнительные задержки, такие как рукопожатие",
),
"unknown": MessageLookupByLibrary.simpleMessage("Неизвестно"),
"update": MessageLookupByLibrary.simpleMessage("Обновить"),
"upload": MessageLookupByLibrary.simpleMessage("Загрузка"),
"url": MessageLookupByLibrary.simpleMessage("URL"),
"urlDesc": MessageLookupByLibrary.simpleMessage(
"Получить профиль через URL",
),
"useHosts": MessageLookupByLibrary.simpleMessage("Использовать hosts"),
"useSystemHosts": MessageLookupByLibrary.simpleMessage(
"Использовать системные hosts",
),
"value": MessageLookupByLibrary.simpleMessage("Значение"),
"view": MessageLookupByLibrary.simpleMessage("Просмотр"),
"vpnDesc": MessageLookupByLibrary.simpleMessage(
"Изменение настроек, связанных с VPN",
),
"vpnEnableDesc": MessageLookupByLibrary.simpleMessage(
"Автоматически направляет весь системный трафик через VpnService",
),
"vpnSystemProxyDesc": MessageLookupByLibrary.simpleMessage(
"Прикрепить HTTP-прокси к VpnService",
),
"vpnTip": MessageLookupByLibrary.simpleMessage(
"Изменения вступят в силу после перезапуска VPN",
),
"webDAVConfiguration": MessageLookupByLibrary.simpleMessage(
"Конфигурация WebDAV",
),
"whitelistMode": MessageLookupByLibrary.simpleMessage(
"Режим белого списка",
),
"years": MessageLookupByLibrary.simpleMessage("Лет"),
"zh_CN": MessageLookupByLibrary.simpleMessage("Упрощенный китайский"),
};
}

View File

@@ -122,7 +122,7 @@ class MessageLookup extends MessageLookupByLibrary {
"desc": MessageLookupByLibrary.simpleMessage(
"基于ClashMeta的多平台代理客户端简单易用开源无广告。",
),
"detectionTip": MessageLookupByLibrary.simpleMessage("依赖第三方api仅供参考"),
"detectionTip": MessageLookupByLibrary.simpleMessage("依赖第三方api仅供参考"),
"direct": MessageLookupByLibrary.simpleMessage("直连"),
"disclaimer": MessageLookupByLibrary.simpleMessage("免责声明"),
"disclaimerDesc": MessageLookupByLibrary.simpleMessage(
@@ -192,6 +192,7 @@ class MessageLookup extends MessageLookupByLibrary {
"ipcidr": MessageLookupByLibrary.simpleMessage("IP/掩码"),
"ipv6Desc": MessageLookupByLibrary.simpleMessage("开启后将可以接收IPv6流量"),
"ipv6InboundDesc": MessageLookupByLibrary.simpleMessage("允许IPv6入站"),
"ja": MessageLookupByLibrary.simpleMessage("日语"),
"just": MessageLookupByLibrary.simpleMessage("刚刚"),
"keepAliveIntervalDesc": MessageLookupByLibrary.simpleMessage("TCP保持活动间隔"),
"key": MessageLookupByLibrary.simpleMessage(""),
@@ -199,6 +200,7 @@ class MessageLookup extends MessageLookupByLibrary {
"layout": MessageLookupByLibrary.simpleMessage("布局"),
"light": MessageLookupByLibrary.simpleMessage("浅色"),
"list": MessageLookupByLibrary.simpleMessage("列表"),
"listen": MessageLookupByLibrary.simpleMessage("监听"),
"local": MessageLookupByLibrary.simpleMessage("本地"),
"localBackupDesc": MessageLookupByLibrary.simpleMessage("备份数据到本地"),
"localRecoveryDesc": MessageLookupByLibrary.simpleMessage("通过文件恢复数据"),
@@ -304,7 +306,7 @@ class MessageLookup extends MessageLookupByLibrary {
"proxyPort": MessageLookupByLibrary.simpleMessage("代理端口"),
"proxyPortDesc": MessageLookupByLibrary.simpleMessage("设置Clash监听端口"),
"proxyProviders": MessageLookupByLibrary.simpleMessage("代理提供者"),
"prueBlackMode": MessageLookupByLibrary.simpleMessage("纯黑模式"),
"pureBlackMode": MessageLookupByLibrary.simpleMessage("纯黑模式"),
"qrcode": MessageLookupByLibrary.simpleMessage("二维码"),
"qrcodeDesc": MessageLookupByLibrary.simpleMessage("扫描二维码获取配置文件"),
"recovery": MessageLookupByLibrary.simpleMessage("恢复"),
@@ -331,6 +333,7 @@ class MessageLookup extends MessageLookupByLibrary {
"routeMode": MessageLookupByLibrary.simpleMessage("路由模式"),
"routeMode_bypassPrivate": MessageLookupByLibrary.simpleMessage("绕过私有路由地址"),
"routeMode_config": MessageLookupByLibrary.simpleMessage("使用配置"),
"ru": MessageLookupByLibrary.simpleMessage("俄语"),
"rule": MessageLookupByLibrary.simpleMessage("规则"),
"ruleProviders": MessageLookupByLibrary.simpleMessage("规则提供者"),
"save": MessageLookupByLibrary.simpleMessage("保存"),

View File

@@ -255,6 +255,16 @@ class AppLocalizations {
return Intl.message('English', name: 'en', desc: '', args: []);
}
/// `Japanese`
String get ja {
return Intl.message('Japanese', name: 'ja', desc: '', args: []);
}
/// `Russian`
String get ru {
return Intl.message('Russian', name: 'ru', desc: '', args: []);
}
/// `Simplified Chinese`
String get zh_CN {
return Intl.message(
@@ -1670,10 +1680,10 @@ class AppLocalizations {
);
}
/// `Auto lose connections`
/// `Auto close connections`
String get autoCloseConnections {
return Intl.message(
'Auto lose connections',
'Auto close connections',
name: 'autoCloseConnections',
desc: '',
args: [],
@@ -1720,11 +1730,11 @@ class AppLocalizations {
);
}
/// `Prue black mode`
String get prueBlackMode {
/// `Pure black mode`
String get pureBlackMode {
return Intl.message(
'Prue black mode',
name: 'prueBlackMode',
'Pure black mode',
name: 'pureBlackMode',
desc: '',
args: [],
);
@@ -2679,6 +2689,11 @@ class AppLocalizations {
args: [],
);
}
/// `Listen`
String get listen {
return Intl.message('Listen', name: 'listen', desc: '', args: []);
}
}
class AppLocalizationDelegate extends LocalizationsDelegate<AppLocalizations> {
@@ -2687,6 +2702,8 @@ class AppLocalizationDelegate extends LocalizationsDelegate<AppLocalizations> {
List<Locale> get supportedLocales {
return const <Locale>[
Locale.fromSubtags(languageCode: 'en'),
Locale.fromSubtags(languageCode: 'ja'),
Locale.fromSubtags(languageCode: 'ru'),
Locale.fromSubtags(languageCode: 'zh', countryCode: 'CN'),
];
}

View File

@@ -6,7 +6,6 @@ import 'package:freezed_annotation/freezed_annotation.dart';
import '../enum/enum.dart';
part 'generated/clash_config.freezed.dart';
part 'generated/clash_config.g.dart';
typedef HostsMap = Map<String, String>;
@@ -179,6 +178,7 @@ class FallbackFilter with _$FallbackFilter {
class Dns with _$Dns {
const factory Dns({
@Default(true) bool enable,
@Default("0.0.0.0:1053") String listen,
@Default(false) @JsonKey(name: "prefer-h3") bool preferH3,
@Default(true) @JsonKey(name: "use-hosts") bool useHosts,
@Default(true) @JsonKey(name: "use-system-hosts") bool useSystemHosts,

View File

@@ -1,7 +1,5 @@
// ignore_for_file: invalid_annotation_target
import 'dart:io';
import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/enum/enum.dart';
import 'package:flutter/material.dart';
@@ -10,7 +8,6 @@ import 'package:freezed_annotation/freezed_annotation.dart';
import 'models.dart';
part 'generated/config.freezed.dart';
part 'generated/config.g.dart';
const defaultBypassDomain = [
@@ -39,15 +36,10 @@ const defaultNetworkProps = NetworkProps();
const defaultProxiesStyle = ProxiesStyle();
const defaultWindowProps = WindowProps();
const defaultAccessControl = AccessControl();
final defaultThemeProps = Platform.isWindows
? ThemeProps().copyWith(
fontFamily: FontFamily.miSans,
primaryColor: defaultPrimaryColor.value,
)
: ThemeProps().copyWith(
primaryColor: defaultPrimaryColor.value,
themeMode: ThemeMode.dark,
);
final defaultThemeProps = ThemeProps().copyWith(
primaryColor: defaultPrimaryColor.value,
themeMode: ThemeMode.dark,
);
const List<DashboardWidget> defaultDashboardWidgets = [
DashboardWidget.networkSpeed,
@@ -185,8 +177,7 @@ class ThemeProps with _$ThemeProps {
const factory ThemeProps({
int? primaryColor,
@Default(ThemeMode.system) ThemeMode themeMode,
@Default(false) bool prueBlack,
@Default(FontFamily.system) FontFamily fontFamily,
@Default(false) bool pureBlack,
}) = _ThemeProps;
factory ThemeProps.fromJson(Map<String, Object?> json) =>
@@ -244,5 +235,4 @@ extension ConfigExt on Config {
Profile? get currentProfile {
return profiles.getProfile(currentProfileId);
}
}

View File

@@ -1039,6 +1039,7 @@ Dns _$DnsFromJson(Map<String, dynamic> json) {
/// @nodoc
mixin _$Dns {
bool get enable => throw _privateConstructorUsedError;
String get listen => throw _privateConstructorUsedError;
@JsonKey(name: "prefer-h3")
bool get preferH3 => throw _privateConstructorUsedError;
@JsonKey(name: "use-hosts")
@@ -1082,6 +1083,7 @@ abstract class $DnsCopyWith<$Res> {
@useResult
$Res call(
{bool enable,
String listen,
@JsonKey(name: "prefer-h3") bool preferH3,
@JsonKey(name: "use-hosts") bool useHosts,
@JsonKey(name: "use-system-hosts") bool useSystemHosts,
@@ -1116,6 +1118,7 @@ class _$DnsCopyWithImpl<$Res, $Val extends Dns> implements $DnsCopyWith<$Res> {
@override
$Res call({
Object? enable = null,
Object? listen = null,
Object? preferH3 = null,
Object? useHosts = null,
Object? useSystemHosts = null,
@@ -1136,6 +1139,10 @@ class _$DnsCopyWithImpl<$Res, $Val extends Dns> implements $DnsCopyWith<$Res> {
? _value.enable
: enable // ignore: cast_nullable_to_non_nullable
as bool,
listen: null == listen
? _value.listen
: listen // ignore: cast_nullable_to_non_nullable
as String,
preferH3: null == preferH3
? _value.preferH3
: preferH3 // ignore: cast_nullable_to_non_nullable
@@ -1214,6 +1221,7 @@ abstract class _$$DnsImplCopyWith<$Res> implements $DnsCopyWith<$Res> {
@useResult
$Res call(
{bool enable,
String listen,
@JsonKey(name: "prefer-h3") bool preferH3,
@JsonKey(name: "use-hosts") bool useHosts,
@JsonKey(name: "use-system-hosts") bool useSystemHosts,
@@ -1246,6 +1254,7 @@ class __$$DnsImplCopyWithImpl<$Res> extends _$DnsCopyWithImpl<$Res, _$DnsImpl>
@override
$Res call({
Object? enable = null,
Object? listen = null,
Object? preferH3 = null,
Object? useHosts = null,
Object? useSystemHosts = null,
@@ -1266,6 +1275,10 @@ class __$$DnsImplCopyWithImpl<$Res> extends _$DnsCopyWithImpl<$Res, _$DnsImpl>
? _value.enable
: enable // ignore: cast_nullable_to_non_nullable
as bool,
listen: null == listen
? _value.listen
: listen // ignore: cast_nullable_to_non_nullable
as String,
preferH3: null == preferH3
? _value.preferH3
: preferH3 // ignore: cast_nullable_to_non_nullable
@@ -1331,6 +1344,7 @@ class __$$DnsImplCopyWithImpl<$Res> extends _$DnsCopyWithImpl<$Res, _$DnsImpl>
class _$DnsImpl implements _Dns {
const _$DnsImpl(
{this.enable = true,
this.listen = "0.0.0.0:1053",
@JsonKey(name: "prefer-h3") this.preferH3 = false,
@JsonKey(name: "use-hosts") this.useHosts = true,
@JsonKey(name: "use-system-hosts") this.useSystemHosts = true,
@@ -1375,6 +1389,9 @@ class _$DnsImpl implements _Dns {
@JsonKey()
final bool enable;
@override
@JsonKey()
final String listen;
@override
@JsonKey(name: "prefer-h3")
final bool preferH3;
@override
@@ -1457,7 +1474,7 @@ class _$DnsImpl implements _Dns {
@override
String toString() {
return 'Dns(enable: $enable, preferH3: $preferH3, useHosts: $useHosts, useSystemHosts: $useSystemHosts, respectRules: $respectRules, ipv6: $ipv6, defaultNameserver: $defaultNameserver, enhancedMode: $enhancedMode, fakeIpRange: $fakeIpRange, fakeIpFilter: $fakeIpFilter, nameserverPolicy: $nameserverPolicy, nameserver: $nameserver, fallback: $fallback, proxyServerNameserver: $proxyServerNameserver, fallbackFilter: $fallbackFilter)';
return 'Dns(enable: $enable, listen: $listen, preferH3: $preferH3, useHosts: $useHosts, useSystemHosts: $useSystemHosts, respectRules: $respectRules, ipv6: $ipv6, defaultNameserver: $defaultNameserver, enhancedMode: $enhancedMode, fakeIpRange: $fakeIpRange, fakeIpFilter: $fakeIpFilter, nameserverPolicy: $nameserverPolicy, nameserver: $nameserver, fallback: $fallback, proxyServerNameserver: $proxyServerNameserver, fallbackFilter: $fallbackFilter)';
}
@override
@@ -1466,6 +1483,7 @@ class _$DnsImpl implements _Dns {
(other.runtimeType == runtimeType &&
other is _$DnsImpl &&
(identical(other.enable, enable) || other.enable == enable) &&
(identical(other.listen, listen) || other.listen == listen) &&
(identical(other.preferH3, preferH3) ||
other.preferH3 == preferH3) &&
(identical(other.useHosts, useHosts) ||
@@ -1499,6 +1517,7 @@ class _$DnsImpl implements _Dns {
int get hashCode => Object.hash(
runtimeType,
enable,
listen,
preferH3,
useHosts,
useSystemHosts,
@@ -1533,6 +1552,7 @@ class _$DnsImpl implements _Dns {
abstract class _Dns implements Dns {
const factory _Dns(
{final bool enable,
final String listen,
@JsonKey(name: "prefer-h3") final bool preferH3,
@JsonKey(name: "use-hosts") final bool useHosts,
@JsonKey(name: "use-system-hosts") final bool useSystemHosts,
@@ -1556,6 +1576,8 @@ abstract class _Dns implements Dns {
@override
bool get enable;
@override
String get listen;
@override
@JsonKey(name: "prefer-h3")
bool get preferH3;
@override

View File

@@ -112,6 +112,7 @@ Map<String, dynamic> _$$FallbackFilterImplToJson(
_$DnsImpl _$$DnsImplFromJson(Map<String, dynamic> json) => _$DnsImpl(
enable: json['enable'] as bool? ?? true,
listen: json['listen'] as String? ?? "0.0.0.0:1053",
preferH3: json['prefer-h3'] as bool? ?? false,
useHosts: json['use-hosts'] as bool? ?? true,
useSystemHosts: json['use-system-hosts'] as bool? ?? true,
@@ -161,6 +162,7 @@ _$DnsImpl _$$DnsImplFromJson(Map<String, dynamic> json) => _$DnsImpl(
Map<String, dynamic> _$$DnsImplToJson(_$DnsImpl instance) => <String, dynamic>{
'enable': instance.enable,
'listen': instance.listen,
'prefer-h3': instance.preferH3,
'use-hosts': instance.useHosts,
'use-system-hosts': instance.useSystemHosts,

View File

@@ -1725,8 +1725,7 @@ ThemeProps _$ThemePropsFromJson(Map<String, dynamic> json) {
mixin _$ThemeProps {
int? get primaryColor => throw _privateConstructorUsedError;
ThemeMode get themeMode => throw _privateConstructorUsedError;
bool get prueBlack => throw _privateConstructorUsedError;
FontFamily get fontFamily => throw _privateConstructorUsedError;
bool get pureBlack => throw _privateConstructorUsedError;
/// Serializes this ThemeProps to a JSON map.
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
@@ -1744,11 +1743,7 @@ abstract class $ThemePropsCopyWith<$Res> {
ThemeProps value, $Res Function(ThemeProps) then) =
_$ThemePropsCopyWithImpl<$Res, ThemeProps>;
@useResult
$Res call(
{int? primaryColor,
ThemeMode themeMode,
bool prueBlack,
FontFamily fontFamily});
$Res call({int? primaryColor, ThemeMode themeMode, bool pureBlack});
}
/// @nodoc
@@ -1768,8 +1763,7 @@ class _$ThemePropsCopyWithImpl<$Res, $Val extends ThemeProps>
$Res call({
Object? primaryColor = freezed,
Object? themeMode = null,
Object? prueBlack = null,
Object? fontFamily = null,
Object? pureBlack = null,
}) {
return _then(_value.copyWith(
primaryColor: freezed == primaryColor
@@ -1780,14 +1774,10 @@ class _$ThemePropsCopyWithImpl<$Res, $Val extends ThemeProps>
? _value.themeMode
: themeMode // ignore: cast_nullable_to_non_nullable
as ThemeMode,
prueBlack: null == prueBlack
? _value.prueBlack
: prueBlack // ignore: cast_nullable_to_non_nullable
pureBlack: null == pureBlack
? _value.pureBlack
: pureBlack // ignore: cast_nullable_to_non_nullable
as bool,
fontFamily: null == fontFamily
? _value.fontFamily
: fontFamily // ignore: cast_nullable_to_non_nullable
as FontFamily,
) as $Val);
}
}
@@ -1800,11 +1790,7 @@ abstract class _$$ThemePropsImplCopyWith<$Res>
__$$ThemePropsImplCopyWithImpl<$Res>;
@override
@useResult
$Res call(
{int? primaryColor,
ThemeMode themeMode,
bool prueBlack,
FontFamily fontFamily});
$Res call({int? primaryColor, ThemeMode themeMode, bool pureBlack});
}
/// @nodoc
@@ -1822,8 +1808,7 @@ class __$$ThemePropsImplCopyWithImpl<$Res>
$Res call({
Object? primaryColor = freezed,
Object? themeMode = null,
Object? prueBlack = null,
Object? fontFamily = null,
Object? pureBlack = null,
}) {
return _then(_$ThemePropsImpl(
primaryColor: freezed == primaryColor
@@ -1834,14 +1819,10 @@ class __$$ThemePropsImplCopyWithImpl<$Res>
? _value.themeMode
: themeMode // ignore: cast_nullable_to_non_nullable
as ThemeMode,
prueBlack: null == prueBlack
? _value.prueBlack
: prueBlack // ignore: cast_nullable_to_non_nullable
pureBlack: null == pureBlack
? _value.pureBlack
: pureBlack // ignore: cast_nullable_to_non_nullable
as bool,
fontFamily: null == fontFamily
? _value.fontFamily
: fontFamily // ignore: cast_nullable_to_non_nullable
as FontFamily,
));
}
}
@@ -1852,8 +1833,7 @@ class _$ThemePropsImpl implements _ThemeProps {
const _$ThemePropsImpl(
{this.primaryColor,
this.themeMode = ThemeMode.system,
this.prueBlack = false,
this.fontFamily = FontFamily.system});
this.pureBlack = false});
factory _$ThemePropsImpl.fromJson(Map<String, dynamic> json) =>
_$$ThemePropsImplFromJson(json);
@@ -1865,14 +1845,11 @@ class _$ThemePropsImpl implements _ThemeProps {
final ThemeMode themeMode;
@override
@JsonKey()
final bool prueBlack;
@override
@JsonKey()
final FontFamily fontFamily;
final bool pureBlack;
@override
String toString() {
return 'ThemeProps(primaryColor: $primaryColor, themeMode: $themeMode, prueBlack: $prueBlack, fontFamily: $fontFamily)';
return 'ThemeProps(primaryColor: $primaryColor, themeMode: $themeMode, pureBlack: $pureBlack)';
}
@override
@@ -1884,16 +1861,14 @@ class _$ThemePropsImpl implements _ThemeProps {
other.primaryColor == primaryColor) &&
(identical(other.themeMode, themeMode) ||
other.themeMode == themeMode) &&
(identical(other.prueBlack, prueBlack) ||
other.prueBlack == prueBlack) &&
(identical(other.fontFamily, fontFamily) ||
other.fontFamily == fontFamily));
(identical(other.pureBlack, pureBlack) ||
other.pureBlack == pureBlack));
}
@JsonKey(includeFromJson: false, includeToJson: false)
@override
int get hashCode =>
Object.hash(runtimeType, primaryColor, themeMode, prueBlack, fontFamily);
Object.hash(runtimeType, primaryColor, themeMode, pureBlack);
/// Create a copy of ThemeProps
/// with the given fields replaced by the non-null parameter values.
@@ -1915,8 +1890,7 @@ abstract class _ThemeProps implements ThemeProps {
const factory _ThemeProps(
{final int? primaryColor,
final ThemeMode themeMode,
final bool prueBlack,
final FontFamily fontFamily}) = _$ThemePropsImpl;
final bool pureBlack}) = _$ThemePropsImpl;
factory _ThemeProps.fromJson(Map<String, dynamic> json) =
_$ThemePropsImpl.fromJson;
@@ -1926,9 +1900,7 @@ abstract class _ThemeProps implements ThemeProps {
@override
ThemeMode get themeMode;
@override
bool get prueBlack;
@override
FontFamily get fontFamily;
bool get pureBlack;
/// Create a copy of ThemeProps
/// with the given fields replaced by the non-null parameter values.

View File

@@ -224,18 +224,14 @@ _$ThemePropsImpl _$$ThemePropsImplFromJson(Map<String, dynamic> json) =>
primaryColor: (json['primaryColor'] as num?)?.toInt(),
themeMode: $enumDecodeNullable(_$ThemeModeEnumMap, json['themeMode']) ??
ThemeMode.system,
prueBlack: json['prueBlack'] as bool? ?? false,
fontFamily:
$enumDecodeNullable(_$FontFamilyEnumMap, json['fontFamily']) ??
FontFamily.system,
pureBlack: json['pureBlack'] as bool? ?? false,
);
Map<String, dynamic> _$$ThemePropsImplToJson(_$ThemePropsImpl instance) =>
<String, dynamic>{
'primaryColor': instance.primaryColor,
'themeMode': _$ThemeModeEnumMap[instance.themeMode]!,
'prueBlack': instance.prueBlack,
'fontFamily': _$FontFamilyEnumMap[instance.fontFamily]!,
'pureBlack': instance.pureBlack,
};
const _$ThemeModeEnumMap = {
@@ -244,13 +240,6 @@ const _$ThemeModeEnumMap = {
ThemeMode.dark: 'dark',
};
const _$FontFamilyEnumMap = {
FontFamily.system: 'system',
FontFamily.miSans: 'miSans',
FontFamily.twEmoji: 'twEmoji',
FontFamily.icon: 'icon',
};
_$ConfigImpl _$$ConfigImplFromJson(Map<String, dynamic> json) => _$ConfigImpl(
appSetting: json['appSetting'] == null
? defaultAppSettingProps

View File

@@ -3325,6 +3325,154 @@ abstract class _DashboardState implements DashboardState {
throw _privateConstructorUsedError;
}
/// @nodoc
mixin _$ProxyCardState {
String get proxyName => throw _privateConstructorUsedError;
String? get testUrl => throw _privateConstructorUsedError;
/// Create a copy of ProxyCardState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
$ProxyCardStateCopyWith<ProxyCardState> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $ProxyCardStateCopyWith<$Res> {
factory $ProxyCardStateCopyWith(
ProxyCardState value, $Res Function(ProxyCardState) then) =
_$ProxyCardStateCopyWithImpl<$Res, ProxyCardState>;
@useResult
$Res call({String proxyName, String? testUrl});
}
/// @nodoc
class _$ProxyCardStateCopyWithImpl<$Res, $Val extends ProxyCardState>
implements $ProxyCardStateCopyWith<$Res> {
_$ProxyCardStateCopyWithImpl(this._value, this._then);
// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;
/// Create a copy of ProxyCardState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? proxyName = null,
Object? testUrl = freezed,
}) {
return _then(_value.copyWith(
proxyName: null == proxyName
? _value.proxyName
: proxyName // ignore: cast_nullable_to_non_nullable
as String,
testUrl: freezed == testUrl
? _value.testUrl
: testUrl // ignore: cast_nullable_to_non_nullable
as String?,
) as $Val);
}
}
/// @nodoc
abstract class _$$ProxyCardStateImplCopyWith<$Res>
implements $ProxyCardStateCopyWith<$Res> {
factory _$$ProxyCardStateImplCopyWith(_$ProxyCardStateImpl value,
$Res Function(_$ProxyCardStateImpl) then) =
__$$ProxyCardStateImplCopyWithImpl<$Res>;
@override
@useResult
$Res call({String proxyName, String? testUrl});
}
/// @nodoc
class __$$ProxyCardStateImplCopyWithImpl<$Res>
extends _$ProxyCardStateCopyWithImpl<$Res, _$ProxyCardStateImpl>
implements _$$ProxyCardStateImplCopyWith<$Res> {
__$$ProxyCardStateImplCopyWithImpl(
_$ProxyCardStateImpl _value, $Res Function(_$ProxyCardStateImpl) _then)
: super(_value, _then);
/// Create a copy of ProxyCardState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? proxyName = null,
Object? testUrl = freezed,
}) {
return _then(_$ProxyCardStateImpl(
proxyName: null == proxyName
? _value.proxyName
: proxyName // ignore: cast_nullable_to_non_nullable
as String,
testUrl: freezed == testUrl
? _value.testUrl
: testUrl // ignore: cast_nullable_to_non_nullable
as String?,
));
}
}
/// @nodoc
class _$ProxyCardStateImpl implements _ProxyCardState {
const _$ProxyCardStateImpl({required this.proxyName, this.testUrl});
@override
final String proxyName;
@override
final String? testUrl;
@override
String toString() {
return 'ProxyCardState(proxyName: $proxyName, testUrl: $testUrl)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$ProxyCardStateImpl &&
(identical(other.proxyName, proxyName) ||
other.proxyName == proxyName) &&
(identical(other.testUrl, testUrl) || other.testUrl == testUrl));
}
@override
int get hashCode => Object.hash(runtimeType, proxyName, testUrl);
/// Create a copy of ProxyCardState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$ProxyCardStateImplCopyWith<_$ProxyCardStateImpl> get copyWith =>
__$$ProxyCardStateImplCopyWithImpl<_$ProxyCardStateImpl>(
this, _$identity);
}
abstract class _ProxyCardState implements ProxyCardState {
const factory _ProxyCardState(
{required final String proxyName,
final String? testUrl}) = _$ProxyCardStateImpl;
@override
String get proxyName;
@override
String? get testUrl;
/// Create a copy of ProxyCardState
/// with the given fields replaced by the non-null parameter values.
@override
@JsonKey(includeFromJson: false, includeToJson: false)
_$$ProxyCardStateImplCopyWith<_$ProxyCardStateImpl> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
mixin _$VpnState {
TunStack get stack => throw _privateConstructorUsedError;

View File

@@ -200,6 +200,14 @@ class DashboardState with _$DashboardState {
}) = _DashboardState;
}
@freezed
class ProxyCardState with _$ProxyCardState {
const factory ProxyCardState({
required String proxyName,
String? testUrl,
}) = _ProxyCardState;
}
@freezed
class VpnState with _$VpnState {
const factory VpnState({

View File

@@ -23,7 +23,7 @@ class HomePage extends StatelessWidget {
final navigationItems = state.navigationItems;
final pageLabel = state.pageLabel;
final index = navigationItems.lastIndexWhere(
(element) => element.label == pageLabel,
(element) => element.label == pageLabel,
);
final currentIndex = index == -1 ? 0 : index;
final navigationBar = CommonNavigationBar(
@@ -32,9 +32,9 @@ class HomePage extends StatelessWidget {
currentIndex: currentIndex,
);
final bottomNavigationBar =
viewMode == ViewMode.mobile ? navigationBar : null;
viewMode == ViewMode.mobile ? navigationBar : null;
final sideNavigationBar =
viewMode != ViewMode.mobile ? navigationBar : null;
viewMode != ViewMode.mobile ? navigationBar : null;
return CommonScaffold(
key: globalState.homeScaffoldKey,
title: Intl.message(
@@ -62,7 +62,7 @@ class _HomePageViewState extends ConsumerState<_HomePageView> {
_updatePageController(List<NavigationItem> navigationItems) {
final pageLabel = globalState.appState.pageLabel;
final index = navigationItems.lastIndexWhere(
(element) => element.label == pageLabel,
(element) => element.label == pageLabel,
);
final pageIndex = index == -1 ? 0 : index;
if (globalState.pageController != null) {
@@ -155,17 +155,20 @@ class CommonNavigationBar extends ConsumerWidget {
Widget build(BuildContext context, ref) {
_updateSafeMessageOffset(context);
if (viewMode == ViewMode.mobile) {
return NavigationBar(
destinations: navigationItems
.map(
(e) => NavigationDestination(
icon: e.icon,
label: Intl.message(e.label.name),
),
)
.toList(),
onDestinationSelected: globalState.appController.toPage,
selectedIndex: currentIndex,
return NavigationBarTheme(
data: _NavigationBarDefaultsM3(context),
child: NavigationBar(
destinations: navigationItems
.map(
(e) => NavigationDestination(
icon: e.icon,
label: Intl.message(e.label.name),
),
)
.toList(),
onDestinationSelected: globalState.appController.toPage,
selectedIndex: currentIndex,
),
);
}
final showLabel = ref.watch(appSettingProvider).showLabel;
@@ -185,22 +188,22 @@ class CommonNavigationBar extends ConsumerWidget {
color: context.colorScheme.onSurfaceVariant,
),
selectedLabelTextStyle:
context.textTheme.labelLarge!.copyWith(
context.textTheme.labelLarge!.copyWith(
color: context.colorScheme.onSurface,
),
unselectedLabelTextStyle:
context.textTheme.labelLarge!.copyWith(
context.textTheme.labelLarge!.copyWith(
color: context.colorScheme.onSurface,
),
destinations: navigationItems
.map(
(e) => NavigationRailDestination(
icon: e.icon,
label: Text(
Intl.message(e.label.name),
),
),
)
icon: e.icon,
label: Text(
Intl.message(e.label.name),
),
),
)
.toList(),
onDestinationSelected: globalState.appController.toPage,
extended: false,
@@ -219,9 +222,9 @@ class CommonNavigationBar extends ConsumerWidget {
onPressed: () {
ref.read(appSettingProvider.notifier).updateState(
(state) => state.copyWith(
showLabel: !state.showLabel,
),
);
showLabel: !state.showLabel,
),
);
},
icon: const Icon(Icons.menu),
),
@@ -233,3 +236,59 @@ class CommonNavigationBar extends ConsumerWidget {
);
}
}
class _NavigationBarDefaultsM3 extends NavigationBarThemeData {
_NavigationBarDefaultsM3(this.context)
: super(
height: 80.0,
elevation: 3.0,
labelBehavior: NavigationDestinationLabelBehavior.alwaysShow,
);
final BuildContext context;
late final ColorScheme _colors = Theme.of(context).colorScheme;
late final TextTheme _textTheme = Theme.of(context).textTheme;
@override
Color? get backgroundColor => _colors.surfaceContainer;
@override
Color? get shadowColor => Colors.transparent;
@override
Color? get surfaceTintColor => Colors.transparent;
@override
WidgetStateProperty<IconThemeData?>? get iconTheme {
return WidgetStateProperty.resolveWith((Set<WidgetState> states) {
return IconThemeData(
size: 24.0,
color: states.contains(WidgetState.disabled)
? _colors.onSurfaceVariant.withOpacity(0.38)
: states.contains(WidgetState.selected)
? _colors.onSecondaryContainer
: _colors.onSurfaceVariant,
);
});
}
@override
Color? get indicatorColor => _colors.secondaryContainer;
@override
ShapeBorder? get indicatorShape => const StadiumBorder();
@override
WidgetStateProperty<TextStyle?>? get labelTextStyle {
return WidgetStateProperty.resolveWith((Set<WidgetState> states) {
final TextStyle style = _textTheme.labelMedium!;
return style.apply(
overflow: TextOverflow.ellipsis,
color: states.contains(WidgetState.disabled)
? _colors.onSurfaceVariant.withOpacity(0.38)
: states.contains(WidgetState.selected)
? _colors.onSurface
: _colors.onSurfaceVariant);
});
}
}

View File

@@ -7,7 +7,6 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'generated/app.g.dart';
@riverpod
class Logs extends _$Logs with AutoDisposeNotifierMixin {
@override
@@ -336,4 +335,3 @@ class DelayDataSource extends _$DelayDataSource with AutoDisposeNotifierMixin {
}
}
}

View File

@@ -24,7 +24,7 @@ final currentGroupsStateProvider = AutoDisposeProvider<GroupsState>.internal(
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef CurrentGroupsStateRef = AutoDisposeProviderRef<GroupsState>;
String _$navigationsStateHash() => r'3c57f9161625f0376679cfe8b1cce0beadd709a7';
String _$navigationsStateHash() => r'802ae70cc8b7d7f5620b340911da89d74960bfbd';
/// See also [navigationsState].
@ProviderFor(navigationsState)
@@ -95,7 +95,7 @@ final clashConfigStateProvider = AutoDisposeProvider<ClashConfigState>.internal(
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef ClashConfigStateRef = AutoDisposeProviderRef<ClashConfigState>;
String _$proxyStateHash() => r'418464d2ab29bb701ff001ca80396526fd2c8d3a';
String _$proxyStateHash() => r'61ec20fcf35118aca445719c83e77e7d237f5570';
/// See also [proxyState].
@ProviderFor(proxyState)
@@ -111,7 +111,7 @@ final proxyStateProvider = AutoDisposeProvider<ProxyState>.internal(
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef ProxyStateRef = AutoDisposeProviderRef<ProxyState>;
String _$trayStateHash() => r'06ff742a92893667a30bc6a25d13594d83dd74fc';
String _$trayStateHash() => r'39ff84c50ad9c9cc666fa2538fe13ec0d7236b2e';
/// See also [trayState].
@ProviderFor(trayState)
@@ -292,7 +292,7 @@ final groupNamesStateProvider = AutoDisposeProvider<GroupNamesState>.internal(
// ignore: unused_element
typedef GroupNamesStateRef = AutoDisposeProviderRef<GroupNamesState>;
String _$proxyGroupSelectorStateHash() =>
r'b76f5ad536469e11a4ffa6a262dd4df61d280823';
r'5bc86d13286c6c859f0b874235a281122cc612ba';
/// Copied from Dart SDK
class _SystemHash {
@@ -766,7 +766,7 @@ class _GetRealTestUrlProviderElement extends AutoDisposeProviderElement<String>
String? get testUrl => (origin as GetRealTestUrlProvider).testUrl;
}
String _$getDelayHash() => r'dbc584d16f24abbc548d4c560ef50d172db23818';
String _$getDelayHash() => r'b5920ac7de0aaadb8ff63fac993bd90ff87cd25a';
/// See also [getDelay].
@ProviderFor(getDelay)
@@ -1108,29 +1108,29 @@ final getProxiesColumnsProvider = AutoDisposeProvider<int>.internal(
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef GetProxiesColumnsRef = AutoDisposeProviderRef<int>;
String _$getRealProxyNameHash() => r'47be6d115aa170f9bff610ec2cf7669e168bf472';
String _$getProxyCardStateHash() => r'0f131148cb5ed60c9c4c4f31fbe32f114ac346bb';
/// See also [getRealProxyName].
@ProviderFor(getRealProxyName)
const getRealProxyNameProvider = GetRealProxyNameFamily();
/// See also [getProxyCardState].
@ProviderFor(getProxyCardState)
const getProxyCardStateProvider = GetProxyCardStateFamily();
/// See also [getRealProxyName].
class GetRealProxyNameFamily extends Family<String> {
/// See also [getRealProxyName].
const GetRealProxyNameFamily();
/// See also [getProxyCardState].
class GetProxyCardStateFamily extends Family<ProxyCardState> {
/// See also [getProxyCardState].
const GetProxyCardStateFamily();
/// See also [getRealProxyName].
GetRealProxyNameProvider call(
/// See also [getProxyCardState].
GetProxyCardStateProvider call(
String proxyName,
) {
return GetRealProxyNameProvider(
return GetProxyCardStateProvider(
proxyName,
);
}
@override
GetRealProxyNameProvider getProviderOverride(
covariant GetRealProxyNameProvider provider,
GetProxyCardStateProvider getProviderOverride(
covariant GetProxyCardStateProvider provider,
) {
return call(
provider.proxyName,
@@ -1149,32 +1149,32 @@ class GetRealProxyNameFamily extends Family<String> {
_allTransitiveDependencies;
@override
String? get name => r'getRealProxyNameProvider';
String? get name => r'getProxyCardStateProvider';
}
/// See also [getRealProxyName].
class GetRealProxyNameProvider extends AutoDisposeProvider<String> {
/// See also [getRealProxyName].
GetRealProxyNameProvider(
/// See also [getProxyCardState].
class GetProxyCardStateProvider extends AutoDisposeProvider<ProxyCardState> {
/// See also [getProxyCardState].
GetProxyCardStateProvider(
String proxyName,
) : this._internal(
(ref) => getRealProxyName(
ref as GetRealProxyNameRef,
(ref) => getProxyCardState(
ref as GetProxyCardStateRef,
proxyName,
),
from: getRealProxyNameProvider,
name: r'getRealProxyNameProvider',
from: getProxyCardStateProvider,
name: r'getProxyCardStateProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$getRealProxyNameHash,
dependencies: GetRealProxyNameFamily._dependencies,
: _$getProxyCardStateHash,
dependencies: GetProxyCardStateFamily._dependencies,
allTransitiveDependencies:
GetRealProxyNameFamily._allTransitiveDependencies,
GetProxyCardStateFamily._allTransitiveDependencies,
proxyName: proxyName,
);
GetRealProxyNameProvider._internal(
GetProxyCardStateProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
@@ -1188,12 +1188,12 @@ class GetRealProxyNameProvider extends AutoDisposeProvider<String> {
@override
Override overrideWith(
String Function(GetRealProxyNameRef provider) create,
ProxyCardState Function(GetProxyCardStateRef provider) create,
) {
return ProviderOverride(
origin: this,
override: GetRealProxyNameProvider._internal(
(ref) => create(ref as GetRealProxyNameRef),
override: GetProxyCardStateProvider._internal(
(ref) => create(ref as GetProxyCardStateRef),
from: from,
name: null,
dependencies: null,
@@ -1205,13 +1205,13 @@ class GetRealProxyNameProvider extends AutoDisposeProvider<String> {
}
@override
AutoDisposeProviderElement<String> createElement() {
return _GetRealProxyNameProviderElement(this);
AutoDisposeProviderElement<ProxyCardState> createElement() {
return _GetProxyCardStateProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is GetRealProxyNameProvider && other.proxyName == proxyName;
return other is GetProxyCardStateProvider && other.proxyName == proxyName;
}
@override
@@ -1225,17 +1225,18 @@ class GetRealProxyNameProvider extends AutoDisposeProvider<String> {
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin GetRealProxyNameRef on AutoDisposeProviderRef<String> {
mixin GetProxyCardStateRef on AutoDisposeProviderRef<ProxyCardState> {
/// The parameter `proxyName` of this provider.
String get proxyName;
}
class _GetRealProxyNameProviderElement
extends AutoDisposeProviderElement<String> with GetRealProxyNameRef {
_GetRealProxyNameProviderElement(super.provider);
class _GetProxyCardStateProviderElement
extends AutoDisposeProviderElement<ProxyCardState>
with GetProxyCardStateRef {
_GetProxyCardStateProviderElement(super.provider);
@override
String get proxyName => (origin as GetRealProxyNameProvider).proxyName;
String get proxyName => (origin as GetProxyCardStateProvider).proxyName;
}
String _$getProxyNameHash() => r'204a477ea18c8e1eeef55b3efd3d47e45b0d2350';
@@ -1500,7 +1501,7 @@ class _GetSelectedProxyNameProviderElement
String get groupName => (origin as GetSelectedProxyNameProvider).groupName;
}
String _$getProxyDescHash() => r'7c06402957387c35d9dc515ca109f8f7dbb481b0';
String _$getProxyDescHash() => r'c173fe2393d9c4f5d5d17480e69f9126bb76a17d';
/// See also [getProxyDesc].
@ProviderFor(getProxyDesc)

View File

@@ -29,7 +29,8 @@ GroupsState currentGroupsState(Ref ref) {
@riverpod
NavigationItemsState navigationsState(Ref ref) {
final openLogs = ref.watch(appSettingProvider).openLogs;
final hasProxies = ref.watch(currentGroupsStateProvider.select((state)=>state.value.isNotEmpty));
final hasProxies = ref.watch(
currentGroupsStateProvider.select((state) => state.value.isNotEmpty));
return NavigationItemsState(
value: navigation.getItems(
openLogs: openLogs,
@@ -79,7 +80,7 @@ ClashConfigState clashConfigState(Ref ref) {
@riverpod
ProxyState proxyState(Ref ref) {
final isStart = ref.watch(runTimeProvider.select((state)=>state != null));
final isStart = ref.watch(runTimeProvider.select((state) => state != null));
final networkProps = ref.watch(networkSettingProvider);
final mixedPort = ref.watch(
patchClashConfigProvider.select((state) => state.mixedPort),
@@ -94,7 +95,7 @@ ProxyState proxyState(Ref ref) {
@riverpod
TrayState trayState(Ref ref) {
final isStart = ref.watch(runTimeProvider.select((state)=>state != null));
final isStart = ref.watch(runTimeProvider.select((state) => state != null));
final networkProps = ref.watch(networkSettingProvider);
final clashConfig = ref.watch(
patchClashConfigProvider,
@@ -114,7 +115,7 @@ TrayState trayState(Ref ref) {
return TrayState(
mode: clashConfig.mode,
port: clashConfig.mixedPort,
autoLaunch: appSetting.autoRun,
autoLaunch: appSetting.autoLaunch,
systemProxy: networkProps.systemProxy,
tunEnable: clashConfig.tun.enable,
isStart: isStart,
@@ -255,9 +256,6 @@ GroupNamesState groupNamesState(Ref ref) {
@riverpod
ProxyGroupSelectorState proxyGroupSelectorState(Ref ref, String groupName) {
final testUrl = ref.watch(appSettingProvider.select(
(state) => state.testUrl,
));
final proxiesStyle = ref.watch(
proxiesStyleSettingProvider,
);
@@ -269,7 +267,7 @@ ProxyGroupSelectorState proxyGroupSelectorState(Ref ref, String groupName) {
final sortNum = ref.watch(sortNumProvider);
final columns = ref.watch(getProxiesColumnsProvider);
return ProxyGroupSelectorState(
testUrl: testUrl,
testUrl: group?.testUrl,
proxiesSortType: proxiesStyle.sortType,
proxyCardType: proxiesStyle.cardType,
sortNum: sortNum,
@@ -338,11 +336,21 @@ int? getDelay(
String? testUrl,
}) {
final currentTestUrl = ref.watch(getRealTestUrlProvider(testUrl));
return ref.watch(
delayDataSourceProvider.select(
(state) => state[currentTestUrl]?[proxyName],
final proxyCardState = ref.watch(
getProxyCardStateProvider(
proxyName,
),
);
final delay = ref.watch(
delayDataSourceProvider.select(
(state) {
final delayMap =
state[proxyCardState.testUrl.getSafeValue(currentTestUrl)];
return delayMap?[proxyCardState.proxyName];
},
),
);
return delay;
}
@riverpod
@@ -392,30 +400,34 @@ int getProxiesColumns(Ref ref) {
return other.getProxiesColumns(viewWidth, proxiesLayout);
}
String _getRealProxyName(
ProxyCardState _getProxyCardState(
List<Group> groups,
SelectedMap selectedMap,
String proxyName,
ProxyCardState proxyDelayState,
) {
if (proxyName.isEmpty) return proxyName;
final index = groups.indexWhere((element) => element.name == proxyName);
if (index == -1) return proxyName;
if (proxyDelayState.proxyName.isEmpty) return proxyDelayState;
final index =
groups.indexWhere((element) => element.name == proxyDelayState.proxyName);
if (index == -1) return proxyDelayState;
final group = groups[index];
final currentSelectedName =
group.getCurrentSelectedName(selectedMap[proxyName] ?? '');
if (currentSelectedName.isEmpty) return proxyName;
return _getRealProxyName(
final currentSelectedName = group
.getCurrentSelectedName(selectedMap[proxyDelayState.proxyName] ?? '');
return _getProxyCardState(
groups,
selectedMap,
proxyName,
proxyDelayState.copyWith(
proxyName: currentSelectedName,
testUrl: group.testUrl,
),
);
}
@riverpod
String getRealProxyName(Ref ref, String proxyName) {
ProxyCardState getProxyCardState(Ref ref, String proxyName) {
final groups = ref.watch(groupsProvider);
final selectedMap = ref.watch(selectedMapProvider);
return _getRealProxyName(groups, selectedMap, proxyName);
return _getProxyCardState(
groups, selectedMap, ProxyCardState(proxyName: proxyName));
}
@riverpod
@@ -445,6 +457,7 @@ String getProxyDesc(Ref ref, Proxy proxy) {
final groups = ref.watch(groupsProvider);
final index = groups.indexWhere((element) => element.name == proxy.name);
if (index == -1) return proxy.type;
return "${proxy.type}(${groups[index].now ?? '*'})";
final state = ref.watch(getProxyCardStateProvider(proxy.name));
return "${proxy.type}(${state.proxyName.isNotEmpty ? state.proxyName : '*'})";
}
}

View File

@@ -320,7 +320,6 @@ class ListPage<T> extends StatelessWidget {
@override
Widget build(BuildContext context) {
print("daad===>$items");
return FloatLayout(
floatingWidget: FloatWrapper(
child: FloatingActionButton(

View File

@@ -186,48 +186,46 @@ class CommonScaffoldState extends State<CommonScaffold> {
@override
Widget build(BuildContext context) {
final body = SafeArea(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ValueListenableBuilder(
valueListenable: _keywordsNotifier,
builder: (_, keywords, __) {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (_onKeywordsUpdate != null) {
_onKeywordsUpdate!(keywords);
}
});
if (keywords.isEmpty) {
return SizedBox();
final body = Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ValueListenableBuilder(
valueListenable: _keywordsNotifier,
builder: (_, keywords, __) {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (_onKeywordsUpdate != null) {
_onKeywordsUpdate!(keywords);
}
return Padding(
padding: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 16,
),
child: Wrap(
runSpacing: 8,
spacing: 8,
children: [
for (final keyword in keywords)
CommonChip(
label: keyword,
type: ChipType.delete,
onPressed: () {
_deleteKeyword(keyword);
},
),
],
),
);
},
),
Expanded(
child: widget.body,
),
],
),
});
if (keywords.isEmpty) {
return SizedBox();
}
return Padding(
padding: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 16,
),
child: Wrap(
runSpacing: 8,
spacing: 8,
children: [
for (final keyword in keywords)
CommonChip(
label: keyword,
type: ChipType.delete,
onPressed: () {
_deleteKeyword(keyword);
},
),
],
),
);
},
),
Expanded(
child: widget.body,
),
],
);
final scaffold = Scaffold(
appBar: PreferredSize(

View File

@@ -59,6 +59,7 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">

View File

@@ -43,5 +43,7 @@
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>FLTEnableImpeller</key>
<true/>
</dict>
</plist>

View File

@@ -5,23 +5,23 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834
sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab"
url: "https://pub.dev"
source: hosted
version: "72.0.0"
version: "76.0.0"
_macros:
dependency: transitive
description: dart
source: sdk
version: "0.3.2"
version: "0.3.3"
analyzer:
dependency: transitive
description:
name: analyzer
sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139
sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e"
url: "https://pub.dev"
source: hosted
version: "6.7.0"
version: "6.11.0"
analyzer_plugin:
dependency: transitive
description:
@@ -66,18 +66,18 @@ packages:
dependency: transitive
description:
name: async
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
url: "https://pub.dev"
source: hosted
version: "2.11.0"
version: "2.12.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "2.1.2"
build:
dependency: transitive
description:
@@ -170,10 +170,10 @@ packages:
dependency: transitive
description:
name: characters
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
url: "https://pub.dev"
source: hosted
version: "1.3.0"
version: "1.4.0"
checked_yaml:
dependency: transitive
description:
@@ -202,10 +202,10 @@ packages:
dependency: transitive
description:
name: clock
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.dev"
source: hosted
version: "1.1.1"
version: "1.1.2"
code_builder:
dependency: transitive
description:
@@ -218,10 +218,10 @@ packages:
dependency: "direct main"
description:
name: collection
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.dev"
source: hosted
version: "1.18.0"
version: "1.19.1"
connectivity_plus:
dependency: "direct main"
description:
@@ -290,10 +290,10 @@ packages:
dependency: transitive
description:
name: custom_lint_visitor
sha256: "8aeb3b6ae2bb765e7716b93d1d10e8356d04e0ff6d7592de6ee04e0dd7d6587d"
sha256: bfe9b7a09c4775a587b58d10ebb871d4fe618237639b1e84d5ec62d7dfef25f9
url: "https://pub.dev"
source: hosted
version: "1.0.0+6.7.0"
version: "1.0.0+6.11.0"
dart_style:
dependency: transitive
description:
@@ -338,10 +338,10 @@ packages:
dependency: "direct main"
description:
name: dio
sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260"
sha256: "253a18bbd4851fecba42f7343a1df3a9a4c1d31a2c1b37e221086b4fa8c8dbc9"
url: "https://pub.dev"
source: hosted
version: "5.7.0"
version: "5.8.0+1"
dio_web_adapter:
dependency: transitive
description:
@@ -378,10 +378,10 @@ packages:
dependency: transitive
description:
name: fake_async
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
version: "1.3.2"
ffi:
dependency: "direct main"
description:
@@ -538,6 +538,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.2"
google_fonts:
dependency: "direct main"
description:
name: google_fonts
sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82
url: "https://pub.dev"
source: hosted
version: "6.2.1"
graphs:
dependency: transitive
description:
@@ -758,18 +766,18 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
url: "https://pub.dev"
source: hosted
version: "10.0.5"
version: "10.0.8"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
url: "https://pub.dev"
source: hosted
version: "3.0.5"
version: "3.0.9"
leak_tracker_testing:
dependency: transitive
description:
@@ -806,18 +814,18 @@ packages:
dependency: transitive
description:
name: macros
sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536"
sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656"
url: "https://pub.dev"
source: hosted
version: "0.1.2-main.4"
version: "0.1.3-main.0"
matcher:
dependency: transitive
description:
name: matcher
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
url: "https://pub.dev"
source: hosted
version: "0.12.16+1"
version: "0.12.17"
material_color_utilities:
dependency: transitive
description:
@@ -838,10 +846,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
url: "https://pub.dev"
source: hosted
version: "1.15.0"
version: "1.16.0"
mime:
dependency: transitive
description:
@@ -902,10 +910,10 @@ packages:
dependency: "direct main"
description:
name: path
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.dev"
source: hosted
version: "1.9.0"
version: "1.9.1"
path_provider:
dependency: "direct main"
description:
@@ -1213,7 +1221,7 @@ packages:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
version: "0.0.0"
source_gen:
dependency: transitive
description:
@@ -1234,10 +1242,10 @@ packages:
dependency: transitive
description:
name: source_span
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
url: "https://pub.dev"
source: hosted
version: "1.10.0"
version: "1.10.1"
sprintf:
dependency: transitive
description:
@@ -1290,10 +1298,10 @@ packages:
dependency: transitive
description:
name: stack_trace
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.dev"
source: hosted
version: "1.11.1"
version: "1.12.1"
state_notifier:
dependency: transitive
description:
@@ -1306,10 +1314,10 @@ packages:
dependency: transitive
description:
name: stream_channel
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.4"
stream_transform:
dependency: transitive
description:
@@ -1322,10 +1330,10 @@ packages:
dependency: transitive
description:
name: string_scanner
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
version: "1.4.1"
synchronized:
dependency: transitive
description:
@@ -1338,18 +1346,18 @@ packages:
dependency: transitive
description:
name: term_glyph
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
url: "https://pub.dev"
source: hosted
version: "0.7.2"
version: "0.7.4"
timing:
dependency: transitive
description:
@@ -1466,10 +1474,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
url: "https://pub.dev"
source: hosted
version: "14.2.5"
version: "14.3.1"
watcher:
dependency: transitive
description:
@@ -1582,5 +1590,5 @@ packages:
source: hosted
version: "2.2.1"
sdks:
dart: ">=3.5.0 <4.0.0"
dart: ">=3.7.0-0 <4.0.0"
flutter: ">=3.24.0"

View File

@@ -1,7 +1,7 @@
name: fl_clash
description: A multi-platform proxy client based on ClashMeta, simple and easy to use, open-source and ad-free.
publish_to: 'none'
version: 0.8.78+202503052
version: 0.8.79+202503071
environment:
sdk: '>=3.1.0 <4.0.0'
@@ -10,11 +10,10 @@ dependencies:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: ^0.19.0
intl: any
path_provider: ^2.1.0
path: ^1.9.0
shared_preferences: ^2.5.1
# provider: ^6.0.5
window_manager: ^0.4.3
dynamic_color: ^1.7.0
proxy:
@@ -36,7 +35,7 @@ dependencies:
freezed_annotation: ^2.4.1
image_picker: ^1.1.2
webdav_client: ^1.2.2
dio: ^5.4.3+1
dio: ^5.8.0+1
win32: ^5.5.1
ffi: ^2.1.2
re_editor: ^0.6.0
@@ -55,6 +54,7 @@ dependencies:
flutter_riverpod: ^2.6.1
riverpod_annotation: ^2.6.1
riverpod: ^2.6.1
google_fonts: ^6.2.1
dev_dependencies:
flutter_test:
sdk: flutter
@@ -79,9 +79,6 @@ flutter:
- family: Twemoji
fonts:
- asset: assets/fonts/Twemoji.Mozilla.ttf
- family: MiSans
fonts:
- asset: assets/fonts/MiSans-Regular.ttf
- family: Icons
fonts:
- asset: assets/fonts/Icons.ttf

View File

@@ -1,60 +0,0 @@
// ignore_for_file: avoid_print
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
Future<void> main() async {
// final cmdList = [];
// final ignoreHosts = "\"ass\"";
// cmdList.add(
// ["gsettings", "set", "org.gnome.system.proxy", "port", ignoreHosts],
// );
// print(cmdList.first);
final internetAddress = InternetAddress(
"/tmp/FlClashSocket.sock",
type: InternetAddressType.unix,
);
final socket = await Socket.connect(internetAddress, 0);
socket
.transform(
StreamTransformer<Uint8List, String>.fromHandlers(
handleData: (Uint8List data, EventSink<String> sink) {
sink.add(utf8.decode(data));
},
),
)
.transform(LineSplitter())
.listen((res) {
print(res);
});
}
startService() async {
try {
// 创建服务器
final server = await HttpServer.bind("127.0.0.1", 10001);
print('服务器正在监听 ${server.address.address}:${server.port}');
// 监听请求
await for (HttpRequest request in server) {
handleRequest(request);
}
} catch (e) {
print('服务器错误: $e');
}
}
void handleRequest(HttpRequest request) {
print(request.headers);
// 处理请求
request.response
..statusCode = HttpStatus.ok
..headers.contentType = ContentType.html
..write('<html><body><h1>Hello, Dart Server!</h1></body></html>');
// 完成响应
request.response.close();
}