mirror of
https://github.com/weyne85/rustdesk.git
synced 2025-10-29 17:00:05 +00:00
add android translate
This commit is contained in:
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hbb/common.dart';
|
||||
import 'package:flutter_hbb/models/chat_model.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../models/model.dart';
|
||||
import 'home_page.dart';
|
||||
|
||||
OverlayEntry? iconOverlayEntry;
|
||||
@@ -13,7 +14,7 @@ ChatPage chatPage = ChatPage();
|
||||
|
||||
class ChatPage extends StatelessWidget implements PageShape {
|
||||
@override
|
||||
final title = "Chat";
|
||||
final title = translate("Chat");
|
||||
|
||||
@override
|
||||
final icon = Icon(Icons.chat);
|
||||
@@ -209,7 +210,7 @@ class _ChatWindowOverlayState extends State<ChatWindowOverlay> {
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Padding(padding: EdgeInsets.symmetric(horizontal: 15),child: Text(
|
||||
"Chat",
|
||||
translate("Chat"),
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontFamily: 'WorkSans',
|
||||
|
||||
@@ -139,12 +139,12 @@ class _FileManagerPageState extends State<FileManagerPage> {
|
||||
itemBuilder: (context) {
|
||||
return [
|
||||
PopupMenuItem(
|
||||
child: Text("删除"),
|
||||
child: Text(translate("Delete")),
|
||||
value: "delete",
|
||||
),
|
||||
PopupMenuItem(
|
||||
child: Text("详细信息"),
|
||||
value: "delete",
|
||||
child: Text(translate("Properties")),
|
||||
value: "properties",
|
||||
enabled: false,
|
||||
)
|
||||
];
|
||||
@@ -255,14 +255,13 @@ class _FileManagerPageState extends State<FileManagerPage> {
|
||||
)),
|
||||
Row(
|
||||
children: [
|
||||
// IconButton(onPressed: () {}, icon: Icon(Icons.sort)),
|
||||
PopupMenuButton<SortBy>(
|
||||
icon: Icon(Icons.sort),
|
||||
itemBuilder: (context) {
|
||||
return SortBy.values
|
||||
.map((e) => PopupMenuItem(
|
||||
child: Text(
|
||||
e.toString().split(".").last.toUpperCase()),
|
||||
translate(e.toString().split(".").last)),
|
||||
value: e,
|
||||
))
|
||||
.toList();
|
||||
@@ -277,7 +276,7 @@ class _FileManagerPageState extends State<FileManagerPage> {
|
||||
children: [
|
||||
Icon(Icons.refresh),
|
||||
SizedBox(width: 5),
|
||||
Text("刷新")
|
||||
Text(translate("Refresh File"))
|
||||
],
|
||||
),
|
||||
value: "refresh",
|
||||
@@ -287,7 +286,7 @@ class _FileManagerPageState extends State<FileManagerPage> {
|
||||
children: [
|
||||
Icon(Icons.check),
|
||||
SizedBox(width: 5),
|
||||
Text("多选")
|
||||
Text(translate("CheckBox"))
|
||||
],
|
||||
),
|
||||
value: "select",
|
||||
@@ -309,7 +308,7 @@ class _FileManagerPageState extends State<FileManagerPage> {
|
||||
? Icons.check_box_outlined
|
||||
: Icons.check_box_outline_blank),
|
||||
SizedBox(width: 5),
|
||||
Text(translate("Toggle Hidden"))
|
||||
Text(translate("Show Hidden Files"))
|
||||
],
|
||||
),
|
||||
value: "hidden",
|
||||
@@ -340,6 +339,10 @@ class _FileManagerPageState extends State<FileManagerPage> {
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
style: flatButtonStyle,
|
||||
onPressed: () => close(false),
|
||||
child: Text(translate("Cancel"))),
|
||||
ElevatedButton(
|
||||
style: flatButtonStyle,
|
||||
onPressed: () {
|
||||
if (name.value.text.isNotEmpty) {
|
||||
@@ -350,11 +353,7 @@ class _FileManagerPageState extends State<FileManagerPage> {
|
||||
close();
|
||||
}
|
||||
},
|
||||
child: Text(translate("OK"))),
|
||||
TextButton(
|
||||
style: flatButtonStyle,
|
||||
onPressed: () => close(false),
|
||||
child: Text(translate("Cancel")))
|
||||
child: Text(translate("OK")))
|
||||
]));
|
||||
} else if (v == "hidden") {
|
||||
model.toggleShowHidden();
|
||||
@@ -381,8 +380,9 @@ class _FileManagerPageState extends State<FileManagerPage> {
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.all(2),
|
||||
// TODO
|
||||
child: Text(
|
||||
"总计: ${model.currentDir.entries.length}个项目",
|
||||
"${translate("Count")}: ${model.currentDir.entries.length}${translate("items")}",
|
||||
style: TextStyle(color: MyTheme.darkGray),
|
||||
),
|
||||
)
|
||||
@@ -394,17 +394,17 @@ class _FileManagerPageState extends State<FileManagerPage> {
|
||||
Widget? bottomSheet() {
|
||||
final state = model.jobState;
|
||||
final isOtherPage = _selectedItems.isOtherPage(model.isLocal);
|
||||
final selectedItemsLength = "${_selectedItems.length} 个项目";
|
||||
final selectedItemsLength = "${_selectedItems.length} ${translate("items")}"; // TODO t
|
||||
final local = _selectedItems.isLocal == null
|
||||
? ""
|
||||
: " [${_selectedItems.isLocal! ? '本地' : '远程'}]";
|
||||
: " [${_selectedItems.isLocal! ? translate("Local") : translate("Remote")}]";
|
||||
|
||||
if (model.selectMode) {
|
||||
if (_selectedItems.length == 0 || !isOtherPage) {
|
||||
// 选择模式 当前选择页面
|
||||
return BottomSheetBody(
|
||||
leading: Icon(Icons.check),
|
||||
title: "已选择",
|
||||
title: translate("Selected"),
|
||||
text: selectedItemsLength + local,
|
||||
onCanceled: () => model.toggleSelectMode(),
|
||||
actions: [
|
||||
@@ -421,7 +421,7 @@ class _FileManagerPageState extends State<FileManagerPage> {
|
||||
// 选择模式 复制目标页面
|
||||
return BottomSheetBody(
|
||||
leading: Icon(Icons.input),
|
||||
title: "粘贴到这里?",
|
||||
title: translate("Paste here?"),
|
||||
text: selectedItemsLength + local,
|
||||
onCanceled: () => model.toggleSelectMode(),
|
||||
actions: [
|
||||
@@ -440,21 +440,21 @@ class _FileManagerPageState extends State<FileManagerPage> {
|
||||
case JobState.inProgress:
|
||||
return BottomSheetBody(
|
||||
leading: CircularProgressIndicator(),
|
||||
title: "正在发送文件...",
|
||||
text: "速度: ${readableFileSize(model.jobProgress.speed)}/s",
|
||||
title: translate("Waiting"),
|
||||
text: "${translate("Speed")}: ${readableFileSize(model.jobProgress.speed)}/s",
|
||||
onCanceled: null,
|
||||
);
|
||||
case JobState.done:
|
||||
return BottomSheetBody(
|
||||
leading: Icon(Icons.check),
|
||||
title: "操作成功!",
|
||||
title: "${translate("Successful")}!",
|
||||
text: "",
|
||||
onCanceled: () => model.jobReset(),
|
||||
);
|
||||
case JobState.error:
|
||||
return BottomSheetBody(
|
||||
leading: Icon(Icons.error),
|
||||
title: "错误!",
|
||||
title: "${translate("Error")}!",
|
||||
text: "",
|
||||
onCanceled: () => model.jobReset(),
|
||||
);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import 'package:device_info/device_info.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hbb/models/model.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
@@ -11,7 +10,7 @@ import '../models/model.dart';
|
||||
|
||||
class ServerPage extends StatelessWidget implements PageShape {
|
||||
@override
|
||||
final title = "Share Screen";
|
||||
final title = translate("Share Screen");
|
||||
|
||||
@override
|
||||
final icon = Icon(Icons.mobile_screen_share);
|
||||
@@ -27,7 +26,7 @@ class ServerPage extends StatelessWidget implements PageShape {
|
||||
enabled: false,
|
||||
),
|
||||
PopupMenuItem(
|
||||
child: Text("Set your own password"),
|
||||
child: Text(translate("Set your own password")),
|
||||
value: "changePW",
|
||||
enabled: false,
|
||||
)
|
||||
@@ -127,7 +126,7 @@ class _ServerInfoState extends State<ServerInfo> {
|
||||
color: Colors.redAccent, size: 24),
|
||||
SizedBox(width: 10),
|
||||
Text(
|
||||
"屏幕共享尚未开启",
|
||||
translate("Service is not running"),
|
||||
style: TextStyle(
|
||||
fontFamily: 'WorkSans',
|
||||
fontWeight: FontWeight.bold,
|
||||
@@ -140,7 +139,7 @@ class _ServerInfoState extends State<ServerInfo> {
|
||||
SizedBox(height: 5),
|
||||
Center(
|
||||
child: Text(
|
||||
"点击[启动服务]或打开Screen Capture 开启共享手机屏幕",
|
||||
translate("android_start_service_tip"),
|
||||
style: TextStyle(fontSize: 12, color: MyTheme.darkGray),
|
||||
))
|
||||
],
|
||||
@@ -170,19 +169,19 @@ class _PermissionCheckerState extends State<PermissionChecker> {
|
||||
serverModel.toggleInput),
|
||||
PermissionRow(translate("File Transfer"), serverModel.fileOk,
|
||||
serverModel.toggleFile),
|
||||
hasAudioPermission?PermissionRow(translate("Audio Capture"), serverModel.inputOk,
|
||||
serverModel.toggleAudio):Text("* 当前安卓版本不支持音频捕获",style: TextStyle(color: MyTheme.darkGray),),
|
||||
hasAudioPermission?PermissionRow(translate("Audio Capture"), serverModel.audioOk,
|
||||
serverModel.toggleAudio):Text("* ${translate("android_version_audio_tip")}",style: TextStyle(color: MyTheme.darkGray),),
|
||||
SizedBox(height: 8),
|
||||
serverModel.mediaOk
|
||||
? ElevatedButton.icon(
|
||||
style: ButtonStyle(
|
||||
backgroundColor: MaterialStateProperty.all(Colors.red)),
|
||||
icon: Icon(Icons.stop),
|
||||
onPressed: serverModel.stopService,
|
||||
onPressed: serverModel.toggleService,
|
||||
label: Text(translate("Stop service")))
|
||||
: ElevatedButton.icon(
|
||||
icon: Icon(Icons.play_arrow),
|
||||
onPressed: serverModel.startService,
|
||||
onPressed: serverModel.toggleService,
|
||||
label: Text(translate("Start Service"))),
|
||||
],
|
||||
));
|
||||
@@ -323,12 +322,6 @@ Widget clientInfo(Client client) {
|
||||
])
|
||||
],
|
||||
),
|
||||
// !client.isFileTransfer?Row(
|
||||
// children: [
|
||||
// client.audio?Icon(Icons.volume_up):SizedBox.shrink(),
|
||||
// client.keyboard?Icon(Icons.mouse):SizedBox.shrink(),
|
||||
// ],
|
||||
// ):SizedBox.shrink()
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import 'home_page.dart';
|
||||
|
||||
class SettingsPage extends StatelessWidget implements PageShape {
|
||||
@override
|
||||
final title = "Settings";
|
||||
final title = translate("Settings");
|
||||
|
||||
@override
|
||||
final icon = Icon(Icons.settings);
|
||||
|
||||
Reference in New Issue
Block a user