diff --git a/example/example_en_US.ts b/example/example_en_US.ts index 8f833c00..67b2234b 100644 --- a/example/example_en_US.ts +++ b/example/example_en_US.ts @@ -634,128 +634,126 @@ MainWindow - - - - + + Dark Mode - - - - + + + + Quit + + + + Are you sure you want to exit the program? + + - Are you sure you want to exit the program? - - - - - Minimize - - + + Friendly Reminder - - + + FluentUI is hidden from the tray, click on the tray to activate the window again - - - - + + + + Cancel - - + + Open in Separate Window - - + + Click Time - - + + Search + + + + Finish + + - Finish + Next - Next - - - - - Previous - - + + Here you can switch to night mode. - - + + Hide Easter eggs - - + + Try a few more clicks!! + + + + Upgrade Tips + + - Upgrade Tips - - - - - FluentUI is currently up to date - - + + -- The current app version - - + + Now go and download the new version? @@ -764,20 +762,20 @@ Updated content: - - + + OK - - + + The current version is already the latest - - + + The network is abnormal @@ -1380,48 +1378,33 @@ Updated content: - - - - + Year - - - - + Month - - - - + Day - - - - + Cancel - - - - + OK - - + + showYear=false @@ -1644,14 +1627,8 @@ My only desire is to be permitted to drive out the traitors and restore the Han. - - - Reload - - - - - + + The image failed to load, please reload @@ -1706,12 +1683,6 @@ My only desire is to be permitted to drive out the traitors and restore the Han. InfoBar that needs to be turned off manually - - - - Loading... - - T_LineChart @@ -1945,26 +1916,6 @@ My only desire is to be permitted to drive out the traitors and restore the Han. Pagination - - - - - - - - <Previous - - - - - - - - - - Next> - - T_PieChart @@ -2267,36 +2218,6 @@ My only desire is to be permitted to drive out the traitors and restore the Han. ShortcutPicker - - - - Activate the Shortcut - - - - - - Press the key combination to change the shortcut - - - - - - Save - - - - - - Cancel - - - - - - Reset - - T_Slider @@ -2766,80 +2687,62 @@ My only desire is to be permitted to drive out the traitors and restore the Han. T_Tour - - - Finish + + + Upload File - Next + Put your files here. + + + + + + + + + + Save - Previous - - - - - - Upload File - - - - - - Put your files here. - - - - - - - - - - Save - - - - - Save your changes. - - + + Other Actions - - + + Click to see other actions. - - + + Begin Tour - - - - + + + + Upload - - + + More diff --git a/example/example_zh_CN.ts b/example/example_zh_CN.ts index 4c020eb9..f8574826 100644 --- a/example/example_zh_CN.ts +++ b/example/example_zh_CN.ts @@ -634,128 +634,126 @@ MainWindow - - - - + + Dark Mode 夜间模式 - - - - + + + + Quit 退出 - - + + Are you sure you want to exit the program? 您确定要退出程序吗 - - + + Minimize 最小化 - - + + Friendly Reminder 友情提示 - - + + FluentUI is hidden from the tray, click on the tray to activate the window again FluentUI 在托盘中处于隐藏状态,单击托盘以再次激活窗口 - - - - + + + + Cancel 取消 - - + + Open in Separate Window 在独立窗口中打开 - - + + Click Time 点击次数 - - + + Search 搜索 - - + + Finish 完成 - - + + Next 下一步 - - + + Previous 上一步 - - + + Here you can switch to night mode. 在这里,您可以切换到夜间模式。 - - + + Hide Easter eggs 隐藏彩蛋 - - + + Try a few more clicks!! 再试几下!! - - + + Upgrade Tips 升级提示 - - + + FluentUI is currently up to date FluentUI 目前最新版本 - - + + -- The current app version -- 当前应用版本 - - + + Now go and download the new version? @@ -768,20 +766,20 @@ Updated content: - - + + OK 确定 - - + + The current version is already the latest 当前版本已经是最新版本 - - + + The network is abnormal 网络异常 @@ -1384,48 +1382,33 @@ Updated content: - - - - + Year - - - - + Month - - - - + Day - - - - + Cancel 取消 - - - - + OK 确定 - - + + showYear=false @@ -1656,14 +1639,12 @@ My only desire is to be permitted to drive out the traitors and restore the Han. 图像 - - Reload - 重新加载 + 重新加载 - - + + The image failed to load, please reload 图片加载失败,请重新加载 @@ -1719,10 +1700,8 @@ My only desire is to be permitted to drive out the traitors and restore the Han. 需要手动关闭的信息栏 - - Loading... - 加载中... + 加载中... @@ -1958,24 +1937,12 @@ My only desire is to be permitted to drive out the traitors and restore the Han. 分页 - - - - - - <Previous - <上一页 + <上一页 - - - - - - Next> - 下一页> + 下一页> @@ -2282,34 +2249,24 @@ My only desire is to be permitted to drive out the traitors and restore the Han. 快捷键选择器 - - Activate the Shortcut - 激活快捷键 + 激活快捷键 - - Press the key combination to change the shortcut - 按下组合键以更改此快捷键 + 按下组合键以更改此快捷键 - - Save - 保存 + 保存 - - Cancel - 取消 + 取消 - - Reset - 重置 + 重置 @@ -2780,80 +2737,74 @@ My only desire is to be permitted to drive out the traitors and restore the Han. T_Tour - - Finish - 完成 + 完成 + + + Next + 下一步 + + + Previous + 上一步 - Next - 下一步 - - - - - Previous - 上一步 - - - - Upload File 上传文件 - - + + Put your files here. 把你的文件放在这里 - - - - - - + + + + + + Save 保存 - - + + Save your changes. 保存更改 - - + + Other Actions 其他操作 - - + + Click to see other actions. 点击查看其他操作 - - + + Begin Tour 开始游览 - - - - + + + + Upload 上传 - - + + More 更多 diff --git a/example/qml-Qt6/App.qml b/example/qml-Qt6/App.qml index 9dfd9891..a36f4961 100644 --- a/example/qml-Qt6/App.qml +++ b/example/qml-Qt6/App.qml @@ -33,7 +33,7 @@ Item { FluNetwork.setInterceptor(function(param){ param.addHeader("Token","000000000000000000000") }) - FluApp.init(app) + FluApp.init(app,Qt.locale(TranslateHelper.current)) FluApp.windowIcon = "qrc:/example/res/image/favicon.ico" FluApp.useSystemAppBar = SettingsHelper.getUseSystemAppBar() FluTheme.darkMode = SettingsHelper.getDarkMode() diff --git a/example/qml-Qt6/page/T_DatePicker.qml b/example/qml-Qt6/page/T_DatePicker.qml index 8d5c4827..fa4e342f 100644 --- a/example/qml-Qt6/page/T_DatePicker.qml +++ b/example/qml-Qt6/page/T_DatePicker.qml @@ -24,11 +24,6 @@ FluScrollablePage{ } FluDatePicker{ current: new Date() - yearText: qsTr("Year") - monthText: qsTr("Month") - dayText: qsTr("Day") - cancelText: qsTr("Cancel") - okText: qsTr("OK") onAccepted: { showSuccess(current.toLocaleDateString()) } diff --git a/example/qml-Qt6/page/T_Image.qml b/example/qml-Qt6/page/T_Image.qml index df412204..be2745ea 100644 --- a/example/qml-Qt6/page/T_Image.qml +++ b/example/qml-Qt6/page/T_Image.qml @@ -24,7 +24,6 @@ FluScrollablePage{ width: 384 height: 240 source: "https://gitee.com/zhu-zichu/zhu-zichu/raw/74f075efe2f8d3c3bb7ba3c2259e403450e4050b/image/banner_4.jpg" - errorButtonText: qsTr("Reload") onStatusChanged:{ if(status === Image.Error){ showError(qsTr("The image failed to load, please reload")) diff --git a/example/qml-Qt6/page/T_InfoBar.qml b/example/qml-Qt6/page/T_InfoBar.qml index c5ad2991..b237cdb7 100644 --- a/example/qml-Qt6/page/T_InfoBar.qml +++ b/example/qml-Qt6/page/T_InfoBar.qml @@ -53,7 +53,7 @@ FluScrollablePage{ FluButton{ text:"Loading" onClicked: { - showLoading(qsTr("Loading...")) + showLoading() } } } diff --git a/example/qml-Qt6/page/T_Pagination.qml b/example/qml-Qt6/page/T_Pagination.qml index d0bd3fe7..f2e85c11 100644 --- a/example/qml-Qt6/page/T_Pagination.qml +++ b/example/qml-Qt6/page/T_Pagination.qml @@ -21,22 +21,16 @@ FluScrollablePage{ pageCurrent: 1 pageButtonCount: 5 itemCount: 5000 - previousText: qsTr("") } FluPagination{ pageCurrent: 2 itemCount: 5000 pageButtonCount: 7 - previousText: qsTr("") } FluPagination{ pageCurrent: 3 itemCount: 5000 pageButtonCount: 9 - previousText: qsTr("") } } diff --git a/example/qml-Qt6/page/T_ShortcutPicker.qml b/example/qml-Qt6/page/T_ShortcutPicker.qml index bb3fee2e..b2f51448 100644 --- a/example/qml-Qt6/page/T_ShortcutPicker.qml +++ b/example/qml-Qt6/page/T_ShortcutPicker.qml @@ -16,11 +16,6 @@ FluScrollablePage{ paddings: 10 FluShortcutPicker{ anchors.verticalCenter: parent.verticalCenter - title: qsTr("Activate the Shortcut") - message: qsTr("Press the key combination to change the shortcut") - positiveText: qsTr("Save") - neutralText: qsTr("Cancel") - negativeText: qsTr("Reset") } } CodeExpander{ diff --git a/example/qml-Qt6/page/T_Tour.qml b/example/qml-Qt6/page/T_Tour.qml index e4c0e202..830f58c5 100644 --- a/example/qml-Qt6/page/T_Tour.qml +++ b/example/qml-Qt6/page/T_Tour.qml @@ -11,9 +11,6 @@ FluScrollablePage{ FluTour{ id:tour - finishText: qsTr("Finish") - nextText: qsTr("Next") - previousText: qsTr("Previous") steps:[ {title:qsTr("Upload File"),description: qsTr("Put your files here."),target:()=>btn_upload}, {title:qsTr("Save"),description: qsTr("Save your changes."),target:()=>btn_save}, diff --git a/example/qml/App.qml b/example/qml/App.qml index 8b282184..3f8be19d 100644 --- a/example/qml/App.qml +++ b/example/qml/App.qml @@ -33,7 +33,7 @@ Item { FluNetwork.setInterceptor(function(param){ param.addHeader("Token","000000000000000000000") }) - FluApp.init(app) + FluApp.init(app,Qt.locale(TranslateHelper.current)) FluApp.windowIcon = "qrc:/example/res/image/favicon.ico" FluApp.useSystemAppBar = SettingsHelper.getUseSystemAppBar() FluTheme.darkMode = SettingsHelper.getDarkMode() diff --git a/example/qml/page/T_DatePicker.qml b/example/qml/page/T_DatePicker.qml index b193c9ca..e65752aa 100644 --- a/example/qml/page/T_DatePicker.qml +++ b/example/qml/page/T_DatePicker.qml @@ -24,11 +24,6 @@ FluScrollablePage{ } FluDatePicker{ current: new Date() - yearText: qsTr("Year") - monthText: qsTr("Month") - dayText: qsTr("Day") - cancelText: qsTr("Cancel") - okText: qsTr("OK") onAccepted: { showSuccess(current.toLocaleDateString()) } @@ -58,11 +53,6 @@ FluScrollablePage{ } FluDatePicker{ showYear: false - yearText: qsTr("Year") - monthText: qsTr("Month") - dayText: qsTr("Day") - cancelText: qsTr("Cancel") - okText: qsTr("OK") onAccepted: { showSuccess(current.toLocaleDateString()) } diff --git a/example/qml/page/T_Image.qml b/example/qml/page/T_Image.qml index e66f77f8..b5662367 100644 --- a/example/qml/page/T_Image.qml +++ b/example/qml/page/T_Image.qml @@ -24,7 +24,6 @@ FluScrollablePage{ width: 384 height: 240 source: "https://gitee.com/zhu-zichu/zhu-zichu/raw/74f075efe2f8d3c3bb7ba3c2259e403450e4050b/image/banner_4.jpg" - errorButtonText: qsTr("Reload") onStatusChanged:{ if(status === Image.Error){ showError(qsTr("The image failed to load, please reload")) diff --git a/example/qml/page/T_InfoBar.qml b/example/qml/page/T_InfoBar.qml index f91c1bd1..19c4c90a 100644 --- a/example/qml/page/T_InfoBar.qml +++ b/example/qml/page/T_InfoBar.qml @@ -53,7 +53,7 @@ FluScrollablePage{ FluButton{ text:"Loading" onClicked: { - showLoading(qsTr("Loading...")) + showLoading() } } } diff --git a/example/qml/page/T_Pagination.qml b/example/qml/page/T_Pagination.qml index 52e2d9f2..717c3dc1 100644 --- a/example/qml/page/T_Pagination.qml +++ b/example/qml/page/T_Pagination.qml @@ -21,22 +21,16 @@ FluScrollablePage{ pageCurrent: 1 pageButtonCount: 5 itemCount: 5000 - previousText: qsTr("") } FluPagination{ pageCurrent: 2 itemCount: 5000 pageButtonCount: 7 - previousText: qsTr("") } FluPagination{ pageCurrent: 3 itemCount: 5000 pageButtonCount: 9 - previousText: qsTr("") } } diff --git a/example/qml/page/T_ShortcutPicker.qml b/example/qml/page/T_ShortcutPicker.qml index c202ba82..9d594562 100644 --- a/example/qml/page/T_ShortcutPicker.qml +++ b/example/qml/page/T_ShortcutPicker.qml @@ -16,11 +16,6 @@ FluScrollablePage{ paddings: 10 FluShortcutPicker{ anchors.verticalCenter: parent.verticalCenter - title: qsTr("Activate the Shortcut") - message: qsTr("Press the key combination to change the shortcut") - positiveText: qsTr("Save") - neutralText: qsTr("Cancel") - negativeText: qsTr("Reset") } } CodeExpander{ diff --git a/example/qml/page/T_Tour.qml b/example/qml/page/T_Tour.qml index 1e3fa0db..4a38050a 100644 --- a/example/qml/page/T_Tour.qml +++ b/example/qml/page/T_Tour.qml @@ -11,9 +11,6 @@ FluScrollablePage{ FluTour{ id:tour - finishText: qsTr("Finish") - nextText: qsTr("Next") - previousText: qsTr("Previous") steps:[ {title:qsTr("Upload File"),description: qsTr("Put your files here."),target:()=>btn_upload}, {title:qsTr("Save"),description: qsTr("Save your changes."),target:()=>btn_save}, diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3d35c542..abd61f52 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -43,6 +43,21 @@ else() set(CMAKE_AUTOUIC ON) endif() +#国际化 +find_program(QT_LUPDATE NAMES lupdate) +find_program(QT_LRELEASE NAMES lrelease) +if (NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}_en_US.qm) + execute_process(COMMAND ${QT_LUPDATE} ${CMAKE_CURRENT_LIST_DIR} -ts ${PROJECT_NAME}_en_US.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) + execute_process(COMMAND ${QT_LRELEASE} ${PROJECT_NAME}_en_US.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) +endif () +if (NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}_zh_CN.qm) + execute_process(COMMAND ${QT_LUPDATE} ${CMAKE_CURRENT_LIST_DIR} -ts ${PROJECT_NAME}_zh_CN.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) + execute_process(COMMAND ${QT_LRELEASE} ${PROJECT_NAME}_zh_CN.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) +endif () + +file(GLOB QM_FILE_PATHS ${CMAKE_CURRENT_LIST_DIR}/ *.qm) +file(COPY ${QM_FILE_PATHS} DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/Qt${QT_VERSION_MAJOR}/imports/FluentUI/i18n") + #遍历所有Cpp文件 file(GLOB_RECURSE CPP_FILES *.cpp *.h) foreach(filepath ${CPP_FILES}) @@ -67,7 +82,7 @@ if(QT_VERSION VERSION_GREATER_EQUAL "6.2") endforeach(filepath) #遍历所有资源文件 - file(GLOB_RECURSE RES_PATHS *.png *.jpg *.svg *.ico *.ttf *.webp *.js) + file(GLOB_RECURSE RES_PATHS *.png *.jpg *.svg *.ico *.ttf *.webp *.js *.qm) foreach(filepath ${RES_PATHS}) if(${filepath} MATCHES "Qt${QT_VERSION_MAJOR}/") string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath}) diff --git a/src/FluApp.cpp b/src/FluApp.cpp index 377b38f0..9edbae3d 100644 --- a/src/FluApp.cpp +++ b/src/FluApp.cpp @@ -8,6 +8,7 @@ #include #include #include +#include FluApp::FluApp(QObject *parent):QObject{parent}{ useSystemAppBar(false); @@ -16,8 +17,18 @@ FluApp::FluApp(QObject *parent):QObject{parent}{ FluApp::~FluApp(){ } -void FluApp::init(QObject *target){ +void FluApp::init(QObject *target,QLocale locale){ _engine = qmlEngine(target); + _translator = new QTranslator(this); + qApp->installTranslator(_translator); + const QStringList uiLanguages = locale.uiLanguages(); + for (const QString &name : uiLanguages) { + const QString baseName = "fluentuiplugin_" + QLocale(name).name(); + if (_translator->load(":/qt/qml/FluentUI/i18n/"+ baseName)) { + _engine->retranslate(); + break; + } + } } void FluApp::run(){ diff --git a/src/FluApp.h b/src/FluApp.h index cb454fd7..fffc5495 100644 --- a/src/FluApp.h +++ b/src/FluApp.h @@ -8,6 +8,7 @@ #include #include #include +#include #include "FluWindowRegister.h" #include "stdafx.h" #include "singleton.h" @@ -32,7 +33,7 @@ public: static FluApp *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return getInstance();} Q_INVOKABLE void run(); Q_INVOKABLE void navigate(const QString& route,const QJsonObject& argument = {},FluWindowRegister* windowRegister = nullptr); - Q_INVOKABLE void init(QObject *target); + Q_INVOKABLE void init(QObject *target,QLocale locale = QLocale::system()); Q_INVOKABLE void exit(int retCode = 0); Q_INVOKABLE QVariant createWindowRegister(QQuickWindow* window,const QString& path); void addWindow(QQuickWindow* window); @@ -40,6 +41,7 @@ public: private: QMap _windows; QQmlEngine *_engine; + QTranslator* _translator = nullptr; }; #endif // FLUAPP_H diff --git a/src/FluTheme.cpp b/src/FluTheme.cpp index 6283d5c3..065c43c1 100644 --- a/src/FluTheme.cpp +++ b/src/FluTheme.cpp @@ -37,9 +37,9 @@ void FluTheme::refreshColors(){ fontSecondaryColor(isDark ? QColor(222,222,222,255) : QColor(102,102,102,255)); fontTertiaryColor(isDark ? QColor(200,200,200,255) : QColor(153,153,153,255)); itemNormalColor(isDark ? QColor(255,255,255,0) : QColor(0,0,0,0)); - itemHoverColor(isDark ? QColor(255,255,255,255*0.03) : QColor(0,0,0,255*0.03)); - itemPressColor(isDark ? QColor(255,255,255,255*0.06) : QColor(0,0,0,255*0.06)); - itemCheckColor(isDark ? QColor(255,255,255,255*0.09) : QColor(0,0,0,255*0.09)); + itemHoverColor(isDark ? QColor(255,255,255,255*0.06) : QColor(0,0,0,255*0.03)); + itemPressColor(isDark ? QColor(255,255,255,255*0.09) : QColor(0,0,0,255*0.06)); + itemCheckColor(isDark ? QColor(255,255,255,255*0.12) : QColor(0,0,0,255*0.09)); } bool FluTheme::eventFilter(QObject *obj, QEvent *event){ diff --git a/src/Qt5/imports/FluentUI/Controls/FluAppBar.qml b/src/Qt5/imports/FluentUI/Controls/FluAppBar.qml index 7bcf8e99..f3831a41 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluAppBar.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluAppBar.qml @@ -6,14 +6,14 @@ import FluentUI 1.0 Rectangle{ property string title: "" - property string darkText : "深色" - property string lightText : "浅色" - property string minimizeText : "最小化" - property string restoreText : "向下还原" - property string maximizeText : "最大化" - property string closeText : "关闭" - property string stayTopText : "置顶" - property string stayTopCancelText : "取消置顶" + property string darkText : qsTr("Dark") + property string lightText : qsTr("Light") + property string minimizeText : qsTr("Minimize") + property string restoreText : qsTr("Restore") + property string maximizeText : qsTr("Maximize") + property string closeText : qsTr("Close") + property string stayTopText : qsTr("Sticky on Top") + property string stayTopCancelText : qsTr("Sticky on Top cancelled") property color textColor: FluTheme.dark ? "#FFFFFF" : "#000000" property color minimizeNormalColor: FluTheme.itemNormalColor property color minimizeHoverColor: FluTheme.itemHoverColor diff --git a/src/Qt5/imports/FluentUI/Controls/FluAutoSuggestBox.qml b/src/Qt5/imports/FluentUI/Controls/FluAutoSuggestBox.qml index 5dd805d9..54ab28f5 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluAutoSuggestBox.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluAutoSuggestBox.qml @@ -5,7 +5,7 @@ import FluentUI 1.0 FluTextBox{ property var items:[] - property string emptyText: "没有找到结果" + property string emptyText: qsTr("No results found") property int autoSuggestBoxReplacement: FluentIcons.Search signal itemClicked(var data) signal handleClicked @@ -99,12 +99,12 @@ FluTextBox{ loadData() if(d.flagVisible){ var pos = control.mapToItem(null, 0, 0) - if(window.height>pos.y+control.height+container.implicitHeight){ + if(d.window.height>pos.y+control.height+container.implicitHeight){ control_popup.y = control.height } else if(pos.y>container.implicitHeight){ control_popup.y = -container.implicitHeight } else { - control_popup.y = window.height-(pos.y+container.implicitHeight) + control_popup.y = d.window.height-(pos.y+container.implicitHeight) } control_popup.visible = true } diff --git a/src/Qt5/imports/FluentUI/Controls/FluCalendarPicker.qml b/src/Qt5/imports/FluentUI/Controls/FluCalendarPicker.qml index 69286a7c..20b30e02 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluCalendarPicker.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluCalendarPicker.qml @@ -8,7 +8,7 @@ Rectangle { property color dividerColor: FluTheme.dark ? Qt.rgba(77/255,77/255,77/255,1) : Qt.rgba(239/255,239/255,239/255,1) property color hoverColor: FluTheme.dark ? Qt.rgba(68/255,68/255,68/255,1) : Qt.rgba(251/255,251/255,251/255,1) property color normalColor: FluTheme.dark ? Qt.rgba(61/255,61/255,61/255,1) : Qt.rgba(254/255,254/255,254/255,1) - property string text: "请选择日期" + property string text: qsTr("Please select a date") property var current signal accepted() id:control diff --git a/src/Qt5/imports/FluentUI/Controls/FluContentDialog.qml b/src/Qt5/imports/FluentUI/Controls/FluContentDialog.qml index 1a49ddad..b02592f7 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluContentDialog.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluContentDialog.qml @@ -8,9 +8,9 @@ FluPopup { id: control property string title: "" property string message: "" - property string neutralText: "Close" - property string negativeText: "Cancel" - property string positiveText: "OK" + property string neutralText: qsTr("Close") + property string negativeText: qsTr("Cancel") + property string positiveText: qsTr("OK") property int messageTextFormart: Text.AutoText property int delayTime: 100 property int buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton diff --git a/src/Qt5/imports/FluentUI/Controls/FluDatePicker.qml b/src/Qt5/imports/FluentUI/Controls/FluDatePicker.qml index ecf94810..8522baf5 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluDatePicker.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluDatePicker.qml @@ -10,11 +10,11 @@ Rectangle { property color normalColor: FluTheme.dark ? Qt.rgba(61/255,61/255,61/255,1) : Qt.rgba(254/255,254/255,254/255,1) property bool showYear: true property var current - property string yearText: "年" - property string monthText: "月" - property string dayText: "日" - property string cancelText: "取消" - property string okText: "确定" + property string yearText: qsTr("Year") + property string monthText: qsTr("Month") + property string dayText: qsTr("Day") + property string cancelText: qsTr("Cancel") + property string okText: qsTr("OK") signal accepted() id:control color: { diff --git a/src/Qt5/imports/FluentUI/Controls/FluImage.qml b/src/Qt5/imports/FluentUI/Controls/FluImage.qml index 964cd102..ca9ad8be 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluImage.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluImage.qml @@ -3,7 +3,7 @@ import QtQuick.Controls 2.15 import FluentUI 1.0 Image { - property string errorButtonText: "重新加载" + property string errorButtonText: qsTr("Reload") property var clickErrorListener : function(){ image.source = "" image.source = control.source diff --git a/src/Qt5/imports/FluentUI/Controls/FluPagination.qml b/src/Qt5/imports/FluentUI/Controls/FluPagination.qml index b7391ee6..a5a155a8 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluPagination.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluPagination.qml @@ -5,8 +5,8 @@ import FluentUI 1.0 Item { signal requestPage(int page,int count) - property string previousText: "<上一页" - property string nextText: "下一页>" + property string previousText: qsTr("") property int pageCurrent: 0 property int itemCount: 0 property int pageButtonCount: 5 diff --git a/src/Qt5/imports/FluentUI/Controls/FluShortcutPicker.qml b/src/Qt5/imports/FluentUI/Controls/FluShortcutPicker.qml index 9aad3a2b..98272d75 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluShortcutPicker.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluShortcutPicker.qml @@ -5,11 +5,11 @@ import FluentUI 1.0 FluIconButton { id:control property var current : ["Ctrl","Shift","A"] - property string title: "激活快捷键" - property string message: "按下组合键以更改此快捷键" - property string positiveText: "保存" - property string neutralText: "取消" - property string negativeText: "重置" + property string title: qsTr("Activate the Shortcut") + property string message: qsTr("Press the key combination to change the shortcut") + property string positiveText: qsTr("Save") + property string neutralText: qsTr("Cancel") + property string negativeText: qsTr("Reset") signal accepted() QtObject{ id: d diff --git a/src/Qt5/imports/FluentUI/Controls/FluTextBoxMenu.qml b/src/Qt5/imports/FluentUI/Controls/FluTextBoxMenu.qml index 9a6d1f8e..7921222e 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluTextBoxMenu.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluTextBoxMenu.qml @@ -3,10 +3,10 @@ import QtQuick.Controls 2.15 import FluentUI 1.0 FluMenu{ - property string cutText : "剪切" - property string copyText : "复制" - property string pasteText : "粘贴" - property string selectAllText : "全选" + property string cutText : qsTr("Cut") + property string copyText : qsTr("Copy") + property string pasteText : qsTr("Paste") + property string selectAllText : qsTr("Select All") property var inputItem id:menu enableAnimation: false diff --git a/src/Qt5/imports/FluentUI/Controls/FluTour.qml b/src/Qt5/imports/FluentUI/Controls/FluTour.qml index f0197ac0..1eeef797 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluTour.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluTour.qml @@ -10,9 +10,9 @@ Popup{ property Component nextButton: com_next_button property Component prevButton: com_prev_button property int index : 0 - property string finishText: "结束导览" - property string nextText: "下一步" - property string previousText: "上一步" + property string finishText: qsTr("Finish") + property string nextText: qsTr("Next") + property string previousText: qsTr("Previous") id:control padding: 0 parent: Overlay.overlay diff --git a/src/Qt5/imports/FluentUI/Controls/FluWindow.qml b/src/Qt5/imports/FluentUI/Controls/FluWindow.qml index 45ace81d..bf8b26dc 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluWindow.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluWindow.qml @@ -243,7 +243,7 @@ Window { anchors.fill: parent } FluInfoBar{ - id:infoBar + id:info_bar root: window } FluWindowLifecycle{ @@ -268,7 +268,7 @@ Window { function destoryOnClose(){ lifecycle.onDestoryOnClose() } - function showLoading(text = "加载中...",cancel = true){ + function showLoading(text = qsTr("Loading..."),cancel = true){ loader_loading.loadingText = text loader_loading.cancel = cancel loader_loading.sourceComponent = com_loading @@ -277,16 +277,16 @@ Window { loader_loading.sourceComponent = undefined } function showSuccess(text,duration,moremsg){ - infoBar.showSuccess(text,duration,moremsg) + info_bar.showSuccess(text,duration,moremsg) } function showInfo(text,duration,moremsg){ - infoBar.showInfo(text,duration,moremsg) + info_bar.showInfo(text,duration,moremsg) } function showWarning(text,duration,moremsg){ - infoBar.showWarning(text,duration,moremsg) + info_bar.showWarning(text,duration,moremsg) } function showError(text,duration,moremsg){ - infoBar.showError(text,duration,moremsg) + info_bar.showError(text,duration,moremsg) } function moveWindowToDesktopCenter(){ screen = Qt.application.screens[FluTools.cursorScreenIndex()] diff --git a/src/Qt5/imports/FluentUI/qmldir b/src/Qt5/imports/FluentUI/qmldir index f57747a6..0c9327da 100644 --- a/src/Qt5/imports/FluentUI/qmldir +++ b/src/Qt5/imports/FluentUI/qmldir @@ -3,12 +3,6 @@ classname FluentUIPlugin designersupported typeinfo plugins.qmltypes -ColorPicker 1.0 Controls/ColorPicker/ColorPicker.qml -Checkerboard 1.0 Controls/ColorPicker/Content/Checkerboard.qml -ColorSlider 1.0 Controls/ColorPicker/Content/ColorSlider.qml -NumberBox 1.0 Controls/ColorPicker/Content/NumberBox.qml -PanelBorder 1.0 Controls/ColorPicker/Content/PanelBorder.qml -SBPicker 1.0 Controls/ColorPicker/Content/SBPicker.qml FluAcrylic 1.0 Controls/FluAcrylic.qml FluAppBar 1.0 Controls/FluAppBar.qml FluArea 1.0 Controls/FluArea.qml @@ -21,8 +15,8 @@ FluCalendarView 1.0 Controls/FluCalendarView.qml FluCarousel 1.0 Controls/FluCarousel.qml FluChart 1.0 Controls/FluChart.qml FluCheckBox 1.0 Controls/FluCheckBox.qml +FluClip 1.0 Controls/FluClip.qml FluColorPicker 1.0 Controls/FluColorPicker.qml -FluColorView 1.0 Controls/FluColorView.qml FluComboBox 1.0 Controls/FluComboBox.qml FluContentDialog 1.0 Controls/FluContentDialog.qml FluContentPage 1.0 Controls/FluContentPage.qml @@ -38,8 +32,11 @@ FluFocusRectangle 1.0 Controls/FluFocusRectangle.qml FluIcon 1.0 Controls/FluIcon.qml FluIconButton 1.0 Controls/FluIconButton.qml FluImage 1.0 Controls/FluImage.qml +FluImageButton 1.0 Controls/FluImageButton.qml FluInfoBar 1.0 Controls/FluInfoBar.qml FluItemDelegate 1.0 Controls/FluItemDelegate.qml +FluLoader 1.0 Controls/FluLoader.qml +FluLoadingButton 1.0 Controls/FluLoadingButton.qml FluMenu 1.0 Controls/FluMenu.qml FluMenuBar 1.0 Controls/FluMenuBar.qml FluMenuBarItem 1.0 Controls/FluMenuBarItem.qml @@ -60,20 +57,24 @@ FluPivot 1.0 Controls/FluPivot.qml FluPivotItem 1.0 Controls/FluPivotItem.qml FluPopup 1.0 Controls/FluPopup.qml FluProgressBar 1.0 Controls/FluProgressBar.qml +FluProgressButton 1.0 Controls/FluProgressButton.qml FluProgressRing 1.0 Controls/FluProgressRing.qml FluQRCode 1.0 Controls/FluQRCode.qml FluRadioButton 1.0 Controls/FluRadioButton.qml FluRadioButtons 1.0 Controls/FluRadioButtons.qml +FluRangeSlider 1.0 Controls/FluRangeSlider.qml FluRatingControl 1.0 Controls/FluRatingControl.qml FluRemoteLoader 1.0 Controls/FluRemoteLoader.qml -FluScreenshot 1.0 Controls/FluScreenshot.qml FluScrollBar 1.0 Controls/FluScrollBar.qml FluScrollIndicator 1.0 Controls/FluScrollIndicator.qml FluScrollablePage 1.0 Controls/FluScrollablePage.qml FluShadow 1.0 Controls/FluShadow.qml +FluShortcutPicker 1.0 Controls/FluShortcutPicker.qml FluSlider 1.0 Controls/FluSlider.qml FluSpinBox 1.0 Controls/FluSpinBox.qml -FluStatusView 1.0 Controls/FluStatusView.qml +FluSplitLayout 1.0 Controls/FluSplitLayout.qml +FluStaggeredLayout 1.0 Controls/FluStaggeredLayout.qml +FluStatusLayout 1.0 Controls/FluStatusLayout.qml FluTabView 1.0 Controls/FluTabView.qml FluTableView 1.0 Controls/FluTableView.qml FluText 1.0 Controls/FluText.qml @@ -89,13 +90,5 @@ FluTooltip 1.0 Controls/FluTooltip.qml FluTour 1.0 Controls/FluTour.qml FluTreeView 1.0 Controls/FluTreeView.qml FluWindow 1.0 Controls/FluWindow.qml -FluRangeSlider 1.0 Controls/FluRangeSlider.qml -FluStaggeredView 1.0 Controls/FluStaggeredView.qml -FluProgressButton 1.0 Controls/FluProgressButton.qml -FluLoadingButton 1.0 Controls/FluLoadingButton.qml -FluClip 1.0 Controls/FluClip.qml -FluLoader 1.0 Controls/FluLoader.qml -FluShortcutPicker 1.0 Controls/FluShortcutPicker.qml -FluSplitLayout 1.0 Controls/FluSplitLayout.qml -FluStaggeredLayout 1.0 Controls/FluStaggeredLayout.qml + plugin fluentuiplugin diff --git a/src/Qt5/imports/fluentui.qrc b/src/Qt5/imports/fluentui.qrc index 0b3d66e4..356791ef 100644 --- a/src/Qt5/imports/fluentui.qrc +++ b/src/Qt5/imports/fluentui.qrc @@ -99,5 +99,7 @@ FluentUI/Image/btn_min_pushed.png FluentUI/Controls/FluImageButton.qml FluentUI/Controls/FluSplitLayout.qml + FluentUI/i18n/fluentuiplugin_en_US.qm + FluentUI/i18n/fluentuiplugin_zh_CN.qm diff --git a/src/Qt6/imports/FluentUI/Controls/FluAppBar.qml b/src/Qt6/imports/FluentUI/Controls/FluAppBar.qml index 818af87f..c181af20 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluAppBar.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluAppBar.qml @@ -6,14 +6,14 @@ import FluentUI Rectangle{ property string title: "" - property string darkText : "深色" - property string lightText : "浅色" - property string minimizeText : "最小化" - property string restoreText : "向下还原" - property string maximizeText : "最大化" - property string closeText : "关闭" - property string stayTopText : "置顶" - property string stayTopCancelText : "取消置顶" + property string darkText : qsTr("Dark") + property string lightText : qsTr("Light") + property string minimizeText : qsTr("Minimize") + property string restoreText : qsTr("Restore") + property string maximizeText : qsTr("Maximize") + property string closeText : qsTr("Close") + property string stayTopText : qsTr("Sticky on Top") + property string stayTopCancelText : qsTr("Sticky on Top cancelled") property color textColor: FluTheme.dark ? "#FFFFFF" : "#000000" property color minimizeNormalColor: FluTheme.itemNormalColor property color minimizeHoverColor: FluTheme.itemHoverColor diff --git a/src/Qt6/imports/FluentUI/Controls/FluAutoSuggestBox.qml b/src/Qt6/imports/FluentUI/Controls/FluAutoSuggestBox.qml index fa1195ec..6d089c69 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluAutoSuggestBox.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluAutoSuggestBox.qml @@ -4,18 +4,18 @@ import FluentUI FluTextBox{ property var items:[] - property string emptyText: "没有找到结果" + property string emptyText: qsTr("No results found") property int autoSuggestBoxReplacement: FluentIcons.Search - property var window : Window.window signal itemClicked(var data) signal handleClicked id:control Component.onCompleted: { loadData() } - QtObject{ + Item{ id:d property bool flagVisible: true + property var window : Window.window } onActiveFocusChanged: { if(!activeFocus){ @@ -98,12 +98,12 @@ FluTextBox{ loadData() if(d.flagVisible){ var pos = control.mapToItem(null, 0, 0) - if(window.height>pos.y+control.height+container.implicitHeight){ + if(d.window.height>pos.y+control.height+container.implicitHeight){ control_popup.y = control.height } else if(pos.y>container.implicitHeight){ control_popup.y = -container.implicitHeight } else { - control_popup.y = window.height-(pos.y+container.implicitHeight) + control_popup.y = d.window.height-(pos.y+container.implicitHeight) } control_popup.visible = true } diff --git a/src/Qt6/imports/FluentUI/Controls/FluCalendarPicker.qml b/src/Qt6/imports/FluentUI/Controls/FluCalendarPicker.qml index c8ad5e24..0a57c66b 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluCalendarPicker.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluCalendarPicker.qml @@ -8,7 +8,7 @@ Rectangle { property color dividerColor: FluTheme.dark ? Qt.rgba(77/255,77/255,77/255,1) : Qt.rgba(239/255,239/255,239/255,1) property color hoverColor: FluTheme.dark ? Qt.rgba(68/255,68/255,68/255,1) : Qt.rgba(251/255,251/255,251/255,1) property color normalColor: FluTheme.dark ? Qt.rgba(61/255,61/255,61/255,1) : Qt.rgba(254/255,254/255,254/255,1) - property string text: "请选择日期" + property string text: qsTr("Please select a date") property var current signal accepted() id:control diff --git a/src/Qt6/imports/FluentUI/Controls/FluContentDialog.qml b/src/Qt6/imports/FluentUI/Controls/FluContentDialog.qml index 0ca3b277..6c4ae127 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluContentDialog.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluContentDialog.qml @@ -8,9 +8,9 @@ FluPopup { id: control property string title: "" property string message: "" - property string neutralText: "Close" - property string negativeText: "Cancel" - property string positiveText: "OK" + property string neutralText: qsTr("Close") + property string negativeText: qsTr("Cancel") + property string positiveText: qsTr("OK") property int messageTextFormart: Text.AutoText property int delayTime: 100 property int buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton diff --git a/src/Qt6/imports/FluentUI/Controls/FluDatePicker.qml b/src/Qt6/imports/FluentUI/Controls/FluDatePicker.qml index 3271dddf..abfcf47d 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluDatePicker.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluDatePicker.qml @@ -10,11 +10,11 @@ Rectangle { property color normalColor: FluTheme.dark ? Qt.rgba(61/255,61/255,61/255,1) : Qt.rgba(254/255,254/255,254/255,1) property bool showYear: true property var current - property string yearText: "年" - property string monthText: "月" - property string dayText: "日" - property string cancelText: "取消" - property string okText: "确定" + property string yearText: qsTr("Year") + property string monthText: qsTr("Month") + property string dayText: qsTr("Day") + property string cancelText: qsTr("Cancel") + property string okText: qsTr("OK") signal accepted() id:control color: { diff --git a/src/Qt6/imports/FluentUI/Controls/FluImage.qml b/src/Qt6/imports/FluentUI/Controls/FluImage.qml index 09ecdf95..dcdc3fc1 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluImage.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluImage.qml @@ -3,7 +3,7 @@ import QtQuick.Controls import FluentUI Image { - property string errorButtonText: "重新加载" + property string errorButtonText: qsTr("Reload") property var clickErrorListener : function(){ image.source = "" image.source = control.source diff --git a/src/Qt6/imports/FluentUI/Controls/FluPagination.qml b/src/Qt6/imports/FluentUI/Controls/FluPagination.qml index 188b0932..37f6807d 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluPagination.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluPagination.qml @@ -5,8 +5,8 @@ import FluentUI Item { signal requestPage(int page,int count) - property string previousText: "<上一页" - property string nextText: "下一页>" + property string previousText: qsTr("") property int pageCurrent: 0 property int itemCount: 0 property int pageButtonCount: 5 diff --git a/src/Qt6/imports/FluentUI/Controls/FluShortcutPicker.qml b/src/Qt6/imports/FluentUI/Controls/FluShortcutPicker.qml index 51b17b6c..f3a592b8 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluShortcutPicker.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluShortcutPicker.qml @@ -5,11 +5,11 @@ import FluentUI FluIconButton { id:control property var current : ["Ctrl","Shift","A"] - property string title: "激活快捷键" - property string message: "按下组合键以更改此快捷键" - property string positiveText: "保存" - property string neutralText: "取消" - property string negativeText: "重置" + property string title: qsTr("Activate the Shortcut") + property string message: qsTr("Press the key combination to change the shortcut") + property string positiveText: qsTr("Save") + property string neutralText: qsTr("Cancel") + property string negativeText: qsTr("Reset") signal accepted() QtObject{ id: d diff --git a/src/Qt6/imports/FluentUI/Controls/FluTextBoxMenu.qml b/src/Qt6/imports/FluentUI/Controls/FluTextBoxMenu.qml index 084bc3cc..3be0c1b2 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluTextBoxMenu.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluTextBoxMenu.qml @@ -3,10 +3,10 @@ import QtQuick.Controls import FluentUI FluMenu{ - property string cutText : "剪切" - property string copyText : "复制" - property string pasteText : "粘贴" - property string selectAllText : "全选" + property string cutText : qsTr("Cut") + property string copyText : qsTr("Copy") + property string pasteText : qsTr("Paste") + property string selectAllText : qsTr("Select All") property var inputItem id:menu enableAnimation: false diff --git a/src/Qt6/imports/FluentUI/Controls/FluTour.qml b/src/Qt6/imports/FluentUI/Controls/FluTour.qml index b50b7348..6de19876 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluTour.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluTour.qml @@ -10,9 +10,9 @@ Popup{ property Component nextButton: com_next_button property Component prevButton: com_prev_button property int index : 0 - property string finishText: "结束导览" - property string nextText: "下一步" - property string previousText: "上一步" + property string finishText: qsTr("Finish") + property string nextText: qsTr("Next") + property string previousText: qsTr("Previous") id:control padding: 0 parent: Overlay.overlay diff --git a/src/Qt6/imports/FluentUI/Controls/FluWindow.qml b/src/Qt6/imports/FluentUI/Controls/FluWindow.qml index c18aea6b..3e0bfd08 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluWindow.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluWindow.qml @@ -242,7 +242,7 @@ Window { anchors.fill: parent } FluInfoBar{ - id:infoBar + id:info_bar root: window } FluWindowLifecycle{ @@ -267,7 +267,7 @@ Window { function destoryOnClose(){ lifecycle.onDestoryOnClose() } - function showLoading(text = "加载中...",cancel = true){ + function showLoading(text = qsTr("Loading..."),cancel = true){ loader_loading.loadingText = text loader_loading.cancel = cancel loader_loading.sourceComponent = com_loading @@ -276,16 +276,16 @@ Window { loader_loading.sourceComponent = undefined } function showSuccess(text,duration,moremsg){ - infoBar.showSuccess(text,duration,moremsg) + info_bar.showSuccess(text,duration,moremsg) } function showInfo(text,duration,moremsg){ - infoBar.showInfo(text,duration,moremsg) + info_bar.showInfo(text,duration,moremsg) } function showWarning(text,duration,moremsg){ - infoBar.showWarning(text,duration,moremsg) + info_bar.showWarning(text,duration,moremsg) } function showError(text,duration,moremsg){ - infoBar.showError(text,duration,moremsg) + info_bar.showError(text,duration,moremsg) } function moveWindowToDesktopCenter(){ screen = Qt.application.screens[FluTools.cursorScreenIndex()] diff --git a/src/fluentuiplugin_en_US.ts b/src/fluentuiplugin_en_US.ts new file mode 100644 index 00000000..3452860e --- /dev/null +++ b/src/fluentuiplugin_en_US.ts @@ -0,0 +1,241 @@ + + + + + FluAppBar + + + + Dark + + + + + + Light + + + + + + Minimize + + + + + + Restore + + + + + + Maximize + + + + + + Close + + + + + + Sticky on Top + + + + + + Sticky on Top cancelled + + + + + FluAutoSuggestBox + + + + No results found + + + + + FluCalendarPicker + + + + Please select a date + + + + + FluContentDialog + + + + Close + + + + + + Cancel + + + + + + OK + + + + + FluDatePicker + + + + Year + + + + + + Month + + + + + + Day + + + + + + Cancel + + + + + + OK + + + + + FluImage + + + + Reload + + + + + FluPagination + + + + <Previous + + + + + + Next> + + + + + FluShortcutPicker + + + + Activate the Shortcut + + + + + + Press the key combination to change the shortcut + + + + + + Save + + + + + + Cancel + + + + + + Reset + + + + + FluTextBoxMenu + + + + Cut + + + + + + Copy + + + + + + Paste + + + + + + Select All + + + + + FluTour + + + + Finish + + + + + + Next + + + + + + Previous + + + + + FluWindow + + + + Loading... + + + + diff --git a/src/fluentuiplugin_zh_CN.ts b/src/fluentuiplugin_zh_CN.ts new file mode 100644 index 00000000..de8599be --- /dev/null +++ b/src/fluentuiplugin_zh_CN.ts @@ -0,0 +1,241 @@ + + + + + FluAppBar + + + + Dark + 深色 + + + + + Light + 浅色 + + + + + Minimize + 最小化 + + + + + Restore + 还原 + + + + + Maximize + 最大化 + + + + + Close + 关闭 + + + + + Sticky on Top + 置顶 + + + + + Sticky on Top cancelled + 取消置顶 + + + + FluAutoSuggestBox + + + + No results found + 未找到结果 + + + + FluCalendarPicker + + + + Please select a date + 请选择日期 + + + + FluContentDialog + + + + Close + 关闭 + + + + + Cancel + 取消 + + + + + OK + 确定 + + + + FluDatePicker + + + + Year + + + + + + Month + + + + + + Day + + + + + + Cancel + 取消 + + + + + OK + 确定 + + + + FluImage + + + + Reload + 重新加载 + + + + FluPagination + + + + <Previous + <上一页 + + + + + Next> + 下一页> + + + + FluShortcutPicker + + + + Activate the Shortcut + 激活快捷键 + + + + + Press the key combination to change the shortcut + 按下组合键以更改此快捷键 + + + + + Save + 保存 + + + + + Cancel + 取消 + + + + + Reset + 重置 + + + + FluTextBoxMenu + + + + Cut + 剪切 + + + + + Copy + 复制 + + + + + Paste + 粘贴 + + + + + Select All + 全选 + + + + FluTour + + + + Finish + 结束导览 + + + + + Next + 下一步 + + + + + Previous + 上一步 + + + + FluWindow + + + + Loading... + 加载中... + + +