From 7c0c4cc451185f4d0ef44d4586c6466fb275bd85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E5=AD=90=E6=A5=9A=5Czhuzi?= Date: Sat, 9 Mar 2024 15:35:48 +0800 Subject: [PATCH] update --- .cmake/version_exe.rc.in | 2 +- .gitignore | 4 +- CMakeLists.txt | 3 +- example/CMakeLists.txt | 38 +- example/example.qrc | 2 +- example/example_en.ts | 2701 ++++++++++++++++ example/example_zh.ts | 2710 +++++++++++++++++ example/qml-Qt6/App.qml | 8 + example/qml-Qt6/component/CodeExpander.qml | 5 +- example/qml-Qt6/global/ItemsFooter.qml | 4 +- example/qml-Qt6/global/ItemsOriginal.qml | 418 +-- example/qml-Qt6/global/Lang.qml | 104 - example/qml-Qt6/global/qmldir | 1 - example/qml-Qt6/page/T_Acrylic.qml | 2 +- example/qml-Qt6/page/T_Awesome.qml | 10 +- example/qml-Qt6/page/T_Badge.qml | 10 +- example/qml-Qt6/page/T_BreadcrumbBar.qml | 5 +- example/qml-Qt6/page/T_Buttons.qml | 129 +- example/qml-Qt6/page/T_CalendarPicker.qml | 2 +- example/qml-Qt6/page/T_Captcha.qml | 16 +- example/qml-Qt6/page/T_Carousel.qml | 4 +- example/qml-Qt6/page/T_CheckBox.qml | 18 +- example/qml-Qt6/page/T_Clip.qml | 15 +- example/qml-Qt6/page/T_ColorPicker.qml | 2 +- example/qml-Qt6/page/T_ComboBox.qml | 2 +- example/qml-Qt6/page/T_DatePicker.qml | 18 +- example/qml-Qt6/page/T_Dialog.qml | 128 +- example/qml-Qt6/page/T_Expander.qml | 23 +- example/qml-Qt6/page/T_FlipView.qml | 6 +- example/qml-Qt6/page/T_Home.qml | 28 +- example/qml-Qt6/page/T_Image.qml | 5 +- example/qml-Qt6/page/T_InfoBar.qml | 28 +- example/qml-Qt6/page/T_Menu.qml | 20 +- example/qml-Qt6/page/T_MultiWindow.qml | 28 +- example/qml-Qt6/page/T_Network.qml | 2 +- example/qml-Qt6/page/T_Pagination.qml | 8 +- example/qml-Qt6/page/T_Pivot.qml | 43 +- example/qml-Qt6/page/T_Progress.qml | 2 +- example/qml-Qt6/page/T_QRCode.qml | 2 +- example/qml-Qt6/page/T_RadioButton.qml | 20 +- example/qml-Qt6/page/T_RatingControl.qml | 2 +- example/qml-Qt6/page/T_Rectangle.qml | 2 +- example/qml-Qt6/page/T_Settings.qml | 55 +- example/qml-Qt6/page/T_ShortcutPicker.qml | 2 +- example/qml-Qt6/page/T_Slider.qml | 2 +- example/qml-Qt6/page/T_SplitLayout.qml | 2 +- example/qml-Qt6/page/T_StaggeredLayout.qml | 2 +- example/qml-Qt6/page/T_StatusLayout.qml | 8 +- example/qml-Qt6/page/T_TabView.qml | 4 +- example/qml-Qt6/page/T_TableView.qml | 46 +- example/qml-Qt6/page/T_Text.qml | 6 +- example/qml-Qt6/page/T_TextBox.qml | 49 +- example/qml-Qt6/page/T_Theme.qml | 14 +- example/qml-Qt6/page/T_TimePicker.qml | 18 +- example/qml-Qt6/page/T_Timeline.qml | 28 +- example/qml-Qt6/page/T_ToggleSwitch.qml | 10 +- example/qml-Qt6/page/T_Tooltip.qml | 26 +- example/qml-Qt6/page/T_Tour.qml | 27 +- example/qml-Qt6/page/T_TreeView.qml | 26 +- example/qml-Qt6/page/T_Typography.qml | 2 +- example/qml-Qt6/page/T_Watermark.qml | 34 +- example/qml-Qt6/window/CrashWindow.qml | 14 +- .../qml-Qt6/window/FluentInitalizrWindow.qml | 115 + example/qml-Qt6/window/HotloadWindow.qml | 6 +- example/qml-Qt6/window/LoginWindow.qml | 20 +- example/qml-Qt6/window/MainWindow.qml | 53 +- .../qml-Qt6/window/SingleInstanceWindow.qml | 9 +- example/qml-Qt6/window/SingleTaskWindow.qml | 6 +- example/qml-Qt6/window/StandardWindow.qml | 2 +- example/qml/App.qml | 8 + example/qml/component/CodeExpander.qml | 5 +- example/qml/global/ItemsFooter.qml | 4 +- example/qml/global/ItemsOriginal.qml | 418 +-- example/qml/global/Lang.qml | 104 - example/qml/global/qmldir | 1 - example/qml/page/T_Acrylic.qml | 2 +- example/qml/page/T_Awesome.qml | 10 +- example/qml/page/T_Badge.qml | 10 +- example/qml/page/T_BreadcrumbBar.qml | 5 +- example/qml/page/T_Buttons.qml | 129 +- example/qml/page/T_CalendarPicker.qml | 2 +- example/qml/page/T_Captcha.qml | 16 +- example/qml/page/T_Carousel.qml | 4 +- example/qml/page/T_CheckBox.qml | 18 +- example/qml/page/T_Clip.qml | 15 +- example/qml/page/T_ColorPicker.qml | 2 +- example/qml/page/T_ComboBox.qml | 2 +- example/qml/page/T_DatePicker.qml | 18 +- example/qml/page/T_Dialog.qml | 128 +- example/qml/page/T_Expander.qml | 23 +- example/qml/page/T_FlipView.qml | 6 +- example/qml/page/T_Home.qml | 29 +- example/qml/page/T_Image.qml | 5 +- example/qml/page/T_InfoBar.qml | 28 +- example/qml/page/T_Menu.qml | 20 +- example/qml/page/T_MultiWindow.qml | 28 +- example/qml/page/T_Network.qml | 2 +- example/qml/page/T_Pagination.qml | 8 +- example/qml/page/T_Pivot.qml | 40 +- example/qml/page/T_Progress.qml | 2 +- example/qml/page/T_QRCode.qml | 2 +- example/qml/page/T_RadioButton.qml | 20 +- example/qml/page/T_RatingControl.qml | 2 +- example/qml/page/T_Rectangle.qml | 2 +- example/qml/page/T_Settings.qml | 55 +- example/qml/page/T_ShortcutPicker.qml | 2 +- example/qml/page/T_Slider.qml | 2 +- example/qml/page/T_SplitLayout.qml | 2 +- example/qml/page/T_StaggeredLayout.qml | 2 +- example/qml/page/T_StatusLayout.qml | 8 +- example/qml/page/T_TabView.qml | 4 +- example/qml/page/T_TableView.qml | 46 +- example/qml/page/T_Text.qml | 6 +- example/qml/page/T_TextBox.qml | 49 +- example/qml/page/T_Theme.qml | 14 +- example/qml/page/T_TimePicker.qml | 18 +- example/qml/page/T_Timeline.qml | 28 +- example/qml/page/T_ToggleSwitch.qml | 10 +- example/qml/page/T_Tooltip.qml | 26 +- example/qml/page/T_Tour.qml | 27 +- example/qml/page/T_TreeView.qml | 26 +- example/qml/page/T_Typography.qml | 2 +- example/qml/page/T_Watermark.qml | 34 +- example/qml/window/CrashWindow.qml | 14 +- example/qml/window/FluentInitalizrWindow.qml | 115 + example/qml/window/HotloadWindow.qml | 6 +- example/qml/window/LoginWindow.qml | 20 +- example/qml/window/MainWindow.qml | 53 +- example/qml/window/SingleInstanceWindow.qml | 8 +- example/qml/window/SingleTaskWindow.qml | 6 +- example/qml/window/StandardWindow.qml | 2 +- example/src/helper/InitalizrHelper.cpp | 28 + example/src/helper/InitalizrHelper.h | 21 + example/src/helper/Log.cpp | 4 +- example/src/helper/Log.h | 2 +- example/src/helper/SettingsHelper.cpp | 2 +- example/src/helper/SettingsHelper.h | 2 + example/src/helper/TranslateHelper.cpp | 27 + example/src/helper/TranslateHelper.h | 26 + example/src/main.cpp | 7 +- {.cmake => src/.cmake}/QmlPlugin.cmake | 27 +- {.cmake => src/.cmake}/version_dll.rc.in | 0 src/CMakeLists.txt | 8 +- src/FluTheme.cpp | 2 +- .../FluentUI/Controls/FluContentDialog.qml | 4 +- .../FluentUI/Controls/FluDatePicker.qml | 27 +- .../FluentUI/Controls/FluFilledButton.qml | 12 +- .../imports/FluentUI/Controls/FluInfoBar.qml | 2 +- .../FluentUI/Controls/FluMultilineTextBox.qml | 2 +- .../FluentUI/Controls/FluTableView.qml | 2 +- .../FluentUI/Controls/FluTimePicker.qml | 55 +- .../imports/FluentUI/Controls/FluTimeline.qml | 4 +- .../FluentUI/Controls/FluToggleButton.qml | 17 +- src/Qt5/imports/FluentUI/Controls/FluTour.qml | 37 +- .../imports/FluentUI/Controls/FluWindow.qml | 4 +- .../FluentUI/Controls/FluContentDialog.qml | 4 +- .../FluentUI/Controls/FluDatePicker.qml | 27 +- .../FluentUI/Controls/FluFilledButton.qml | 12 +- .../imports/FluentUI/Controls/FluInfoBar.qml | 2 +- .../FluentUI/Controls/FluMultilineTextBox.qml | 2 +- .../FluentUI/Controls/FluTableView.qml | 2 +- .../FluentUI/Controls/FluTimePicker.qml | 54 +- .../imports/FluentUI/Controls/FluTimeline.qml | 4 +- .../FluentUI/Controls/FluToggleButton.qml | 12 +- src/Qt6/imports/FluentUI/Controls/FluTour.qml | 37 +- .../imports/FluentUI/Controls/FluWindow.qml | 4 +- src/version_fluentuiplugin.rc | 32 + 167 files changed, 7567 insertions(+), 1816 deletions(-) create mode 100644 example/example_en.ts create mode 100644 example/example_zh.ts delete mode 100644 example/qml-Qt6/global/Lang.qml create mode 100644 example/qml-Qt6/window/FluentInitalizrWindow.qml delete mode 100644 example/qml/global/Lang.qml create mode 100644 example/qml/window/FluentInitalizrWindow.qml create mode 100644 example/src/helper/InitalizrHelper.cpp create mode 100644 example/src/helper/InitalizrHelper.h create mode 100644 example/src/helper/TranslateHelper.cpp create mode 100644 example/src/helper/TranslateHelper.h rename {.cmake => src/.cmake}/QmlPlugin.cmake (85%) rename {.cmake => src/.cmake}/version_dll.rc.in (100%) create mode 100644 src/version_fluentuiplugin.rc diff --git a/.cmake/version_exe.rc.in b/.cmake/version_exe.rc.in index 2f551d27..9dbe5048 100644 --- a/.cmake/version_exe.rc.in +++ b/.cmake/version_exe.rc.in @@ -31,4 +31,4 @@ BEGIN END END -IDI_ICON1 ICON DISCARDABLE "${FLUENTUI_DIRECTORY}/example/favicon.ico" +IDI_ICON1 ICON DISCARDABLE "${CMAKE_SOURCE_DIR}/example/favicon.ico" diff --git a/.gitignore b/.gitignore index 321394aa..628dcf16 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,6 @@ cmake-build-* example/Version.h action-cli -dist \ No newline at end of file +dist + +*.qm \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index b21f136c..ba59a9b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,8 +8,7 @@ if(MSVC) set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF") endif() -set(FLUENTUI_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) -list(APPEND CMAKE_MODULE_PATH ${FLUENTUI_DIRECTORY}/.cmake/) +list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/.cmake/) include(GetGitRevisionDescription) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 1e85de7f..b4094001 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -6,9 +6,6 @@ project(example VERSION 1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -#导入exmaple的QML位置,不然import example有时候会爆红 -set(QML_IMPORT_PATH ${CMAKE_BINARY_DIR}/example CACHE STRING "Qt Creator extra QML import paths" FORCE) - #判断FluentUI库类型 if(FLUENTUI_BUILD_STATIC_LIB) add_definitions(-DFLUENTUI_BUILD_STATIC_LIB) @@ -16,9 +13,9 @@ endif() #设置可执行文件输出目录 if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $<1:${FLUENTUI_DIRECTORY}/bin/debug>) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/debug) else() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $<1:${FLUENTUI_DIRECTORY}/bin/release>) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/release) endif() #导入Qt相关依赖包 @@ -33,10 +30,25 @@ 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}/example_en.qm) + execute_process(COMMAND ${QT_LUPDATE} ${CMAKE_CURRENT_LIST_DIR} -ts example_en.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) + execute_process(COMMAND ${QT_LRELEASE} example_en.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) +endif () +if (NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/example_zh.qm) + execute_process(COMMAND ${QT_LUPDATE} ${CMAKE_CURRENT_LIST_DIR} -ts example_zh.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) + execute_process(COMMAND ${QT_LRELEASE} example_zh.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_RUNTIME_OUTPUT_DIRECTORY}/i18n) + ##生成版本信息头文件 -set(HEADER_FILE_VERSION_PATH ${FLUENTUI_DIRECTORY}/example/Version.h) +set(HEADER_FILE_VERSION_PATH ${CMAKE_SOURCE_DIR}/example/Version.h) configure_file( - ${FLUENTUI_DIRECTORY}/.cmake/Version.h.in + ${CMAKE_SOURCE_DIR}/.cmake/Version.h.in ${HEADER_FILE_VERSION_PATH} ) @@ -73,20 +85,19 @@ if(QT_VERSION VERSION_GREATER_EQUAL "6.2") string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" filename ${filepath}) list(APPEND resource_files ${filename}) endforeach(filepath) - endif() #如果是Windows平台,则生成rc文件,还有inno setup脚本文件 set(EXAMPLE_VERSION_RC_PATH "") if(WIN32) - set(EXAMPLE_VERSION_RC_PATH ${CMAKE_BINARY_DIR}/version_${PROJECT_NAME}.rc) + set(EXAMPLE_VERSION_RC_PATH ${CMAKE_CURRENT_BINARY_DIR}/version_${PROJECT_NAME}.rc) configure_file( - ${FLUENTUI_DIRECTORY}/.cmake/version_exe.rc.in + ${CMAKE_SOURCE_DIR}/.cmake/version_exe.rc.in ${EXAMPLE_VERSION_RC_PATH} ) configure_file( - ${FLUENTUI_DIRECTORY}/.cmake/InstallerScript.iss.in - ${FLUENTUI_DIRECTORY}/action-cli/InstallerScript.iss + ${CMAKE_SOURCE_DIR}/.cmake/InstallerScript.iss.in + ${CMAKE_SOURCE_DIR}/action-cli/InstallerScript.iss ) endif() @@ -120,6 +131,9 @@ if(WIN32) ) endif() +file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/source/) +file(COPY ${CMAKE_SOURCE_DIR}/src/ DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/source/) + if(QT_VERSION VERSION_GREATER_EQUAL "6.2") #如果是Qt6.2以上,则使用qt_add_qml_module添加资源文件 qt_add_qml_module(example diff --git a/example/example.qrc b/example/example.qrc index fb334397..c0cb851a 100644 --- a/example/example.qrc +++ b/example/example.qrc @@ -185,7 +185,6 @@ qml/viewmodel/TextBoxViewModel.qml qml/page/T_Clip.qml qml/page/T_3D.qml - qml/global/Lang.qml qml/page/T_Network.qml qml/page/T_ShortcutPicker.qml qml/chart/T_BarChart.qml @@ -198,5 +197,6 @@ res/image/ic_crash.png qml/window/CrashWindow.qml qml/page/T_SplitLayout.qml + qml/window/FluentInitalizrWindow.qml diff --git a/example/example_en.ts b/example/example_en.ts new file mode 100644 index 00000000..98733847 --- /dev/null +++ b/example/example_en.ts @@ -0,0 +1,2701 @@ + + + + + CodeExpander + + + + Source + + + + + + The Copy is Successful + + + + + CrashWindow + + + + Friendly Reminder + + + + + + We apologize for the inconvenience caused by an unexpected error + + + + + + Report Logs + + + + + + Restart Program + + + + + FluentInitalizrWindow + + + + FluentUI Initalizr + + + + + Name + + + + + Create In + + + + + Browse + + + + + Cancel + + + + + Create + + + + + HotloadWindow + + + + Hot Loader + + + + + + Drag in a qml file + + + + + InitalizrHelper + + + The name cannot be empty + + + + + The creation path cannot be empty + + + + + The path does not exist + + + + + ItemsFooter + + + + About + + + + + + Settings + + + + + ItemsOriginal + + + + Home + + + + + + PaneItemExpander Disabled + + + + + + Basic Input + + + + + + Buttons + + + + + + A control that responds to user input and raisesa Click event. + + + + + + Text + + + + + + Image + + + + + + Slider + + + + + + A control that lets the user select from a rangeof values by moving a Thumb control along atrack. + + + + + + CheckBox + + + + + + A control that a user can select or clear. + + + + + + RadioButton + + + + + + ToggleSwitch + + + + + + PaneItem Disabled + + + + + + Form + + + + + + TextBox + + + + + + TimePicker + + + + + + DatePicker + + + + + + CalendarPicker + + + + + + ColorPicker + + + + + + ShortcutPicker + + + + + + Surface + + + + + + InfoBar + + + + + + An inline message to display app-wide statuschange information. + + + + + + Progress + + + + + + RatingControl + + + + + + Badge + + + + + + Rectangle + + + + + + Clip + + + + + + Carousel + + + + + + Expander + + + + + + Watermark + + + + + + Layout + + + + + + StaggeredLayout + + + + + + SplitLayout + + + + + + StatusLayout + + + + + + Popus + + + + + + Dialog + + + + + + ComboBox + + + + + + Tooltip + + + + + + Menu + + + + + + Navigation + + + + + + Pivot + + + + + + Presents information from different sources in a tabbed view. + Presents information from different sources in atabbed view. + + + + + + BreadcrumbBar + + + + + + TabView + + + + + + A control that displays a collection of tabs thatcan be used to display several documents. + + + + + + TreeView + + + + + + TableView + + + + + + The TableView control provides a flexible way to display a collection of data in rows and columns + + + + + + Pagination + + + + + + MultiWindow + + + + + + FlipView + + + + + + Presents a collection of items that the user canflip through, one item at a time. + + + + + + Theming + + + + + + Acrylic + + + + + + Theme + + + + + + Typography + + + + + + Awesome + + + + + + Chart + + + + + + Bar Chart + + + + + + Line Chart + + + + + + Pie Chart + + + + + + Polar Area Chart + + + + + + Bubble Chart + + + + + + Scatter Chart + Lang Scatter Chart + + + + + + Radar Chart + + + + + + Other + + + + + + QRCode + + + + + + Tour + + + + + + Timeline + + + + + + Captcha + + + + + + Network + + + + + + Remote Loader + + + + + + Hot Loader + + + + + + 3D + + + + + + Test Crash + + + + + LoginWindow + + + + + + Login + + + + + + Please enter the account + Please enter the account number + + + + + + Please enter your password + + + + + + Please feel free to enter a password + + + + + 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 + + + + + + + + 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 + + + + + + -- The current app version + + + + + + +Now go and download the new version? + +Updated content: + + + + + + + OK + + + + + + The current version is already the latest + + + + + + The network is abnormal + + + + + SingleInstanceWindow + + + + SingleInstance + + + + + + I'm a SingleInstance window, and if I exist, I'll destroy the previous window and create a new one + + + + + SingleTaskWindow + + + + SingleTask + + + + + + I'm a SingleTask mode window, and if I exist, I activate the window + + + + + StandardWindow + + + + File + + + + + + New... + + + + + + Open... + + + + + + Save + + + + + + Save As... + + + + + + Quit + + + + + + Edit + + + + + + Cut + + + + + + Copy + + + + + + Paste + + + + + + Help + + + + + + About + + + + + + I'm a Standard mode window, and every time I create a new window + + + + + T_Acrylic + + + + Acrylic + + + + + T_Awesome + + + + Awesome + + + + + + Please enter a keyword + + + + + + Search + + + + + + You Copied + + + + + T_Badge + + + + Badge + + + + + + It usually appears in the upper right corner of the notification icon or avatar to display the number of messages that need to be processed + + + + + T_BreadcrumbBar + + + + BreadcurmbBar + + + + + + Reset sample + + + + + T_Buttons + + + + Buttons + + + + + + Support the Tab key to switch focus, and the Space key to perform click events + + + + + + Text Button + + + + + + + + + + + + + + + + + + + + Disabled + + + + + + Standard Button + + + + + + Click StandardButton + + + + + + Filled Button + + + + + + Click FilledButton + + + + + + Toggle Button + + + + + + Progress Button + + + + + + Loading Button + + + + + + Loading + + + + + + Click IconButton + + + + + + IconOnly + + + + + + Button.IconOnly + + + + + + TextOnly + + + + + + Button.TextOnly + + + + + + TextBesideIcon + + + + + + Button.TextBesideIcon + + + + + + TextUnderIcon + + + + + + Button.TextUnderIcon + + + + + + DropDownButton + + + + + + Menu_1 + + + + + + Menu_2 + + + + + + Menu_3 + + + + + + Menu_4 + + + + + + Radio Button_1 + + + + + + Radio Button_2 + + + + + + Radio Button_3 + + + + + T_CalendarPicker + + + + CalendarPicker + + + + + T_Captcha + + + + Captcha + + + + + + Refresh + + + + + + Ignore Case + + + + + + Please enter a verification code + + + + + + The verification code is correct + + + + + + Error validation, please re-enter + + + + + T_Carousel + + + + Carousel + + + + + + Carousel map, support infinite carousel, infinite swipe, and components implemented with ListView + + + + + T_CheckBox + + + + CheckBox + + + + + + A 2-state CheckBox + + + + + + Right + + + + + + Left + + + + + + + + Disabled + + + + + + A 3-state CheckBox + + + + + + Three State + + + + + T_Clip + + + + Clip + + + + + + Use with images (this component will have no effect under software rendering) + + + + + T_ColorPicker + + + + ColorPicker + + + + + T_ComboBox + + + + ComboBox + + + + + T_DatePicker + + + + TimePicker + + + + + + showYear=true + + + + + + + + Year + + + + + + + + Month + + + + + + + + Day + + + + + + + + Cancel + + + + + + + + OK + + + + + + showYear=false + + + + + T_Dialog + + + + Dialog + + + + + + Show Double Button Dialog + + + + + + + + + + Friendly Reminder + + + + + + + + Are you sure you want to opt out? + + + + + + + + Cancel + + + + + + + + + + Click the Cancel Button + + + + + + + + + + + + OK + + + + + + + + + + Click the OK Button + + + + + + Minimize + + + + + + Click Minimize + + + + + + Custom Content Dialog + + + + + + Custom Content Dialog2 + + + + + + Data is loading, please wait... + + + + + + Unload + + + + + + Test the InfoBar level on top of the Popup + + + + + + Line Chart + + + + + T_Expander + + + + Expander + + + + + + Open a radio box + + + + + + Open a sliding text box + + + + + + Permit me to observe: the late emperor was taken from us before he could finish his life`s work, the restoration of Han. Today, the empire is still divided in three, and our very survival is threatened. Yet still the officials at court and the soldiers throughout the realm remain loyal to you, your majesty. Because they remember the late emperor, all of them, and they wish to repay his kindness in service to you. This is the moment to extend your divine influence, to honour the memory of the late Emperor and strengthen the morale of your officers. It is not time to listen to bad advice, or close your ears to the suggestions of loyal men. +The court and the administration are as one. Both must be judged by one standard. Those who are loyal and good must get what they deserve, but so must the evil-doers who break the law. This will demonstrate the justice of your rule. There cannot be one law for the court and another for the administration. +Counselors and attendants like Guo Youzhi, Fei Yi, and Dong Yun are all reliable men, loyal of purpose and pure in motive. The late Emperor selected them for office so that they would serve you after his death.These are the men who should be consulted on all palace affairs. Xiang Chong has proved himself a fine general in battle, and the late Emperor believed in him. That is why the assembly has recommended him for overall command. It will keep the troops happy if he is consulted on all military matters. +Xiang Chong has proved himself a fine general in battle, and the late Emperor believed in him. That is why the assembly has recommended him for overall command. It will keep the troops happy if he is consulted on all military matters. +The emperors of the Western Han chose their courtiers wisely, and their dynasty flourished. The emperors of the Eastern Han chose poorly, and they doomed the empire to ruin. Whenever the late Emperor discussed this problem with me, he lamented the failings of Emperors Huan and Ling. Advisors like Guo Youzhi, Fei Yi, Chen Zhen, Zhang Yi, and Jiang Wan – these are all men of great integrity and devotion. I encourage you to trust them, your majesty, if the house of Han is to rise again. +I begin as a common man, farming in my fields in Nanyang, doing what I could to survive in an age of chaos. I never had any interest in making a name for myself as a noble. The late Emperor was not ashamed to visit my cottage and seek my advice. Grateful for his regard, I responded to his appeal and threw myself into his service. Now twenty-one years has passed, the late Emperor always appreciated my caution and, in his final days, entrusted me with his cause. +Since that moment, I have been tormented day and night by the fear that I might let him down. That is why I crossed the Lu river at the height of summer, and entered the wastelands beyond. Now the south has been subdued, and our forces are fully armed.I should lead our soldiers to conquer the northern heartland and attempt to remove the hateful traitors, restore the house of Han, and return it to the former capital.This the way I mean to honor my debt to the late Emperor and fulfill my duty to you. Guo Youzhi, Fei Yi, and Dong Yun are the ones who should be making policy decisions and recommendations. +My only desire is to be permitted to drive out the traitors and restore the Han. If I should let you down, punish my offense and report it to the spirit of the late Emperor. If those three advisors should fail in their duties, then they should be punished for their negligence.Your Majesty, consider your course of action carefully. Seek out good advice, and never forget the late Emperor. I depart now on a long expedition, and I will be forever grateful if you heed my advice. Blinded by my own tears, I know not what I write. + + + + + T_FlipView + + + + FlipView + + + + + + Horizontal FlipView + + + + + + Vertical FlipView + + + + + T_Home + + + + FluentUI GitHub + + + + + + The latest FluentUI controls and styles for your applications. + + + + + + FluentUI Initalizr + + + + + + FluentUI Initializr is a FluentUI tool that helps you create and customize Fluent UI projects with various options. + + + + + T_Image + + + + Image + + + + + + Reload + + + + + + The image failed to load, please reload + + + + + T_InfoBar + + + + InfoBar + + + + + + Info + + + + + + This is an InfoBar in the Info Style + + + + + + Warning + + + + + + This is an InfoBar in the Warning Style + + + + + + This is an InfoBar in the Error Style + + + + + + This is an InfoBar in the Success Style + + + + + + InfoBar that needs to be turned off manually + + + + + + Loading... + + + + + T_Menu + + + + + + Menu + + + + + + + + File + + + + + + + + New... + + + + + + + + Open... + + + + + + + + Save + + + + + + + + Quit + + + + + + Search + + + + + + + + + + Disable + + + + + + Check + + + + + + + + Save As... + + + + + + + + Doc + + + + + + + + PDF + + + + + + Show Menu Popup + + + + + + MenuBar + + + + + + Edit + + + + + + Cut + + + + + + Copy + + + + + + Paste + + + + + + Help + + + + + + About + + + + + T_MultiWindow + + + + MultiWindow + + + + + + <font color='red'>Standard</font> mode window,a new window is created every time + + + + + + + + + + + + + + Create Window + + + + + + <font color='red'>SingleTask</font> mode window,If a window exists, this activates the window + + + + + + <font color='red'>SingleInstance</font> mode window,If the window exists, destroy the window and create a new window + + + + + + Create the window without carrying any parameters + + + + + + Create a window with the parameter username: zhuzichu + + + + + + Login Window Returned Password - > + + + + + T_Pagination + + + + Pagination + + + + + + + + + + <Previous + + + + + + + + + + Next> + + + + + T_Pivot + + + + Pivot + + + + + + All + + + + + + All emails go here. + + + + + + Unread + + + + + + Unread emails go here. + + + + + + Flagged + + + + + + Flagged emails go here. + + + + + + Urgent + + + + + + Urgent emails go here. + + + + + T_Progress + + + + Progress + + + + + T_QRCode + + + + QRCode + + + + + T_RadioButton + + + + RadioButton + + + + + + Right + + + + + + Left + + + + + + + + Disabled + + + + + + Radio Button_1 + + + + + + Radio Button_2 + + + + + + Radio Button_3 + + + + + T_RatingControl + + + + RatingControl + + + + + T_Rectangle + + + + Rectangle + + + + + T_Settings + + + + Settings + + + + + + Current Version + + + + + + Check for Updates + + + + + + Use System AppBar + + + + + + Fits AppBar Windows + + + + + + Friendly Reminder + + + + + + This action requires a restart of the program to take effect, is it restarted? + + + + + + Cancel + + + + + + OK + + + + + + Dark Mode + + + + + + System + + + + + + Light + + + + + + Dark + + + + + + Navigation View Display Mode + + + + + + Open + + + + + + Compact + + + + + + Minimal + + + + + + Auto + + + + + + Language + + + + + T_ShortcutPicker + + + + ShortcutPicker + + + + + T_Slider + + + + Slider + + + + + T_SplitLayout + + + + SplitLayout + + + + + T_StaggeredLayout + + + + StaggeredLayout + + + + + T_StatusLayout + + + + StatusLayout + + + + + + Loading... + + + + + + Empty + + + + + + The page went wrong... + + + + + + Reload + + + + + T_TabView + + + + TabView + + + + + + Document + + + + + T_TableView + + + + TableView + + + + + + Modify the column name + + + + + + Cancel + + + + + + OK + + + + + + Search + + + + + + + + Name + + + + + + Delete + + + + + + Edit + + + + + + Select All + + + + + + Age + + + + + + Clear All + + + + + + Avatar + + + + + + Address + + + + + + Nickname + + + + + + Long String + + + + + + Options + + + + + + <Previous + + + + + + Next> + + + + + T_Text + + + + Text + + + + + + This is a text that can be copied + + + + + T_TextBox + + + + TextBox + + + + + + Single-line Input Box + + + + + + + + + + + + + + Disabled + + + + + + Please enter your password + + + + + + Multi-line Input Box + + + + + + AutoSuggestBox + + + + + T_Theme + + + + Theme + + + + + + Theme colors + + + + + + Customize the Theme Color + + + + + + Dark Mode + + + + + + Native Text + + + + + + Open Animation + + + + + T_TimePicker + + + + TimePicker + + + + + + hourFormat=FluTimePickerType.H + + + + + + + + AM + + + + + + + + PM + + + + + + + + Hour + + + + + + + + Minute + + + + + + + + Cancel + + + + + + + + OK + + + + + + hourFormat=FluTimePickerType.HH + + + + + T_Timeline + + + + Timeline + + + + + + Append + + + + + + clear + + + + + T_ToggleSwitch + + + + ToggleSwitch + + + + + + Right + + + + + + Left + + + + + + Disabled + + + + + T_Tooltip + + + + Tooltip + + + + + + Hover over Tultip and it pops up + + + + + + Text properties of FluIconButton support the Tooltip pop-up window by default + + + + + + + + Delete + + + + + + Click IconButton + + + + + + Add a Tooltip pop-up to a Button + + + + + + Click Button + + + + + T_Tour + + + + Finish + + + + + + Next + + + + + + Previous + + + + + + Upload File + + + + + + Put your files here. + + + + + + + + + + Save + + + + + + Save your changes. + + + + + + Other Actions + + + + + + Click to see other actions. + + + + + + Begin Tour + + + + + + + + Upload + + + + + + More + + + + + T_TreeView + + + + TreeView + + + + + + Total %1 data, %2 data currently displayed + + + + + + A total of %1 data items are selected + + + + + T_Typography + + + + Typography + + + + + T_Watermark + + + + Watermark + + + + diff --git a/example/example_zh.ts b/example/example_zh.ts new file mode 100644 index 00000000..3f395ca8 --- /dev/null +++ b/example/example_zh.ts @@ -0,0 +1,2710 @@ + + + + + CodeExpander + + + + Source + 源码 + + + + + The Copy is Successful + 复制成功 + + + + CrashWindow + + + + Friendly Reminder + 友情提示 + + + + + We apologize for the inconvenience caused by an unexpected error + 对于意外错误给您带来的不便,我们深表歉意 + + + + + Report Logs + 上报日志 + + + + + Restart Program + 重启程序 + + + + FluentInitalizrWindow + + + + FluentUI Initalizr + FluentUI脚手架 + + + + Name + 名称 + + + + Create In + 创建路径 + + + + Browse + 浏览 + + + + Cancel + 取消 + + + + Create + 创建 + + + + HotloadWindow + + + + Hot Loader + 热加载 + + + + + Drag in a qml file + 拖入qml文件 + + + + InitalizrHelper + + + The name cannot be empty + 名称不能为空 + + + + The creation path cannot be empty + 创建路径不能为空 + + + + The path does not exist + 路径不存在 + + + + ItemsFooter + + + + About + 关于 + + + + + Settings + 设置 + + + + ItemsOriginal + + + + Home + 首页 + + + + + PaneItemExpander Disabled + PaneItemExpander 已禁用 + + + + + Basic Input + 基本输入 + + + + + Buttons + 按钮 + + + + + A control that responds to user input and raisesa Click event. + 响应用户输入并引发 Click 事件的控件。 + + + + + Text + 文本 + + + + + Image + 图像 + + + + + Slider + 滑块 + + + + + A control that lets the user select from a rangeof values by moving a Thumb control along atrack. + 一个控件,允许用户通过沿轨道移动 Thumb 控件从一系列值中进行选择。 + + + + + CheckBox + 复选框 + + + + + A control that a user can select or clear. + 用户可以选择或清除的控件。 + + + + + RadioButton + 单选按钮 + + + + + ToggleSwitch + 切换开关 + + + + + PaneItem Disabled + PaneItem 已禁用 + + + + + Form + 表单 + + + + + TextBox + 文本框 + + + + + TimePicker + 时间选取器 + + + + + DatePicker + 日期选取器 + + + + + CalendarPicker + 日历选取器 + + + + + ColorPicker + 颜色选择器 + + + + + ShortcutPicker + 快捷键选择器 + + + + + Surface + 表面 + + + + + InfoBar + 信息栏 + + + + + An inline message to display app-wide statuschange information. + 用于显示应用范围状态更改信息的内联消息。 + + + + + Progress + 进度条 + + + + + RatingControl + 评级控制 + + + + + Badge + 徽章 + + + + + Rectangle + 矩形 + + + + + Clip + 裁剪 + + + + + Carousel + 轮播图 + + + + + Expander + 展开 + + + + + Watermark + 水印 + + + + + Layout + 布局 + + + + + StaggeredLayout + 瀑布流布局 + + + + + SplitLayout + 拆分布局 + + + + + StatusLayout + 状态布局 + + + + + Popus + 弹窗 + + + + + Dialog + 弹窗 + + + + + ComboBox + 组合框 + + + + + Tooltip + 工具提示 + + + + + Menu + 菜单 + + + + + Navigation + 导航 + + + + + Pivot + 轴转 + + + + + Presents information from different sources in a tabbed view. + 在选项卡式视图中显示来自不同源的信息。 + + + + + BreadcrumbBar + 面包屑 + + + + + TabView + 选项卡 + + + + + A control that displays a collection of tabs thatcan be used to display several documents. + 一个控件,用于显示可用于显示多个文档的选项卡集合。 + + + + + TreeView + + + + + + TableView + 表格 + + + + + The TableView control provides a flexible way to display a collection of data in rows and columns + TableView 控件提供了一种以行和列形式显示数据集合的灵活方法 + + + + + Pagination + 分页 + + + + + MultiWindow + 多窗口 + + + + + FlipView + 翻转视图 + + + + + Presents a collection of items that the user canflip through, one item at a time. + 显示用户可以翻阅的项集合,一次翻阅一个项。 + + + + + Theming + 主题 + + + + + Acrylic + 亚克力 + + + + + Theme + 主题 + + + + + Typography + 字体 + + + + + Awesome + 图标 + + + + + Chart + 表格 + + + + + Bar Chart + 条形图 + + + + + Line Chart + 线型图 + + + + + Pie Chart + 饼图 + + + + + Polar Area Chart + 极坐标区域图 + + + + + Bubble Chart + 气泡图 + + + + + Scatter Chart + 散点图 + + + + + Radar Chart + 雷达图 + + + + + Other + 其他 + + + + + QRCode + 二维码 + + + + + Tour + 游览 + + + + + Timeline + 时间轴 + + + + + Captcha + 验证码 + + + + + Network + 网络 + + + + + Remote Loader + 远程加载 + + + + + Hot Loader + 热加载 + + + + + 3D + 3D + + + + + Test Crash + 测试崩溃 + + + + LoginWindow + + + + + + Login + 登录 + + + + + Please enter the account + 请输入账号 + + + + + Please enter your password + 请输入密码 + + + + + Please feel free to enter a password + 请随意输入一个密码 + + + + 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? + +Updated content: + + +现在去下载新版本? + +更新的内容: + + + + + + OK + 确定 + + + + + The current version is already the latest + 当前版本已经是最新版本 + + + + + The network is abnormal + 网络异常 + + + + SingleInstanceWindow + + + + SingleInstance + + + + + + I'm a SingleInstance window, and if I exist, I'll destroy the previous window and create a new one + 我是一个SingleInstance模式的窗口,如果我存在,我会销毁之前的窗口,并创建一个新窗口 + + + + SingleTaskWindow + + + + SingleTask + + + + + + I'm a SingleTask mode window, and if I exist, I activate the window + 我是一个SingleTask模式的窗口,如果我存在,我就激活窗口 + + + + StandardWindow + + + + File + 文件 + + + + + New... + 新建... + + + + + Open... + 打开... + + + + + Save + 保存 + + + + + Save As... + 另存为... + + + + + Quit + 退出 + + + + + Edit + 编辑 + + + + + Cut + 剪切 + + + + + Copy + 复制 + + + + + Paste + 粘贴 + + + + + Help + 帮助 + + + + + About + 关于 + + + + + I'm a Standard mode window, and every time I create a new window + 我是一个Standard模式的窗口,每次我都会创建一个新的窗口 + + + + T_Acrylic + + + + Acrylic + 亚克力 + + + + T_Awesome + + + + Awesome + 图标 + + + + + Please enter a keyword + 请输入关键字 + + + + + Search + 搜索 + + + + + You Copied + 您复制 + + + + T_Badge + + + + Badge + 徽章 + + + + + It usually appears in the upper right corner of the notification icon or avatar to display the number of messages that need to be processed + 一般出现在通知图标或头像的右上角,用于显示需要处理的消息条数 + + + + T_BreadcrumbBar + + + + BreadcurmbBar + 面包屑 + + + + + Reset sample + 重置 + + + + T_Buttons + + + + Buttons + 按钮 + + + + + Support the Tab key to switch focus, and the Space key to perform click events + 支持Tab键切换焦点,空格键执行点击事件 + + + + + Text Button + 文本按钮 + + + + + + + + + + + + + + + + + + + Disabled + 禁用 + + + + + Standard Button + 标准按钮 + + + + + Click StandardButton + 点击标准按钮 + + + + + Filled Button + 填充按钮 + + + + + Click FilledButton + 点击填充按钮 + + + + + Toggle Button + 开关按钮 + + + + + Progress Button + 进度按钮 + + + + + Loading Button + 加载按钮 + + + + + Loading + 正在加载 + + + + + Click IconButton + 点击图标按钮 + + + + + IconOnly + + + + + + Button.IconOnly + + + + + + TextOnly + + + + + + Button.TextOnly + + + + + + TextBesideIcon + + + + + + Button.TextBesideIcon + + + + + + TextUnderIcon + + + + + + Button.TextUnderIcon + + + + + + DropDownButton + 下拉按钮 + + + + + Menu_1 + + + + + + Menu_2 + + + + + + Menu_3 + + + + + + Menu_4 + + + + + + Radio Button_1 + + + + + + Radio Button_2 + + + + + + Radio Button_3 + + + + + T_CalendarPicker + + + + CalendarPicker + 日历选取器 + + + + T_Captcha + + + + Captcha + 验证码 + + + + + Refresh + 刷新 + + + + + Ignore Case + 忽略大小写 + + + + + Please enter a verification code + 请输入验证码 + + + + + The verification code is correct + 验证码错误 + + + + + Error validation, please re-enter + 错误验证,请重新输入 + + + + T_Carousel + + + + Carousel + 轮播图 + + + + + Carousel map, support infinite carousel, infinite swipe, and components implemented with ListView + 轮播图,支持无限轮播,无限滑动,用ListView实现的组件 + + + + T_CheckBox + + + + CheckBox + 复选框 + + + + + A 2-state CheckBox + + + + + + Right + + + + + + Left + + + + + + + + Disabled + 禁用 + + + + + A 3-state CheckBox + + + + + + Three State + + + + + T_Clip + + + + Clip + 裁剪 + + + + + Use with images (this component will have no effect under software rendering) + 配合图片使用(software渲染下该组件将没有效果) + + + + T_ColorPicker + + + + ColorPicker + 颜色选择器 + + + + T_ComboBox + + + + ComboBox + 组合框 + + + + T_DatePicker + + + + TimePicker + 时间选取器 + + + + + showYear=true + + + + + + + + Year + + + + + + + + Month + + + + + + + + Day + + + + + + + + Cancel + 取消 + + + + + + + OK + 确定 + + + + + showYear=false + + + + + T_Dialog + + + + Dialog + 弹窗 + + + + + Show Double Button Dialog + 显示双按钮对话框 + + + + + + + + + Friendly Reminder + 友情提示 + + + + + + + Are you sure you want to opt out? + 您确定要退出吗? + + + + + + + Cancel + 取消 + + + + + + + + + Click the Cancel Button + 单击取消按钮 + + + + + + + + + + + OK + 确定 + + + + + + + + + Click the OK Button + 单击确定按钮 + + + + + Minimize + 最小化 + + + + + Click Minimize + 单击最小化 + + + + + Custom Content Dialog + 自定义对话框内容 + + + + + Custom Content Dialog2 + 自定义对话框内容2 + + + + + Data is loading, please wait... + 正在加载,请稍等... + + + + + Unload + 取消加载 + + + + + Test the InfoBar level on top of the Popup + 测试InfoBar层级在Popup之上 + + + + + Line Chart + 线型图 + + + + T_Expander + + + + Expander + 展开 + + + + + Open a radio box + + + + + + Open a sliding text box + + + + + + Permit me to observe: the late emperor was taken from us before he could finish his life`s work, the restoration of Han. Today, the empire is still divided in three, and our very survival is threatened. Yet still the officials at court and the soldiers throughout the realm remain loyal to you, your majesty. Because they remember the late emperor, all of them, and they wish to repay his kindness in service to you. This is the moment to extend your divine influence, to honour the memory of the late Emperor and strengthen the morale of your officers. It is not time to listen to bad advice, or close your ears to the suggestions of loyal men. +The court and the administration are as one. Both must be judged by one standard. Those who are loyal and good must get what they deserve, but so must the evil-doers who break the law. This will demonstrate the justice of your rule. There cannot be one law for the court and another for the administration. +Counselors and attendants like Guo Youzhi, Fei Yi, and Dong Yun are all reliable men, loyal of purpose and pure in motive. The late Emperor selected them for office so that they would serve you after his death.These are the men who should be consulted on all palace affairs. Xiang Chong has proved himself a fine general in battle, and the late Emperor believed in him. That is why the assembly has recommended him for overall command. It will keep the troops happy if he is consulted on all military matters. +Xiang Chong has proved himself a fine general in battle, and the late Emperor believed in him. That is why the assembly has recommended him for overall command. It will keep the troops happy if he is consulted on all military matters. +The emperors of the Western Han chose their courtiers wisely, and their dynasty flourished. The emperors of the Eastern Han chose poorly, and they doomed the empire to ruin. Whenever the late Emperor discussed this problem with me, he lamented the failings of Emperors Huan and Ling. Advisors like Guo Youzhi, Fei Yi, Chen Zhen, Zhang Yi, and Jiang Wan – these are all men of great integrity and devotion. I encourage you to trust them, your majesty, if the house of Han is to rise again. +I begin as a common man, farming in my fields in Nanyang, doing what I could to survive in an age of chaos. I never had any interest in making a name for myself as a noble. The late Emperor was not ashamed to visit my cottage and seek my advice. Grateful for his regard, I responded to his appeal and threw myself into his service. Now twenty-one years has passed, the late Emperor always appreciated my caution and, in his final days, entrusted me with his cause. +Since that moment, I have been tormented day and night by the fear that I might let him down. That is why I crossed the Lu river at the height of summer, and entered the wastelands beyond. Now the south has been subdued, and our forces are fully armed.I should lead our soldiers to conquer the northern heartland and attempt to remove the hateful traitors, restore the house of Han, and return it to the former capital.This the way I mean to honor my debt to the late Emperor and fulfill my duty to you. Guo Youzhi, Fei Yi, and Dong Yun are the ones who should be making policy decisions and recommendations. +My only desire is to be permitted to drive out the traitors and restore the Han. If I should let you down, punish my offense and report it to the spirit of the late Emperor. If those three advisors should fail in their duties, then they should be punished for their negligence.Your Majesty, consider your course of action carefully. Seek out good advice, and never forget the late Emperor. I depart now on a long expedition, and I will be forever grateful if you heed my advice. Blinded by my own tears, I know not what I write. + Permit me to observe: the late emperor was taken from us before he could finish his lifes work, the restoration of Han. Today, the empire is still divided in three, and our very survival is threatened. Yet still the officials at court and the soldiers throughout the realm remain loyal to you, your majesty. Because they remember the late emperor, all of them, and they wish to repay his kindness in service to you. This is the moment to extend your divine influence, to honour the memory of the late Emperor and strengthen the morale of your officers. It is not time to listen to bad advice, or close your ears to the suggestions of loyal men. +The court and the administration are as one. Both must be judged by one standard. Those who are loyal and good must get what they deserve, but so must the evil-doers who break the law. This will demonstrate the justice of your rule. There cannot be one law for the court and another for the administration. +Counselors and attendants like Guo Youzhi, Fei Yi, and Dong Yun are all reliable men, loyal of purpose and pure in motive. The late Emperor selected them for office so that they would serve you after his death.These are the men who should be consulted on all palace affairs. Xiang Chong has proved himself a fine general in battle, and the late Emperor believed in him. That is why the assembly has recommended him for overall command. It will keep the troops happy if he is consulted on all military matters. +Xiang Chong has proved himself a fine general in battle, and the late Emperor believed in him. That is why the assembly has recommended him for overall command. It will keep the troops happy if he is consulted on all military matters. +The emperors of the Western Han chose their courtiers wisely, and their dynasty flourished. The emperors of the Eastern Han chose poorly, and they doomed the empire to ruin. Whenever the late Emperor discussed this problem with me, he lamented the failings of Emperors Huan and Ling. Advisors like Guo Youzhi, Fei Yi, Chen Zhen, Zhang Yi, and Jiang Wan – these are all men of great integrity and devotion. I encourage you to trust them, your majesty, if the house of Han is to rise again. +I begin as a common man, farming in my fields in Nanyang, doing what I could to survive in an age of chaos. I never had any interest in making a name for myself as a noble. The late Emperor was not ashamed to visit my cottage and seek my advice. Grateful for his regard, I responded to his appeal and threw myself into his service. Now twenty-one years has passed, the late Emperor always appreciated my caution and, in his final days, entrusted me with his cause. +Since that moment, I have been tormented day and night by the fear that I might let him down. That is why I crossed the Lu river at the height of summer, and entered the wastelands beyond. Now the south has been subdued, and our forces are fully armed.I should lead our soldiers to conquer the northern heartland and attempt to remove the hateful traitors, restore the house of Han, and return it to the former capital.This the way I mean to honor my debt to the late Emperor and fulfill my duty to you. Guo Youzhi, Fei Yi, and Dong Yun are the ones who should be making policy decisions and recommendations. +My only desire is to be permitted to drive out the traitors and restore the Han. If I should let you down, punish my offense and report it to the spirit of the late Emperor. If those three advisors should fail in their duties, then they should be punished for their negligence.Your Majesty, consider your course of action carefully. Seek out good advice, and never forget the late Emperor. I depart now on a long expedition, and I will be forever grateful if you heed my advice. Blinded by my own tears, I know not what I write. + 先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。宫中府中,俱为一体;陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。臣不胜受恩感激。今当远离,临表涕零,不知所言。 + + + + T_FlipView + + + + FlipView + 翻转视图 + + + + + Horizontal FlipView + 水平方向的翻转视图 + + + + + Vertical FlipView + 垂直方向的翻转视图 + + + + T_Home + + + + FluentUI GitHub + FluentUI GitHub + + + + + The latest FluentUI controls and styles for your applications. + 最新的 FluentUI 控件和样式 + + + + + FluentUI Initalizr + FluentUI脚手架 + + + + + FluentUI Initializr is a FluentUI tool that helps you create and customize Fluent UI projects with various options. + FluentUI 脚手架是一个快速创建项目工具,可帮助您创建和自定义具有各种选项的 Fluent UI 项目 + + + + T_Image + + + + Image + 图像 + + + + + Reload + 重新加载 + + + + + The image failed to load, please reload + 图片加载失败,请重新加载 + + + + T_InfoBar + + + + InfoBar + 信息栏 + + + + + Info + + + + + + This is an InfoBar in the Info Style + 这是一个Info样式的信息栏 + + + + + Warning + + + + + + This is an InfoBar in the Warning Style + 这是一个Warning样式的信息栏 + + + + + This is an InfoBar in the Error Style + 这是一个Error样式的信息栏 + + + + + This is an InfoBar in the Success Style + 这是一个Success样式的信息栏 + + + + + InfoBar that needs to be turned off manually + 需要手动关闭的信息栏 + + + + + Loading... + 加载中... + + + + T_Menu + + + + + + Menu + 菜单 + + + + + + + File + 文件 + + + + + + + New... + 新建... + + + + + + + Open... + 打开... + + + + + + + Save + 保存 + + + + + + + Quit + 退出 + + + + + Search + 搜索 + + + + + + + + + Disable + 不可操作 + + + + + Check + Check + + + + + + + Save As... + 另存为... + + + + + + + Doc + DOC + + + + + + + PDF + PDF + + + + + Show Menu Popup + + + + + + MenuBar + + + + + + Edit + 编辑 + + + + + Cut + 剪切 + + + + + Copy + 复制 + + + + + Paste + 粘贴 + + + + + Help + 帮助 + + + + + About + 关于 + + + + T_MultiWindow + + + + MultiWindow + 多窗口 + + + + + <font color='red'>Standard</font> mode window,a new window is created every time + <font color='red'>Standard</font> 模式窗口,每次都会创建新窗口 + + + + + + + + + + + + + Create Window + 创建窗口 + + + + + <font color='red'>SingleTask</font> mode window,If a window exists, this activates the window + <font color='red'>SingleTask</font> 模式窗口,如果窗口存在,这激活该窗口 + + + + + <font color='red'>SingleInstance</font> mode window,If the window exists, destroy the window and create a new window + <font color='red'>SingleInstance</font> 模式窗口,如果窗口存在,则销毁窗口,然后新建窗口 + + + + + Create the window without carrying any parameters + 创建一个窗口,不携带任何参数 + + + + + Create a window with the parameter username: zhuzichu + 创建一个窗口,并携带参数用户名:zhuzichu + + + + + Login Window Returned Password - > + 登录窗口返回过来的密码 - > + + + + T_Pagination + + + + Pagination + 分页 + + + + + + + + + <Previous + <上一页 + + + + + + + + + Next> + 下一页> + + + + T_Pivot + + + + Pivot + 轴转 + + + + + All + 所有 + + + + + All emails go here. + 所有电子邮件都在这里 + + + + + Unread + 未读 + + + + + Unread emails go here. + 未读电子邮件都在这里 + + + + + Flagged + 标记 + + + + + Flagged emails go here. + 标记电子邮件都在这里 + + + + + Urgent + 紧急 + + + + + Urgent emails go here. + 紧急电子邮件都在这里 + + + + T_Progress + + + + Progress + 进度条 + + + + T_QRCode + + + + QRCode + 二维码 + + + + T_RadioButton + + + + RadioButton + 单选按钮 + + + + + Right + + + + + + Left + + + + + + + + Disabled + 禁用 + + + + + Radio Button_1 + + + + + + Radio Button_2 + + + + + + Radio Button_3 + + + + + T_RatingControl + + + + RatingControl + 评级控制 + + + + T_Rectangle + + + + Rectangle + 矩形 + + + + T_Settings + + + + Settings + 设置 + + + + + Current Version + 当前版本 + + + + + Check for Updates + 检查更新 + + + + + Use System AppBar + 使用系统应用栏 + + + + + Fits AppBar Windows + 沉浸式应用栏 + + + + + Friendly Reminder + 友情提示 + + + + + This action requires a restart of the program to take effect, is it restarted? + 此操作需要重启程序才能生效,是否重新启动? + + + + + Cancel + 取消 + + + + + OK + 确定 + + + + + Dark Mode + 夜间模式 + + + + + System + 跟随系统 + + + + + Light + 浅色 + + + + + Dark + 深色 + + + + + Navigation View Display Mode + 导航视图 + + + + + Open + 开放 + + + + + Compact + 紧凑 + + + + + Minimal + 极简 + + + + + Auto + 自动 + + + + + Language + 语言 + + + + T_ShortcutPicker + + + + ShortcutPicker + 快捷键选择器 + + + + T_Slider + + + + Slider + 滑块 + + + + T_SplitLayout + + + + SplitLayout + 拆分布局 + + + + T_StaggeredLayout + + + + StaggeredLayout + 瀑布流布局 + + + + T_StatusLayout + + + + StatusLayout + 状态布局 + + + + + Loading... + 正在加载... + + + + + Empty + 空空如也 + + + + + The page went wrong... + 页面出错了... + + + + + Reload + 重新加载 + + + + T_TabView + + + + TabView + 选项卡 + + + + + Document + 文档 + + + + T_TableView + + + + TableView + 表格 + + + + + Modify the column name + 修改列名 + + + + + Cancel + 取消 + + + + + OK + 确定 + + + + + Search + 搜索 + + + + + + + Name + 名称 + + + + + Delete + 删除 + + + + + Edit + 编辑 + + + + + Select All + 全选 + + + + + Age + 年龄 + + + + + Clear All + 清除所有 + + + + + Avatar + 头像 + + + + + Address + 地址 + + + + + Nickname + 昵称 + + + + + Long String + 长字符串 + + + + + Options + 操作 + + + + + <Previous + <上一页 + + + + + Next> + 下一页> + + + + T_Text + + + + Text + 文本 + + + + + This is a text that can be copied + 这是一个可以复制的文本 + + + + T_TextBox + + + + TextBox + 文本框 + + + + + Single-line Input Box + 单行输入框 + + + + + + + + + + + + + Disabled + 禁用 + + + + + Please enter your password + 请输入您的密码 + + + + + Multi-line Input Box + 多行输入框 + + + + + AutoSuggestBox + 自动建议框 + + + + T_Theme + + + + Theme + 主题 + + + + + Theme colors + 主题颜色 + + + + + Customize the Theme Color + 自定义主题颜色 + + + + + Dark Mode + 夜间模式 + + + + + Native Text + Native文本 + + + + + Open Animation + 开启动画 + + + + T_TimePicker + + + + TimePicker + 时间选取器 + + + + + hourFormat=FluTimePickerType.H + + + + + + + + AM + 上午 + + + + + + + PM + 下午 + + + + + + + Hour + + + + + + + + Minute + + + + + + + + Cancel + 取消 + + + + + + + OK + 确定 + + + + + hourFormat=FluTimePickerType.HH + + + + + T_Timeline + + + + Timeline + 时间轴 + + + + + Append + 追加 + + + + + clear + 清空 + + + + T_ToggleSwitch + + + + ToggleSwitch + 切换开关 + + + + + Right + + + + + + Left + + + + + + Disabled + 禁用 + + + + T_Tooltip + + + + Tooltip + 工具提示 + + + + + Hover over Tultip and it pops up + 鼠标悬停不动,弹出Tooltip + + + + + Text properties of FluIconButton support the Tooltip pop-up window by default + FluIconButton的text属性自带Tooltip效果 + + + + + + + Delete + 删除 + + + + + Click IconButton + 点击图标按钮 + + + + + Add a Tooltip pop-up to a Button + 给一个Button添加Tooltip效果 + + + + + Click Button + 点击按钮 + + + + T_Tour + + + + Finish + 完成 + + + + + Next + 下一步 + + + + + Previous + 上一步 + + + + + Upload File + 上传文件 + + + + + Put your files here. + 把你的文件放在这里 + + + + + + + + + Save + 保存 + + + + + Save your changes. + 保存更改 + + + + + Other Actions + 其他操作 + + + + + Click to see other actions. + 点击查看其他操作 + + + + + Begin Tour + 开始游览 + + + + + + + Upload + 上传 + + + + + More + 更多 + + + + T_TreeView + + + + TreeView + + + + + + Total %1 data, %2 data currently displayed + 共计%1条数据,当前显示的%2条数据 + + + + + A total of %1 data items are selected + 共计选中%1条数据 + + + + T_Typography + + + + Typography + 字体 + + + + T_Watermark + + + + Watermark + 水印 + + + diff --git a/example/qml-Qt6/App.qml b/example/qml-Qt6/App.qml index 0abd8004..9dfd9891 100644 --- a/example/qml-Qt6/App.qml +++ b/example/qml-Qt6/App.qml @@ -21,6 +21,13 @@ Item { } } + Connections{ + target: TranslateHelper + function onCurrentChanged(){ + SettingsHelper.saveLanguage(TranslateHelper.current) + } + } + Component.onCompleted: { FluNetwork.openLog = false FluNetwork.setInterceptor(function(param){ @@ -37,6 +44,7 @@ Item { "/login":"qrc:/example/qml/window/LoginWindow.qml", "/hotload":"qrc:/example/qml/window/HotloadWindow.qml", "/crash":"qrc:/example/qml/window/CrashWindow.qml", + "/fluentInitalizr":"qrc:/example/qml/window/FluentInitalizrWindow.qml", "/singleTaskWindow":"qrc:/example/qml/window/SingleTaskWindow.qml", "/standardWindow":"qrc:/example/qml/window/StandardWindow.qml", "/singleInstanceWindow":"qrc:/example/qml/window/SingleInstanceWindow.qml", diff --git a/example/qml-Qt6/component/CodeExpander.qml b/example/qml-Qt6/component/CodeExpander.qml index 4b5cc035..52d0291d 100644 --- a/example/qml-Qt6/component/CodeExpander.qml +++ b/example/qml-Qt6/component/CodeExpander.qml @@ -8,7 +8,7 @@ FluExpander{ id:control property string code: "" - headerText: "Source" + headerText: qsTr("Source") contentHeight:content.height focus: false @@ -34,7 +34,7 @@ FluExpander{ } onClicked:{ FluTools.clipText(FluTools.html2PlantText(content.text)) - showSuccess("复制成功") + showSuccess(qsTr("The Copy is Successful")) } } @@ -49,7 +49,6 @@ FluExpander{ } function highlightQmlCode(code) { - // 定义 QML 关键字列表 var qmlKeywords = [ "FluTextButton", "FluAppBar", diff --git a/example/qml-Qt6/global/ItemsFooter.qml b/example/qml-Qt6/global/ItemsFooter.qml index 3e026606..85d466f8 100644 --- a/example/qml-Qt6/global/ItemsFooter.qml +++ b/example/qml-Qt6/global/ItemsFooter.qml @@ -13,7 +13,7 @@ FluObject{ FluPaneItemSeparator{} FluPaneItem{ - title:Lang.about + title:qsTr("About") icon:FluentIcons.Contact onTapListener:function(){ FluApp.navigate("/about") @@ -21,7 +21,7 @@ FluObject{ } FluPaneItem{ - title:Lang.settings + title:qsTr("Settings") menuDelegate: paneItemMenu icon:FluentIcons.Settings url:"qrc:/example/qml/page/T_Settings.qml" diff --git a/example/qml-Qt6/global/ItemsOriginal.qml b/example/qml-Qt6/global/ItemsOriginal.qml index 90aef8f7..13137a8b 100644 --- a/example/qml-Qt6/global/ItemsOriginal.qml +++ b/example/qml-Qt6/global/ItemsOriginal.qml @@ -17,14 +17,14 @@ FluObject{ FluPaneItem{ id:item_home count: 9 - title:Lang.home + title: qsTr("Home") menuDelegate: paneItemMenu - infoBadge:FluBadge{ + infoBadge: FluBadge{ count: item_home.count } - icon:FluentIcons.Home - url:"qrc:/example/qml/page/T_Home.qml" - onTap:{ + icon: FluentIcons.Home + url: "qrc:/example/qml/page/T_Home.qml" + onTap: { if(navigationView.getCurrentUrl()){ item_home.count = 0 } @@ -33,376 +33,376 @@ FluObject{ } FluPaneItemExpander{ - title:"PaneItemExpander Disabled" + title: qsTr("PaneItemExpander Disabled") iconVisible: false disabled: true } FluPaneItemExpander{ - id:item_expander_basic_input - title:Lang.basic_input - icon:FluentIcons.CheckboxComposite + id: item_expander_basic_input + title: qsTr("Basic Input") + icon: FluentIcons.CheckboxComposite FluPaneItem{ - id:item_buttons + id: item_buttons count: 99 - infoBadge:FluBadge{ + infoBadge: FluBadge{ count: item_buttons.count } - title:"Buttons" + title: qsTr("Buttons") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/Button.png",recentlyUpdated:true,desc:"A control that responds to user input and raisesa Click event."}) - url:"qrc:/example/qml/page/T_Buttons.qml" - onTap:{ + extra: ({image:"qrc:/example/res/image/control/Button.png",recentlyUpdated:true,desc:qsTr("A control that responds to user input and raisesa Click event.")}) + url: "qrc:/example/qml/page/T_Buttons.qml" + onTap: { item_buttons.count = 0 navigationView.push(url) } } FluPaneItem{ - id:item_text - title:"Text" + id: item_text + title: qsTr("Text") menuDelegate: paneItemMenu count: 5 - infoBadge:FluBadge{ + infoBadge: FluBadge{ count: item_text.count color: Qt.rgba(82/255,196/255,26/255,1) } - url:"qrc:/example/qml/page/T_Text.qml" - onTap:{ + url: "qrc:/example/qml/page/T_Text.qml" + onTap: { item_text.count = 0 navigationView.push(url) } } FluPaneItem{ - title:"Image" + title: qsTr("Image") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Image.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Image.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Slider" + title: qsTr("Slider") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/Slider.png",recentlyUpdated:true,desc:"A control that lets the user select from a rangeof values by moving a Thumb control along atrack."}) - url:"qrc:/example/qml/page/T_Slider.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/Slider.png",recentlyUpdated:true,desc:qsTr("A control that lets the user select from a rangeof values by moving a Thumb control along atrack.")}) + url: "qrc:/example/qml/page/T_Slider.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"CheckBox" + title: qsTr("CheckBox") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/Checkbox.png",recentlyUpdated:true,desc:"A control that a user can select or clear."}) - url:"qrc:/example/qml/page/T_CheckBox.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/Checkbox.png",recentlyUpdated:true,desc:qsTr("A control that a user can select or clear.")}) + url: "qrc:/example/qml/page/T_CheckBox.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"RadioButton" + title: qsTr("RadioButton") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_RadioButton.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_RadioButton.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"ToggleSwitch" + title: qsTr("ToggleSwitch") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_ToggleSwitch.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_ToggleSwitch.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"PaneItem Disabled" + title: qsTr("PaneItem Disabled") disabled: true icon: FluentIcons.Error } } FluPaneItemExpander{ - title:Lang.form - icon:FluentIcons.GridView - FluPaneItem{ - title:"TextBox" + title: qsTr("Form") + icon: FluentIcons.GridView + FluPaneItem { + title: qsTr("TextBox") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_TextBox.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_TextBox.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"TimePicker" + title: qsTr("TimePicker") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_TimePicker.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_TimePicker.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"DatePicker" + title: qsTr("DatePicker") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_DatePicker.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_DatePicker.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"CalendarPicker" + title: qsTr("CalendarPicker") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_CalendarPicker.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_CalendarPicker.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"ColorPicker" + title: qsTr("ColorPicker") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_ColorPicker.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_ColorPicker.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"ShortcutPicker" + title: qsTr("ShortcutPicker") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_ShortcutPicker.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_ShortcutPicker.qml" + onTap: { navigationView.push(url) } } } FluPaneItemExpander{ - title:Lang.surface - icon:FluentIcons.SurfaceHub + title: qsTr("Surface") + icon: FluentIcons.SurfaceHub FluPaneItem{ - title:"InfoBar" + title: qsTr("InfoBar") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/InfoBar.png",recentlyUpdated:true,desc:"An inline message to display app-wide statuschange information."}) - url:"qrc:/example/qml/page/T_InfoBar.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/InfoBar.png",recentlyUpdated:true,desc:qsTr("An inline message to display app-wide statuschange information.")}) + url: "qrc:/example/qml/page/T_InfoBar.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Progress" + title: qsTr("Progress") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Progress.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Progress.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"RatingControl" + title: qsTr("RatingControl") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_RatingControl.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_RatingControl.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Badge" + title: qsTr("Badge") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Badge.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Badge.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Rectangle" + title: qsTr("Rectangle") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Rectangle.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Rectangle.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Clip" + title: qsTr("Clip") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Clip.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Clip.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Carousel" + title: qsTr("Carousel") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Carousel.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Carousel.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Expander" + title: qsTr("Expander") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Expander.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Expander.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Watermark" + title: qsTr("Watermark") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Watermark.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Watermark.qml" + onTap: { navigationView.push(url) } } } FluPaneItemExpander{ - title:Lang.layout - icon:FluentIcons.DockLeft - FluPaneItem{ - title:"StaggeredLayout" + title: qsTr("Layout") + icon: FluentIcons.DockLeft + FluPaneItem { + title: qsTr("StaggeredLayout") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_StaggeredLayout.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_StaggeredLayout.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"SplitLayout" + title: qsTr("SplitLayout") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_SplitLayout.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_SplitLayout.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"StatusLayout" + title: qsTr("StatusLayout") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_StatusLayout.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_StatusLayout.qml" + onTap: { navigationView.push(url) } } } FluPaneItemExpander{ - title:Lang.popus - icon:FluentIcons.ButtonMenu + title: qsTr("Popus") + icon: FluentIcons.ButtonMenu FluPaneItem{ - title:"Dialog" + title: qsTr("Dialog") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Dialog.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Dialog.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - id:item_combobox - title:"ComboBox" + id: item_combobox + title: qsTr("ComboBox") menuDelegate: paneItemMenu count: 9 infoBadge:FluBadge{ count: item_combobox.count color: Qt.rgba(250/255,173/255,20/255,1) } - url:"qrc:/example/qml/page/T_ComboBox.qml" - onTap:{ + url: "qrc:/example/qml/page/T_ComboBox.qml" + onTap: { item_combobox.count = 0 navigationView.push("qrc:/example/qml/page/T_ComboBox.qml") } } FluPaneItem{ - title:"Tooltip" + title: qsTr("Tooltip") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Tooltip.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Tooltip.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Menu" + title: qsTr("Menu") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Menu.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Menu.qml" + onTap: { navigationView.push(url) } } } FluPaneItemExpander{ - title:Lang.navigation - icon:FluentIcons.AllApps + title: qsTr("Navigation") + icon: FluentIcons.AllApps FluPaneItem{ - title:"Pivot" + title: qsTr("Pivot") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/Pivot.png",order:3,recentlyAdded:true,desc:"Presents information from different sources in atabbed view."}) - url:"qrc:/example/qml/page/T_Pivot.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/Pivot.png",order:3,recentlyAdded:true,desc:qsTr("Presents information from different sources in a tabbed view.")}) + url: "qrc:/example/qml/page/T_Pivot.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"BreadcrumbBar" + title: qsTr("BreadcrumbBar") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_BreadcrumbBar.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_BreadcrumbBar.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"TabView" + title: qsTr("TabView") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/TabView.png",order:1,recentlyAdded:true,desc:"A control that displays a collection of tabs thatcan be used to display several documents."}) - url:"qrc:/example/qml/page/T_TabView.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/TabView.png",order:1,recentlyAdded:true,desc:qsTr("A control that displays a collection of tabs thatcan be used to display several documents.")}) + url: "qrc:/example/qml/page/T_TabView.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"TreeView" + title: qsTr("TreeView") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_TreeView.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_TreeView.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"TableView" + title: qsTr("TableView") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/DataGrid.png",order:4,recentlyAdded:true,desc:"The TableView control provides a flexible way to display a collection of data in rows and columns"}) - url:"qrc:/example/qml/page/T_TableView.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/DataGrid.png",order:4,recentlyAdded:true,desc:qsTr("The TableView control provides a flexible way to display a collection of data in rows and columns")}) + url: "qrc:/example/qml/page/T_TableView.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Pagination" + title: qsTr("Pagination") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Pagination.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Pagination.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"MultiWindow" + title: qsTr("MultiWindow") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_MultiWindow.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_MultiWindow.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"FlipView" + title: qsTr("FlipView") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/FlipView.png",order:2,recentlyAdded:true,desc:"Presents a collection of items that the user canflip through, one item at a time."}) - url:"qrc:/example/qml/page/T_FlipView.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/FlipView.png",order:2,recentlyAdded:true,desc:qsTr("Presents a collection of items that the user canflip through, one item at a time.")}) + url: "qrc:/example/qml/page/T_FlipView.qml" + onTap: { navigationView.push(url) } } } FluPaneItemExpander{ - title:Lang.theming + title: qsTr("Theming") icon:FluentIcons.Brightness FluPaneItem{ - title:"Acrylic" + title: qsTr("Acrylic") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Acrylic.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Acrylic.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Theme" + title: qsTr("Theme") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Theme.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Theme.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Typography" + title: qsTr("Typography") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Typography.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Typography.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Awesome" + title: qsTr("Awesome") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Awesome.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Awesome.qml" + onTap: { navigationView.push(url) } } } FluPaneItemExpander{ - title: Lang.chart - icon:FluentIcons.AreaChart + title: qsTr("Chart") + icon: FluentIcons.AreaChart FluPaneItem{ - title:Lang.bar_chart + title: qsTr("Bar Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_BarChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_BarChart.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:Lang.line_chart + title: qsTr("Line Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_LineChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_LineChart.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:Lang.pie_chart + title: qsTr("Pie Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_PieChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_PieChart.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:Lang.polar_area_chart + title: qsTr("Polar Area Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_PolarAreaChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_PolarAreaChart.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:Lang.bubble_chart + title: qsTr("Bubble Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_BubbleChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_BubbleChart.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:Lang.scatter_chart + title: qsTr("Scatter Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_ScatterChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_ScatterChart.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:Lang.radar_chart + title: qsTr("Radar Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_RadarChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_RadarChart.qml" + onTap: { navigationView.push(url) } } } @@ -412,67 +412,67 @@ FluObject{ } FluPaneItemExpander{ - title:Lang.other - icon:FluentIcons.Shop + title: qsTr("Other") + icon: FluentIcons.Shop FluPaneItem{ - title:"QRCode" + title: qsTr("QRCode") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_QRCode.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_QRCode.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Tour" + title: qsTr("Tour") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Tour.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Tour.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Timeline" + title: qsTr("Timeline") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Timeline.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Timeline.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Captcha" + title: qsTr("Captcha") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Captcha.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Captcha.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Network" + title: qsTr("Network") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Network.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Network.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - id:item_other - title:"RemoteLoader" + id: item_other + title: qsTr("Remote Loader") menuDelegate: paneItemMenu count: 99 infoBadge:FluBadge{ count: item_other.count color: Qt.rgba(82/255,196/255,26/255,1) } - url:"qrc:/example/qml/page/T_RemoteLoader.qml" - onTap:{ + url: "qrc:/example/qml/page/T_RemoteLoader.qml" + onTap: { item_other.count = 0 navigationView.push("qrc:/example/qml/page/T_RemoteLoader.qml") } } FluPaneItem{ - title:"HotLoader" - onTapListener:function(){ + title: qsTr("Hot Loader") + onTapListener: function(){ FluApp.navigate("/hotload") } } FluPaneItem{ - title:"3D" + title: qsTr("3D") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_3D.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_3D.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Test Crash" + title: qsTr("Test Crash") visible: FluTools.isWin() onTapListener: function(){ AppInfo.testCrash() diff --git a/example/qml-Qt6/global/Lang.qml b/example/qml-Qt6/global/Lang.qml deleted file mode 100644 index d416ba92..00000000 --- a/example/qml-Qt6/global/Lang.qml +++ /dev/null @@ -1,104 +0,0 @@ -pragma Singleton - -import QtQuick - -QtObject { - - property string home - property string basic_input - property string form - property string surface - property string layout - property string popus - property string navigation - property string theming - property string media - property string dark_mode - property string sys_dark_mode - property string search - property string about - property string settings - property string locale - property string navigation_view_display_mode - property string other - property string chart - property string bar_chart - property string line_chart - property string pie_chart - property string polar_area_chart - property string bubble_chart - property string scatter_chart - property string radar_chart - - function zh(){ - home="首页" - basic_input="基本输入" - form="表单" - surface="表面" - layout="布局" - popus="弹窗" - navigation="导航" - theming="主题" - media="媒体" - dark_mode="夜间模式" - sys_dark_mode="跟随系统" - search="查找" - about="关于" - settings="设置" - locale="语言环境" - navigation_view_display_mode="导航视图显示模式" - other="其他" - chart="表格" - bar_chart="条形图" - line_chart="折线图" - pie_chart="饼图" - polar_area_chart="极坐标区域图" - bubble_chart="气泡图" - scatter_chart="散点图" - radar_chart="雷达图" - } - - function en(){ - home="Home" - basic_input="Basic Input" - form="Form" - surface="Surfaces" - layout="Layout" - popus="Popus" - navigation="Navigation" - theming="Theming" - media="Media" - dark_mode="Dark Mode" - sys_dark_mode="Sync with system" - search="Search" - about="About" - settings="Settings" - locale="Locale" - navigation_view_display_mode="NavigationView Display Mode" - other="Other" - chart="Chart" - bar_chart="Bar Chart" - line_chart="Line Chart" - pie_chart="Pie Chart" - polar_area_chart="Polar Area Chart" - bubble_chart="Bubble Chart" - scatter_chart="Scatter Chart" - radar_chart="Radar Chart" - } - - property string __locale - property var __localeList: ["Zh","En"] - - on__LocaleChanged: { - if(__locale === "Zh"){ - zh() - }else{ - en() - } - } - - Component.onCompleted: { - __locale = "En" - } - -} diff --git a/example/qml-Qt6/global/qmldir b/example/qml-Qt6/global/qmldir index cc5287d7..eb6bfeaf 100644 --- a/example/qml-Qt6/global/qmldir +++ b/example/qml-Qt6/global/qmldir @@ -1,3 +1,2 @@ singleton ItemsOriginal 1.0 ItemsOriginal.qml singleton ItemsFooter 1.0 ItemsFooter.qml -singleton Lang 1.0 Lang.qml diff --git a/example/qml-Qt6/page/T_Acrylic.qml b/example/qml-Qt6/page/T_Acrylic.qml index 40a6de32..eb1e0801 100644 --- a/example/qml-Qt6/page/T_Acrylic.qml +++ b/example/qml-Qt6/page/T_Acrylic.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Acrylic" + title: qsTr("Acrylic") RowLayout{ spacing: 10 diff --git a/example/qml-Qt6/page/T_Awesome.qml b/example/qml-Qt6/page/T_Awesome.qml index 0d0e9d31..6acab4f5 100644 --- a/example/qml-Qt6/page/T_Awesome.qml +++ b/example/qml-Qt6/page/T_Awesome.qml @@ -6,11 +6,11 @@ import FluentUI FluContentPage { - title:"Awesome" + title: qsTr("Awesome") FluTextBox{ id:text_box - placeholderText: "请输入关键字" + placeholderText: qsTr("Please enter a keyword") anchors{ topMargin: 20 top:parent.top @@ -18,7 +18,7 @@ FluContentPage { } FluFilledButton{ - text:"搜索" + text: qsTr("Search") anchors{ left: text_box.right verticalCenter: text_box.verticalCenter @@ -53,7 +53,7 @@ FluContentPage { onClicked: { var text ="FluentIcons."+modelData.name; FluTools.clipText(text) - showSuccess("您复制了 "+text) + showSuccess(qsTr("You Copied ")+text) } } FluText { @@ -62,7 +62,7 @@ FluContentPage { anchors.horizontalCenter: parent.horizontalCenter anchors.top: item_icon.bottom width:parent.width - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap text: modelData.name horizontalAlignment: Text.AlignHCenter } diff --git a/example/qml-Qt6/page/T_Badge.qml b/example/qml-Qt6/page/T_Badge.qml index 37b2e230..0385e23e 100644 --- a/example/qml-Qt6/page/T_Badge.qml +++ b/example/qml-Qt6/page/T_Badge.qml @@ -7,12 +7,12 @@ import "../component" FluScrollablePage{ - title:"Badge" + title: qsTr("Badge") FluArea{ Layout.fillWidth: true Layout.topMargin: 20 - height: 106 + height: 120 paddings: 10 Column{ @@ -20,11 +20,13 @@ FluScrollablePage{ anchors{ verticalCenter: parent.verticalCenter left: parent.left + right: parent.right } FluText{ - text:"一般出现在通知图标或头像的右上角,用于显示需要处理的消息条数" + wrapMode: Text.WordWrap + width: parent.width + text: qsTr("It usually appears in the upper right corner of the notification icon or avatar to display the number of messages that need to be processed") } - Row{ spacing: 20 Rectangle{ diff --git a/example/qml-Qt6/page/T_BreadcrumbBar.qml b/example/qml-Qt6/page/T_BreadcrumbBar.qml index 28d21e24..51cc829d 100644 --- a/example/qml-Qt6/page/T_BreadcrumbBar.qml +++ b/example/qml-Qt6/page/T_BreadcrumbBar.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"BreadcurmbBar" + title: qsTr("BreadcurmbBar") Component.onCompleted: { var items = [] @@ -48,7 +48,7 @@ FluScrollablePage{ spacing: 10 FluFilledButton{ - text:"Reset sample" + text: qsTr("Reset sample") onClicked:{ var items = [] for(var i=0;i<10;i++){ @@ -66,7 +66,6 @@ FluScrollablePage{ Layout.fillWidth: true onClickItem: (model)=>{ - //不是点击最后一个item元素 if(model.index+1!==count()){ breadcrumb_2.remove(model.index+1,count()-model.index-1) } diff --git a/example/qml-Qt6/page/T_Buttons.qml b/example/qml-Qt6/page/T_Buttons.qml index 634ea20e..7806e81c 100644 --- a/example/qml-Qt6/page/T_Buttons.qml +++ b/example/qml-Qt6/page/T_Buttons.qml @@ -8,11 +8,11 @@ import "../component" FluScrollablePage{ - title:"Buttons" + title: qsTr("Buttons") FluText{ Layout.topMargin: 20 - text:"支持Tab键切换焦点,空格键执行点击事件" + text: qsTr("Support the Tab key to switch focus, and the Space key to perform click events") } FluArea{ @@ -22,9 +22,8 @@ FluScrollablePage{ Layout.topMargin: 20 FluTextButton{ - disabled:text_button_switch.checked - text:"Text Button" - contentDescription: "文本按钮" + disabled: text_button_switch.checked + text: qsTr("Text Button") onClicked: { showInfo("点击Text Button") } @@ -34,12 +33,12 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:text_button_switch + id: text_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -60,10 +59,10 @@ FluScrollablePage{ Layout.topMargin: 20 FluButton{ - disabled:button_switch.checked - text:"Standard Button" + disabled: button_switch.checked + text: qsTr("Standard Button") onClicked: { - showInfo("点击StandardButton") + showInfo(qsTr("Click StandardButton")) } anchors{ verticalCenter: parent.verticalCenter @@ -71,12 +70,12 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:button_switch + id: button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -97,10 +96,10 @@ FluScrollablePage{ paddings: 10 FluFilledButton{ - disabled:filled_button_switch.checked - text:"Filled Button" + disabled: filled_button_switch.checked + text: qsTr("Filled Button") onClicked: { - showWarning("点击FilledButton"+height) + showWarning(qsTr("Click FilledButton")) } anchors{ verticalCenter: parent.verticalCenter @@ -108,12 +107,12 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:filled_button_switch + id: filled_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -135,19 +134,19 @@ FluScrollablePage{ FluToggleButton{ disabled:toggle_button_switch.checked - text:"Toggle Button" + text: qsTr("Toggle Button") anchors{ verticalCenter: parent.verticalCenter left: parent.left } } FluToggleSwitch{ - id:toggle_button_switch + id: toggle_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -162,7 +161,7 @@ FluScrollablePage{ } Timer{ - id:timer_progress + id: timer_progress interval: 200 onTriggered: { btn_progress.progress = (btn_progress.progress + 0.1).toFixed(1) @@ -181,9 +180,9 @@ FluScrollablePage{ paddings: 10 FluProgressButton{ - id:btn_progress - disabled:progress_button_switch.checked - text:"Progress Button" + id: btn_progress + disabled: progress_button_switch.checked + text: qsTr("Progress Button") anchors{ verticalCenter: parent.verticalCenter left: parent.left @@ -194,12 +193,12 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:progress_button_switch + id: progress_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -220,9 +219,9 @@ FluScrollablePage{ paddings: 10 FluLoadingButton{ - id:btn_loading - loading:loading_button_switch.checked - text:"Loading Button" + id: btn_loading + loading: loading_button_switch.checked + text: qsTr("Loading Button") anchors{ verticalCenter: parent.verticalCenter left: parent.left @@ -232,13 +231,13 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:loading_button_switch + id: loading_button_switch checked: true anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Loading" + text: qsTr("Loading") } } CodeExpander{ @@ -259,7 +258,7 @@ FluScrollablePage{ paddings: 10 Layout.topMargin: 20 Flow{ - id:layout_icon_button + id: layout_icon_button spacing: 10 anchors{ verticalCenter: parent.verticalCenter @@ -267,60 +266,60 @@ FluScrollablePage{ right: icon_button_switch.left } FluIconButton{ - disabled:icon_button_switch.checked + disabled: icon_button_switch.checked iconDelegate: Image{ sourceSize: Qt.size(40,40) ; width: 20; height: 20; source: "qrc:/example/res/image/ic_home_github.png" } onClicked:{ - showSuccess("点击IconButton") + showSuccess(qsTr("Click IconButton")) } } FluIconButton{ - iconSource:FluentIcons.ChromeCloseContrast - disabled:icon_button_switch.checked + iconSource: FluentIcons.ChromeCloseContrast + disabled: icon_button_switch.checked iconSize: 15 - text:"IconOnly" + text: qsTr("IconOnly") display: Button.IconOnly onClicked:{ - showSuccess("Button.IconOnly") + showSuccess(qsTr("Button.IconOnly")) } } FluIconButton{ - iconSource:FluentIcons.ChromeCloseContrast - disabled:icon_button_switch.checked + iconSource: FluentIcons.ChromeCloseContrast + disabled: icon_button_switch.checked iconSize: 15 - text:"TextOnly" + text: qsTr("TextOnly") display: Button.TextOnly onClicked:{ - showSuccess("Button.TextOnly") + showSuccess(qsTr("Button.TextOnly")) } } FluIconButton{ - iconSource:FluentIcons.ChromeCloseContrast - disabled:icon_button_switch.checked + iconSource: FluentIcons.ChromeCloseContrast + disabled: icon_button_switch.checked iconSize: 15 - text:"TextBesideIcon" + text: qsTr("TextBesideIcon") display: Button.TextBesideIcon onClicked:{ - showSuccess("Button.TextBesideIcon") + showSuccess(qsTr("Button.TextBesideIcon")) } } FluIconButton{ - iconSource:FluentIcons.ChromeCloseContrast - disabled:icon_button_switch.checked + iconSource: FluentIcons.ChromeCloseContrast + disabled: icon_button_switch.checked iconSize: 15 - text:"TextUnderIcon" + text: qsTr("TextUnderIcon") display: Button.TextUnderIcon onClicked:{ - showSuccess("Button.TextUnderIcon") + showSuccess(qsTr("Button.TextUnderIcon")) } } } FluToggleSwitch{ - id:icon_button_switch + id: icon_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -340,35 +339,35 @@ FluScrollablePage{ paddings: 10 Layout.topMargin: 20 FluDropDownButton{ - disabled:drop_down_button_switch.checked - text:"DropDownButton" + disabled: drop_down_button_switch.checked + text: qsTr("DropDownButton") anchors{ verticalCenter: parent.verticalCenter left: parent.left } FluMenuItem{ - text:"Menu_1" + text: qsTr("Menu_1") } FluMenuItem{ - text:"Menu_2" + text: qsTr("Menu_2") } FluMenuItem{ - text:"Menu_3" + text: qsTr("Menu_3") } FluMenuItem{ - text:"Menu_4" + text: qsTr("Menu_4") onClicked: { } } } FluToggleSwitch{ - id:drop_down_button_switch + id: drop_down_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -404,24 +403,24 @@ FluScrollablePage{ } FluRadioButton{ disabled:radio_button_switch.checked - text:"Radio Button_1" + text: qsTr("Radio Button_1") } FluRadioButton{ disabled:radio_button_switch.checked - text:"Radio Button_2" + text: qsTr("Radio Button_2") } FluRadioButton{ disabled:radio_button_switch.checked - text:"Radio Button_3" + text: qsTr("Radio Button_3") } } FluToggleSwitch{ - id:radio_button_switch + id: radio_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ diff --git a/example/qml-Qt6/page/T_CalendarPicker.qml b/example/qml-Qt6/page/T_CalendarPicker.qml index 379fce16..b2ff3fd8 100644 --- a/example/qml-Qt6/page/T_CalendarPicker.qml +++ b/example/qml-Qt6/page/T_CalendarPicker.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"CalendarPicker" + title: qsTr("CalendarPicker") FluArea{ Layout.fillWidth: true diff --git a/example/qml-Qt6/page/T_Captcha.qml b/example/qml-Qt6/page/T_Captcha.qml index 4f18f9de..20f7275c 100644 --- a/example/qml-Qt6/page/T_Captcha.qml +++ b/example/qml-Qt6/page/T_Captcha.qml @@ -7,10 +7,10 @@ import "../component" FluScrollablePage{ - title:"Captcha" + title: qsTr("Captcha") FluCaptcha{ - id:captcha + id: captcha Layout.topMargin: 20 ignoreCase:switch_case.checked MouseArea{ @@ -23,7 +23,7 @@ FluScrollablePage{ } FluButton{ - text:"Refresh" + text: qsTr("Refresh") Layout.topMargin: 20 onClicked: { captcha.refresh() @@ -31,8 +31,8 @@ FluScrollablePage{ } FluToggleSwitch{ - id:switch_case - text:"Ignore Case" + id: switch_case + text: qsTr("Ignore Case") checked: true Layout.topMargin: 10 } @@ -42,7 +42,7 @@ FluScrollablePage{ Layout.topMargin: 10 FluTextBox{ id:text_box - placeholderText: "请输入验证码" + placeholderText: qsTr("Please enter a verification code") Layout.preferredWidth: 240 } FluButton{ @@ -50,9 +50,9 @@ FluScrollablePage{ onClicked: { var success = captcha.verify(text_box.text) if(success){ - showSuccess("验证码正确") + showSuccess(qsTr("The verification code is correct")) }else{ - showError("错误验证,请重新输入") + showError(qsTr("Error validation, please re-enter")) } } } diff --git a/example/qml-Qt6/page/T_Carousel.qml b/example/qml-Qt6/page/T_Carousel.qml index 1394bcee..401584f8 100644 --- a/example/qml-Qt6/page/T_Carousel.qml +++ b/example/qml-Qt6/page/T_Carousel.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Carousel" + title: qsTr("Carousel") ListModel{ id:data_model @@ -34,7 +34,7 @@ FluScrollablePage{ left:parent.left } FluText{ - text:"轮播图,支持无限轮播,无限滑动,用ListView实现的组件" + text: qsTr("Carousel map, support infinite carousel, infinite swipe, and components implemented with ListView") } Item{ width: 400 diff --git a/example/qml-Qt6/page/T_CheckBox.qml b/example/qml-Qt6/page/T_CheckBox.qml index e8d36f49..602270d4 100644 --- a/example/qml-Qt6/page/T_CheckBox.qml +++ b/example/qml-Qt6/page/T_CheckBox.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"CheckBox" + title: qsTr("CheckBox") FluArea{ Layout.fillWidth: true @@ -16,7 +16,7 @@ FluScrollablePage{ Layout.topMargin: 20 FluText{ - text:"A 2-state CheckBox" + text: qsTr("A 2-state CheckBox") } Row{ @@ -30,11 +30,11 @@ FluScrollablePage{ } FluCheckBox{ disabled: check_box_switch_two.checked - text:"Right" + text: qsTr("Right") } FluCheckBox{ disabled: check_box_switch_two.checked - text:"Left" + text: qsTr("Left") textRight: false } } @@ -44,7 +44,7 @@ FluScrollablePage{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -62,7 +62,7 @@ FluScrollablePage{ Layout.topMargin: 20 FluText{ - text:"A 3-state CheckBox" + text: qsTr("A 3-state CheckBox") } Row{ @@ -73,7 +73,7 @@ FluScrollablePage{ } FluCheckBox{ property int count: 1 - text:"Three State" + text: qsTr("Three State") disabled: check_box_switch_three.checked clickListener: function(){ var flag = count%3 @@ -94,12 +94,12 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:check_box_switch_three + id: check_box_switch_three anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ diff --git a/example/qml-Qt6/page/T_Clip.qml b/example/qml-Qt6/page/T_Clip.qml index 32bef827..37d5f31e 100644 --- a/example/qml-Qt6/page/T_Clip.qml +++ b/example/qml-Qt6/page/T_Clip.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Clip" + title: qsTr("Clip") FluArea{ Layout.fillWidth: true @@ -22,8 +22,7 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"配合图片使用(software渲染下该组件将没有效果)" - font: FluTextStyle.Subtitle + text: qsTr("Use with images (this component will have no effect under software rendering)") Layout.topMargin: 20 } RowLayout{ @@ -31,7 +30,7 @@ FluScrollablePage{ FluClip{ width: 50 height: 50 - radius:[25,0,25,25] + radius: [25,0,25,25] Image { asynchronous: true anchors.fill: parent @@ -42,7 +41,7 @@ FluScrollablePage{ FluClip{ width: 50 height: 50 - radius:[10,10,10,10] + radius: [10,10,10,10] Image { asynchronous: true anchors.fill: parent @@ -53,7 +52,7 @@ FluScrollablePage{ FluClip{ width: 50 height: 50 - radius:[25,25,25,25] + radius: [25,25,25,25] Image { asynchronous: true anchors.fill: parent @@ -64,7 +63,7 @@ FluScrollablePage{ FluClip{ width: 50 height: 50 - radius:[0,25,25,25] + radius: [0,25,25,25] Image { asynchronous: true anchors.fill: parent @@ -76,7 +75,7 @@ FluScrollablePage{ FluClip{ width: 1920/5 height: 1200/5 - radius:[8,8,8,8] + radius: [8,8,8,8] Image { asynchronous: true source: "qrc:/example/res/image/banner_1.jpg" diff --git a/example/qml-Qt6/page/T_ColorPicker.qml b/example/qml-Qt6/page/T_ColorPicker.qml index f9307915..50a1390a 100644 --- a/example/qml-Qt6/page/T_ColorPicker.qml +++ b/example/qml-Qt6/page/T_ColorPicker.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"ColorPicker" + title: qsTr("ColorPicker") FluArea{ Layout.fillWidth: true diff --git a/example/qml-Qt6/page/T_ComboBox.qml b/example/qml-Qt6/page/T_ComboBox.qml index dd8c40b0..6c1783a9 100644 --- a/example/qml-Qt6/page/T_ComboBox.qml +++ b/example/qml-Qt6/page/T_ComboBox.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"ComboBox" + title: qsTr("ComboBox") FluArea{ Layout.fillWidth: true diff --git a/example/qml-Qt6/page/T_DatePicker.qml b/example/qml-Qt6/page/T_DatePicker.qml index 2d06e83f..8d5c4827 100644 --- a/example/qml-Qt6/page/T_DatePicker.qml +++ b/example/qml-Qt6/page/T_DatePicker.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"TimePicker" + title: qsTr("TimePicker") FluArea{ Layout.fillWidth: true @@ -20,10 +20,15 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"showYear=true" + text: qsTr("showYear=true") } FluDatePicker{ current: new Date() + yearText: qsTr("Year") + monthText: qsTr("Month") + dayText: qsTr("Day") + cancelText: qsTr("Cancel") + okText: qsTr("OK") onAccepted: { showSuccess(current.toLocaleDateString()) } @@ -49,10 +54,15 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"showYear=false" + text: qsTr("showYear=false") } FluDatePicker{ - showYear:false + 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-Qt6/page/T_Dialog.qml b/example/qml-Qt6/page/T_Dialog.qml index 17b554b7..a8ba2ed0 100644 --- a/example/qml-Qt6/page/T_Dialog.qml +++ b/example/qml-Qt6/page/T_Dialog.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Dialog" + title: qsTr("Dialog") FluArea{ Layout.fillWidth: true @@ -16,7 +16,7 @@ FluScrollablePage{ Layout.topMargin: 20 FluButton{ anchors.verticalCenter: parent.verticalCenter - text:"Show Double Button Dialog" + text: qsTr("Show Double Button Dialog") onClicked: { double_btn_dialog.open() } @@ -27,16 +27,16 @@ FluScrollablePage{ Layout.topMargin: -1 code:'FluContentDialog{ id:dialog - title:"友情提示" - message:"确定要退出程序么?" - negativeText:"取消" + title: qsTr("Friendly Reminder") + message: qsTr("Are you sure you want to opt out?") + negativeText: qsTr("Cancel") buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton onNegativeClicked:{ - showSuccess("点击取消按钮") + showSuccess(qsTr("Click the Cancel Button")) } - positiveText:"确定" + positiveText: qsTr("OK") onPositiveClicked:{ - showSuccess("点击确定按钮") + showSuccess(qsTr("Click the OK Button")) } } dialog.open()' @@ -44,16 +44,16 @@ FluScrollablePage{ FluContentDialog{ id:double_btn_dialog - title:"友情提示" - message:"确定要退出程序么?" + title: qsTr("Friendly Reminder") + message: qsTr("Are you sure you want to opt out?") buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton - negativeText:"取消" - onNegativeClicked:{ - showSuccess("点击取消按钮") + negativeText: qsTr("Cancel") + onNegativeClicked: { + showSuccess(qsTr("Click the Cancel Button")) } - positiveText:"确定" + positiveText: qsTr("OK") onPositiveClicked:{ - showSuccess("点击确定按钮") + showSuccess(qsTr("Click the OK Button")) } } @@ -74,43 +74,43 @@ FluScrollablePage{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluContentDialog{ - id:dialog - title:"友情提示" - message:"确定要退出程序么?" - negativeText:"取消" + id: dialog + title: qsTr("Friendly Reminder") + message: qsTr("Are you sure you want to opt out?") + negativeText: qsTr("Cancel") buttonFlags: FluContentDialogType.NeutralButton | FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton - negativeText:"取消" - onNegativeClicked:{ - showSuccess("点击取消按钮") + negativeText: qsTr("Cancel") + onNegativeClicked: { + showSuccess(qsTr("Click the Cancel Button")) } - positiveText:"确定" - onPositiveClicked:{ - showSuccess("点击确定按钮") + positiveText: qsTr("OK") + onPositiveClicked: { + showSuccess(qsTr("Click the OK Button")) } - neutralText:"最小化" - onNeutralClicked:{ - showSuccess("点击最小化按钮") + neutralText: qsTr("Minimize") + onNeutralClicked: { + showSuccess(qsTr("Click Minimize")) } } dialog.open()' } FluContentDialog{ - id:triple_btn_dialog - title:"友情提示" - message:"确定要退出程序么?" + id: triple_btn_dialog + title: qsTr("Friendly Reminder") + message: qsTr("Are you sure you want to opt out?") buttonFlags: FluContentDialogType.NeutralButton | FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton - negativeText:"取消" - onNegativeClicked:{ - showSuccess("点击取消按钮") + negativeText: qsTr("Cancel") + onNegativeClicked: { + showSuccess(qsTr("Click the Cancel Button")) } - positiveText:"确定" - onPositiveClicked:{ - showSuccess("点击确定按钮") + positiveText: qsTr("OK") + onPositiveClicked: { + showSuccess(qsTr("Click the OK Button")) } - neutralText:"最小化" - onNeutralClicked:{ - showSuccess("点击最小化按钮") + neutralText: qsTr("Minimize") + onNeutralClicked: { + showSuccess(qsTr("Click Minimize")) } } @@ -122,7 +122,7 @@ FluScrollablePage{ FluButton{ anchors.top: parent.top anchors.topMargin: 5 - text:"Custom Content Dialog" + text: qsTr("Custom Content Dialog") onClicked: { custom_btn_dialog.open() } @@ -130,7 +130,7 @@ FluScrollablePage{ FluButton{ anchors.top: parent.top anchors.topMargin: 48 - text:"Custom Content Dialog2" + text: qsTr("Custom Content Dialog2") onClicked: { custom_btn_dialog2.open() } @@ -140,10 +140,10 @@ FluScrollablePage{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluContentDialog{ - id:dialog - title:"友情提示" - message:"数据正在加载中,请稍等..." - negativeText:"取消加载" + id: dialog + title: qsTr("Friendly Reminder") + message: qsTr("Data is loading, please wait...") + negativeText: qsTr("Unload") contentDelegate: Component{ Item{ width: parent.width @@ -153,22 +153,22 @@ FluScrollablePage{ } } } - onNegativeClicked:{ - showSuccess("点击取消按钮") + onNegativeClicked: { + showSuccess(qsTr("Click the Cancel Button")) } - positiveText:"确定" - onPositiveClicked:{ - showSuccess("点击确定按钮") + positiveText :qsTr("OK") + onPositiveClicked: { + showSuccess(qsTr("Click the OK Button")) } } dialog.open()' } FluContentDialog{ - id:custom_btn_dialog - title:"友情提示" - message:"数据正在加载中,请稍等..." - negativeText:"取消加载" + id: custom_btn_dialog + title: qsTr("Friendly Reminder") + message: qsTr("Data is loading, please wait...") + negativeText: qsTr("Unload") contentDelegate: Component{ Item{ implicitWidth: parent.width @@ -178,18 +178,18 @@ FluScrollablePage{ } } } - onNegativeClicked:{ - showSuccess("点击取消按钮") + onNegativeClicked: { + showSuccess(qsTr("Click the Cancel Button")) } - positiveText:"确定" - onPositiveClickListener:function(){ - showError("测试InfoBar层级在Popup之上") + positiveText: qsTr("OK") + onPositiveClickListener: function(){ + showError(qsTr("Test the InfoBar level on top of the Popup")) } } FluContentDialog{ id:custom_btn_dialog2 - title:"折线图" + title: qsTr("Line Chart") contentDelegate: Component{ Item{ implicitWidth: parent.width @@ -224,9 +224,9 @@ FluScrollablePage{ } } buttonFlags: FluContentDialogType.PositiveButton - positiveText:"确定" - onPositiveClicked:{ - showSuccess("点击确定按钮") + positiveText: qsTr("OK") + onPositiveClicked: { + showSuccess(qsTr("Click the OK Button")) } } } diff --git a/example/qml-Qt6/page/T_Expander.qml b/example/qml-Qt6/page/T_Expander.qml index 5e56272e..c2d7cb9d 100644 --- a/example/qml-Qt6/page/T_Expander.qml +++ b/example/qml-Qt6/page/T_Expander.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Expander" + title: qsTr("Expander") FluArea{ Layout.fillWidth: true @@ -23,7 +23,7 @@ FluScrollablePage{ } FluExpander{ - headerText:"打开一个单选框" + headerText: qsTr("Open a radio box") Layout.topMargin: 20 Item{ anchors.fill: parent @@ -50,7 +50,7 @@ FluScrollablePage{ FluExpander{ Layout.topMargin: 20 - headerText:"打开一个滑动文本框" + headerText: qsTr("Open a sliding text box") Item{ anchors.fill: parent Flickable{ @@ -64,9 +64,16 @@ FluScrollablePage{ FluText{ id:text_info width: scrollview.width - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap padding: 14 - text:"先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。宫中府中,俱为一体;陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。臣不胜受恩感激。今当远离,临表涕零,不知所言。" + text: qsTr("Permit me to observe: the late emperor was taken from us before he could finish his life`s work, the restoration of Han. Today, the empire is still divided in three, and our very survival is threatened. Yet still the officials at court and the soldiers throughout the realm remain loyal to you, your majesty. Because they remember the late emperor, all of them, and they wish to repay his kindness in service to you. This is the moment to extend your divine influence, to honour the memory of the late Emperor and strengthen the morale of your officers. It is not time to listen to bad advice, or close your ears to the suggestions of loyal men. +The court and the administration are as one. Both must be judged by one standard. Those who are loyal and good must get what they deserve, but so must the evil-doers who break the law. This will demonstrate the justice of your rule. There cannot be one law for the court and another for the administration. +Counselors and attendants like Guo Youzhi, Fei Yi, and Dong Yun are all reliable men, loyal of purpose and pure in motive. The late Emperor selected them for office so that they would serve you after his death.These are the men who should be consulted on all palace affairs. Xiang Chong has proved himself a fine general in battle, and the late Emperor believed in him. That is why the assembly has recommended him for overall command. It will keep the troops happy if he is consulted on all military matters. +Xiang Chong has proved himself a fine general in battle, and the late Emperor believed in him. That is why the assembly has recommended him for overall command. It will keep the troops happy if he is consulted on all military matters. +The emperors of the Western Han chose their courtiers wisely, and their dynasty flourished. The emperors of the Eastern Han chose poorly, and they doomed the empire to ruin. Whenever the late Emperor discussed this problem with me, he lamented the failings of Emperors Huan and Ling. Advisors like Guo Youzhi, Fei Yi, Chen Zhen, Zhang Yi, and Jiang Wan – these are all men of great integrity and devotion. I encourage you to trust them, your majesty, if the house of Han is to rise again. +I begin as a common man, farming in my fields in Nanyang, doing what I could to survive in an age of chaos. I never had any interest in making a name for myself as a noble. The late Emperor was not ashamed to visit my cottage and seek my advice. Grateful for his regard, I responded to his appeal and threw myself into his service. Now twenty-one years has passed, the late Emperor always appreciated my caution and, in his final days, entrusted me with his cause. +Since that moment, I have been tormented day and night by the fear that I might let him down. That is why I crossed the Lu river at the height of summer, and entered the wastelands beyond. Now the south has been subdued, and our forces are fully armed.I should lead our soldiers to conquer the northern heartland and attempt to remove the hateful traitors, restore the house of Han, and return it to the former capital.This the way I mean to honor my debt to the late Emperor and fulfill my duty to you. Guo Youzhi, Fei Yi, and Dong Yun are the ones who should be making policy decisions and recommendations. +My only desire is to be permitted to drive out the traitors and restore the Han. If I should let you down, punish my offense and report it to the spirit of the late Emperor. If those three advisors should fail in their duties, then they should be punished for their negligence.Your Majesty, consider your course of action carefully. Seek out good advice, and never forget the late Emperor. I depart now on a long expedition, and I will be forever grateful if you heed my advice. Blinded by my own tears, I know not what I write.") } } } @@ -78,7 +85,7 @@ FluScrollablePage{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluExpander{ - headerText:"打开一个单选框" + headerText: qsTr("Open a radio box") Item{ anchors.fill: parent Flickable{ @@ -90,9 +97,9 @@ FluScrollablePage{ FluText{ id:text_info width: scrollview.width - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap padding: 14 - text:"先帝创业未半而中道崩殂,今天下三分......"" + text: qsTr("Permit me to observe: the late emperor was taken from us before he could finish his life`s work...") } } } diff --git a/example/qml-Qt6/page/T_FlipView.qml b/example/qml-Qt6/page/T_FlipView.qml index 6dde692c..4d75df9e 100644 --- a/example/qml-Qt6/page/T_FlipView.qml +++ b/example/qml-Qt6/page/T_FlipView.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"FlipView" + title: qsTr("FlipView") FluArea{ Layout.fillWidth: true @@ -17,7 +17,7 @@ FluScrollablePage{ ColumnLayout{ anchors.verticalCenter: parent.verticalCenter FluText{ - text:"水平方向的FlipView" + text: qsTr("Horizontal FlipView") } FluFlipView{ Image{ @@ -69,7 +69,7 @@ FluScrollablePage{ ColumnLayout{ anchors.verticalCenter: parent.verticalCenter FluText{ - text:"垂直方向的FlipView" + text: qsTr("Vertical FlipView") } FluFlipView{ vertical:true diff --git a/example/qml-Qt6/page/T_Home.qml b/example/qml-Qt6/page/T_Home.qml index ebe30515..23fa8339 100644 --- a/example/qml-Qt6/page/T_Home.qml +++ b/example/qml-Qt6/page/T_Home.qml @@ -11,12 +11,24 @@ FluScrollablePage{ animDisabled: true ListModel{ - id:model_header + id: model_header ListElement{ - icon:"qrc:/example/res/image/ic_home_github.png" - title:"FluentUI GitHub" - desc:"The latest FluentUI controls and styles for your applications." - url:"https://github.com/zhuzichu520/FluentUI" + icon: "qrc:/example/res/image/ic_home_github.png" + title: qsTr("FluentUI GitHub") + desc: qsTr("The latest FluentUI controls and styles for your applications.") + url: "https://github.com/zhuzichu520/FluentUI" + clicked: function(model){ + Qt.openUrlExternally(model.url) + } + } + ListElement{ + icon: "qrc:/example/res/image/favicon.ico" + title: qsTr("FluentUI Initalizr") + desc: qsTr("FluentUI Initializr is a FluentUI tool that helps you create and customize Fluent UI projects with various options.") + url: "https://github.com/zhuzichu520/FluentUI" + clicked: function(model){ + FluApp.navigate("/fluentInitalizr") + } } } @@ -106,7 +118,7 @@ FluScrollablePage{ Layout.leftMargin: 20 color: FluColors.Grey120 font.pixelSize: 12 - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap } } FluIcon{ @@ -129,7 +141,7 @@ FluScrollablePage{ else scrollbar_header.increase() } onClicked: { - Qt.openUrlExternally(model.url) + model.clicked(model) } } } @@ -202,7 +214,7 @@ FluScrollablePage{ id:item_desc text:desc color:FluColors.Grey120 - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap elide: Text.ElideRight font: FluTextStyle.Caption maximumLineCount: 2 diff --git a/example/qml-Qt6/page/T_Image.qml b/example/qml-Qt6/page/T_Image.qml index 585f94e6..df412204 100644 --- a/example/qml-Qt6/page/T_Image.qml +++ b/example/qml-Qt6/page/T_Image.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Image" + title: qsTr("Image") FluArea{ Layout.fillWidth: true @@ -24,9 +24,10 @@ 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("图片加载失败,请重新加载") + showError(qsTr("The image failed to load, please reload")) } } clickErrorListener: function(){ diff --git a/example/qml-Qt6/page/T_InfoBar.qml b/example/qml-Qt6/page/T_InfoBar.qml index ee9fced0..c5ad2991 100644 --- a/example/qml-Qt6/page/T_InfoBar.qml +++ b/example/qml-Qt6/page/T_InfoBar.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"InfoBar" + title: qsTr("InfoBar") FluArea{ Layout.fillWidth: true @@ -21,39 +21,39 @@ FluScrollablePage{ left: parent.left } FluButton{ - text:"Info" + text: qsTr("Info") onClicked: { - showInfo("这是一个Info样式的InfoBar") + showInfo(qsTr("This is an InfoBar in the Info Style")) } } FluButton{ - text:"Warning" + text: qsTr("Warning") onClicked: { - showWarning("这是一个Warning样式的InfoBar") + showWarning(qsTr("This is an InfoBar in the Warning Style")) } } FluButton{ text:"Error" onClicked: { - showError("这是一个Error样式的InfoBar") + showError(qsTr("This is an InfoBar in the Error Style")) } } FluButton{ text:"Success" onClicked: { - showSuccess("这是一个Success样式的InfoBar") + showSuccess(qsTr("This is an InfoBar in the Success Style")) } } FluButton{ - text:"手动关闭的InfoBar" + text: qsTr("InfoBar that needs to be turned off manually") onClicked: { - showInfo("这是一个Info样式的InfoBar",0,"支持手动关闭") + showInfo("This is an InfoBar in the Info Style",0,"Manual shutdown is supported") } } FluButton{ text:"Loading" onClicked: { - showLoading() + showLoading(qsTr("Loading...")) } } } @@ -61,12 +61,12 @@ FluScrollablePage{ CodeExpander{ Layout.fillWidth: true Layout.topMargin: -1 - code:'showInfo("这是一个Info样式的InfoBar") + code:'showInfo(qsTr("This is an InfoBar in the Info Style")) -showWarning("这是一个Warning样式的InfoBar") +showWarning(qsTr("This is an InfoBar in the Warning Style")) -showError("这是一个Error样式的InfoBar") +showError(qsTr("This is an InfoBar in the Error Style")) -showSuccess("这是一个Success样式的InfoBar这是一个Success样式的InfoBar")' +showSuccess(qsTr("This is an InfoBar in the Success Style"))' } } diff --git a/example/qml-Qt6/page/T_Menu.qml b/example/qml-Qt6/page/T_Menu.qml index 932fdad5..5f6e51da 100644 --- a/example/qml-Qt6/page/T_Menu.qml +++ b/example/qml-Qt6/page/T_Menu.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Menu" + title: qsTr("Menu") FluMenu { id:menu @@ -34,13 +34,13 @@ FluScrollablePage{ text: qsTr("Disable") enabled:false onTriggered: { - showError("Disable") + showError(qsTr("Disable")) } } FluMenuSeparator { } Action { text: qsTr("Check");checkable: true;checked: true} FluMenu{ - title: "Save As..." + title: qsTr("Save As...") Action { text: qsTr("Doc") } Action { text: qsTr("PDF") } } @@ -53,7 +53,7 @@ FluScrollablePage{ paddings: 10 Layout.topMargin: 20 Column{ - id:layout_column + id: layout_column spacing: 15 anchors{ verticalCenter: parent.verticalCenter @@ -61,11 +61,11 @@ FluScrollablePage{ } FluText{ - text:"Menu" + text: qsTr("Menu") } FluButton{ - text:"Show Menu Popup" + text: qsTr("Show Menu Popup") Layout.topMargin: 20 onClicked:{ menu.popup() @@ -112,7 +112,7 @@ menu.popup() } FluText{ - text:"MenuBar" + text: qsTr("MenuBar") } FluMenuBar { @@ -129,7 +129,7 @@ menu.popup() enabled:false } FluMenu{ - title: "Save As..." + title: qsTr("Save As...") Action { text: qsTr("Doc") } Action { text: qsTr("PDF") } } @@ -168,8 +168,4 @@ menu.popup() menu.popup() ' } - - - - } diff --git a/example/qml-Qt6/page/T_MultiWindow.qml b/example/qml-Qt6/page/T_MultiWindow.qml index f7dad060..1f21a789 100644 --- a/example/qml-Qt6/page/T_MultiWindow.qml +++ b/example/qml-Qt6/page/T_MultiWindow.qml @@ -10,7 +10,7 @@ FluScrollablePage{ property string password: "" property var loginPageRegister: registerForWindowResult("/login") - title:"MultiWindow" + title: qsTr("MultiWindow") Connections{ target: loginPageRegister @@ -32,10 +32,10 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"Standard模式窗口,每次都会创建新窗口" + text: qsTr("Standard mode window,a new window is created every time") } FluButton{ - text:"点击创建窗口" + text: qsTr("Create Window") onClicked: { FluApp.navigate("/standardWindow") } @@ -55,11 +55,11 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"SingleTask模式窗口,如果窗口存在,这激活该窗口" + text: qsTr("SingleTask mode window,If a window exists, this activates the window") textFormat: Text.RichText } FluButton{ - text:"点击创建窗口" + text: qsTr("Create Window") onClicked: { FluApp.navigate("/singleTaskWindow") } @@ -79,10 +79,10 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"SingleInstance模式窗口,如果窗口存在,则销毁窗口,然后新建窗口" + text: qsTr("SingleInstance mode window,If the window exists, destroy the window and create a new window") } FluButton{ - text:"点击创建窗口" + text: qsTr("Create Window") onClicked: { FluApp.navigate("/singleInstanceWindow") } @@ -113,10 +113,10 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"页面跳转,不携带任何参数" + text: qsTr("Create the window without carrying any parameters") } FluButton{ - text:"点击跳转" + text: qsTr("Create Window") onClicked: { FluApp.navigate("/about") } @@ -127,7 +127,7 @@ FluScrollablePage{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluButton{ - text:"点击跳转" + text: qsTr("Create Window") onClicked: { FluApp.navigate("/about") } @@ -148,16 +148,16 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"页面跳转,并携带参数用户名:zhuzichu" + text: qsTr("Create a window with the parameter username: zhuzichu") } FluButton{ - text:"点击跳转到登录" + text: qsTr("Create Window") onClicked: { loginPageRegister.launch({username:"zhuzichu"}) } } FluText{ - text:"登录窗口返回过来的密码->"+password + text:qsTr("Login Window Returned Password - >")+password } } } @@ -175,7 +175,7 @@ Connections{ } FluButton{ - text:"点击跳转" + text: qsTr("Create Window") onClicked: { loginPageRegister.launch({username:"zhuzichu"}) } diff --git a/example/qml-Qt6/page/T_Network.qml b/example/qml-Qt6/page/T_Network.qml index 793b033f..3c7049bb 100644 --- a/example/qml-Qt6/page/T_Network.qml +++ b/example/qml-Qt6/page/T_Network.qml @@ -552,7 +552,7 @@ FluContentPage{ FluText{ id:text_info width: scrollview.width - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap padding: 14 } } diff --git a/example/qml-Qt6/page/T_Pagination.qml b/example/qml-Qt6/page/T_Pagination.qml index 37d82119..d0bd3fe7 100644 --- a/example/qml-Qt6/page/T_Pagination.qml +++ b/example/qml-Qt6/page/T_Pagination.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Pagination" + title: qsTr("Pagination") FluArea{ Layout.fillWidth: true @@ -21,16 +21,22 @@ 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_Pivot.qml b/example/qml-Qt6/page/T_Pivot.qml index f1ae6055..b52a4928 100644 --- a/example/qml-Qt6/page/T_Pivot.qml +++ b/example/qml-Qt6/page/T_Pivot.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Pivot" + title: qsTr("Pivot") FluArea{ Layout.fillWidth: true @@ -15,31 +15,34 @@ FluScrollablePage{ height: 400 paddings: 10 + + FluPivot{ anchors.fill: parent currentIndex: 2 + FluPivotItem{ - title:"All" + title: qsTr("All") contentItem:FluText{ - text:"All emails go here." + text: qsTr("All emails go here.") } } FluPivotItem{ - title:"Unread" - contentItem:FluText{ - text:"Unread emails go here." + title: qsTr("Unread") + contentItem: FluText{ + text: qsTr("Unread emails go here.") } } FluPivotItem{ - title:"Flagged" - contentItem:FluText{ - text:"Flagged emails go here." + title: qsTr("Flagged") + contentItem: FluText{ + text: qsTr("Flagged emails go here.") } } FluPivotItem{ - title:"Urgent" - contentItem:FluText{ - text:"Urgent emails go here." + title: qsTr("Urgent") + contentItem: FluText{ + text: qsTr("Urgent emails go here.") } } } @@ -50,27 +53,27 @@ FluScrollablePage{ code:'FluPivot{ anchors.fill: parent FluPivotItem:{ - text:"All" + text: qsTr("All") contentItem: FluText{ - text:"All emails go here." + text: qsTr("All emails go here.") } } FluPivotItem:{ - text:"Unread" + text: qsTr("Unread") contentItem: FluText{ - text:"Unread emails go here." + text: qsTr("Unread emails go here.") } } FluPivotItem:{ - text:"Flagged" + text: qsTr("Flagged") contentItem: FluText{ - text:"Flagged emails go here." + text: qsTr("Flagged emails go here.") } } FluPivotItem:{ - text:"Urgent" + text: qsTr("Urgent") contentItem: FluText{ - text:"Urgent emails go here." + text: qsTr("Urgent emails go here.") } } } diff --git a/example/qml-Qt6/page/T_Progress.qml b/example/qml-Qt6/page/T_Progress.qml index 30c1aa9c..ecbfb488 100644 --- a/example/qml-Qt6/page/T_Progress.qml +++ b/example/qml-Qt6/page/T_Progress.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Progress" + title: qsTr("Progress") FluArea{ Layout.fillWidth: true diff --git a/example/qml-Qt6/page/T_QRCode.qml b/example/qml-Qt6/page/T_QRCode.qml index d613155b..9ed3ced0 100644 --- a/example/qml-Qt6/page/T_QRCode.qml +++ b/example/qml-Qt6/page/T_QRCode.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"QRCode" + title: qsTr("QRCode") FluQRCode{ id:qrcode diff --git a/example/qml-Qt6/page/T_RadioButton.qml b/example/qml-Qt6/page/T_RadioButton.qml index f53ed8ed..eae17351 100644 --- a/example/qml-Qt6/page/T_RadioButton.qml +++ b/example/qml-Qt6/page/T_RadioButton.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"RadioButton" + title: qsTr("RadioButton") FluArea{ Layout.fillWidth: true @@ -22,21 +22,21 @@ FluScrollablePage{ } FluRadioButton{ disabled: radio_button_switch.checked - text:"Right" + text: qsTr("Right") } FluRadioButton{ disabled: radio_button_switch.checked - text:"Left" + text: qsTr("Left") textRight: false } } FluToggleSwitch{ - id:radio_button_switch + id: radio_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -61,24 +61,24 @@ FluScrollablePage{ } FluRadioButton{ disabled: radio_button_switch2.checked - text:"Radio Button_1" + text: qsTr("Radio Button_1") } FluRadioButton{ disabled: radio_button_switch2.checked - text:"Radio Button_2" + text: qsTr("Radio Button_2") } FluRadioButton{ disabled: radio_button_switch2.checked - text:"Radio Button_3" + text: qsTr("Radio Button_3") } } FluToggleSwitch{ - id:radio_button_switch2 + id: radio_button_switch2 anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ diff --git a/example/qml-Qt6/page/T_RatingControl.qml b/example/qml-Qt6/page/T_RatingControl.qml index cf102581..3a20e844 100644 --- a/example/qml-Qt6/page/T_RatingControl.qml +++ b/example/qml-Qt6/page/T_RatingControl.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage { - title: "RatingControl" + title: qsTr("RatingControl") FluArea { Layout.fillWidth: true diff --git a/example/qml-Qt6/page/T_Rectangle.qml b/example/qml-Qt6/page/T_Rectangle.qml index cec07bb6..9426e66f 100644 --- a/example/qml-Qt6/page/T_Rectangle.qml +++ b/example/qml-Qt6/page/T_Rectangle.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Rectangle" + title: qsTr("Rectangle") FluArea{ Layout.fillWidth: true diff --git a/example/qml-Qt6/page/T_Settings.qml b/example/qml-Qt6/page/T_Settings.qml index c4444686..c9f9e8a9 100644 --- a/example/qml-Qt6/page/T_Settings.qml +++ b/example/qml-Qt6/page/T_Settings.qml @@ -9,7 +9,7 @@ import "../viewmodel" FluScrollablePage{ - title:"Settings" + title: qsTr("Settings") SettingsViewModel{ id:viewmodel_settings @@ -40,13 +40,13 @@ FluScrollablePage{ spacing: 20 anchors.verticalCenter: parent.verticalCenter FluText{ - text:"当前版本 v%1".arg(AppInfo.version) + text: "%1 v%2".arg(qsTr("Current Version")).arg(AppInfo.version) font: FluTextStyle.Body anchors.verticalCenter: parent.verticalCenter } FluLoadingButton{ - id:btn_checkupdate - text:"检查更新" + id: btn_checkupdate + text: qsTr("Check for Updates") anchors.verticalCenter: parent.verticalCenter onClicked: { loading = true @@ -62,7 +62,7 @@ FluScrollablePage{ height: 50 paddings: 10 FluCheckBox{ - text:"Use System AppBar" + text: qsTr("Use System AppBar") checked: FluApp.useSystemAppBar anchors.verticalCenter: parent.verticalCenter onClicked: { @@ -78,7 +78,7 @@ FluScrollablePage{ height: 50 paddings: 10 FluCheckBox{ - text:"fitsAppBarWindows" + text:qsTr("Fits AppBar Windows") checked: window.fitsAppBarWindows anchors.verticalCenter: parent.verticalCenter onClicked: { @@ -88,13 +88,13 @@ FluScrollablePage{ } FluContentDialog{ - id:dialog_restart - title:"友情提示" - message:"此操作需要重启才能生效,是否重新启动?" + id: dialog_restart + title: qsTr("Friendly Reminder") + message: qsTr("This action requires a restart of the program to take effect, is it restarted?") buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton - negativeText: "取消" - positiveText:"确定" - onPositiveClicked:{ + negativeText: qsTr("Cancel") + positiveText: qsTr("OK") + onPositiveClicked: { FluApp.exit(931) } } @@ -112,13 +112,13 @@ FluScrollablePage{ left: parent.left } FluText{ - text:Lang.dark_mode + text: qsTr("Dark Mode") font: FluTextStyle.BodyStrong Layout.bottomMargin: 4 } Repeater{ - model: [{title:"System",mode:FluThemeType.System},{title:"Light",mode:FluThemeType.Light},{title:"Dark",mode:FluThemeType.Dark}] - delegate: FluRadioButton{ + model: [{title:qsTr("System"),mode:FluThemeType.System},{title:qsTr("Light"),mode:FluThemeType.Light},{title:qsTr("Dark"),mode:FluThemeType.Dark}] + delegate: FluRadioButton{ checked : FluTheme.darkMode === modelData.mode text:modelData.title clickListener:function(){ @@ -142,12 +142,12 @@ FluScrollablePage{ left: parent.left } FluText{ - text:Lang.navigation_view_display_mode + text:qsTr("Navigation View Display Mode") font: FluTextStyle.BodyStrong Layout.bottomMargin: 4 } Repeater{ - model: [{title:"Open",mode:FluNavigationViewType.Open},{title:"Compact",mode:FluNavigationViewType.Compact},{title:"Minimal",mode:FluNavigationViewType.Minimal},{title:"Auto",mode:FluNavigationViewType.Auto}] + model: [{title:qsTr("Open"),mode:FluNavigationViewType.Open},{title:qsTr("Compact"),mode:FluNavigationViewType.Compact},{title:qsTr("Minimal"),mode:FluNavigationViewType.Minimal},{title:qsTr("Auto"),mode:FluNavigationViewType.Auto}] delegate: FluRadioButton{ checked : viewmodel_settings.displayMode===modelData.mode text:modelData.title @@ -159,6 +159,16 @@ FluScrollablePage{ } } + ListModel{ + id:model_language + ListElement{ + name:"en" + } + ListElement{ + name:"zh" + } + } + FluArea{ Layout.fillWidth: true Layout.topMargin: 20 @@ -171,22 +181,21 @@ FluScrollablePage{ top: parent.top left: parent.left } - FluText{ - text:Lang.locale + text:qsTr("Language") font: FluTextStyle.BodyStrong Layout.bottomMargin: 4 } - Flow{ spacing: 5 Repeater{ - model: Lang.__localeList + model: TranslateHelper.languages delegate: FluRadioButton{ - checked: Lang.__locale === modelData + checked: TranslateHelper.current === modelData text:modelData clickListener:function(){ - Lang.__locale = modelData + TranslateHelper.current = modelData + dialog_restart.open() } } } diff --git a/example/qml-Qt6/page/T_ShortcutPicker.qml b/example/qml-Qt6/page/T_ShortcutPicker.qml index aaa7575d..b2f51448 100644 --- a/example/qml-Qt6/page/T_ShortcutPicker.qml +++ b/example/qml-Qt6/page/T_ShortcutPicker.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"ShortcutPicker" + title: qsTr("ShortcutPicker") FluArea{ Layout.fillWidth: true diff --git a/example/qml-Qt6/page/T_Slider.qml b/example/qml-Qt6/page/T_Slider.qml index 4df5bab9..2a46b2c7 100644 --- a/example/qml-Qt6/page/T_Slider.qml +++ b/example/qml-Qt6/page/T_Slider.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Slider" + title: qsTr("Slider") FluArea{ Layout.fillWidth: true diff --git a/example/qml-Qt6/page/T_SplitLayout.qml b/example/qml-Qt6/page/T_SplitLayout.qml index 5fdd60cb..303d6181 100644 --- a/example/qml-Qt6/page/T_SplitLayout.qml +++ b/example/qml-Qt6/page/T_SplitLayout.qml @@ -7,7 +7,7 @@ import "../component" FluContentPage{ - title:"SplitLayout" + title: qsTr("SplitLayout") RowLayout{ id:layout_dropdown diff --git a/example/qml-Qt6/page/T_StaggeredLayout.qml b/example/qml-Qt6/page/T_StaggeredLayout.qml index a719d726..4594f9c6 100644 --- a/example/qml-Qt6/page/T_StaggeredLayout.qml +++ b/example/qml-Qt6/page/T_StaggeredLayout.qml @@ -7,7 +7,7 @@ import "../component" FluContentPage{ - title:"StaggeredLayout" + title: qsTr("StaggeredLayout") property var colors : [FluColors.Yellow,FluColors.Orange,FluColors.Red,FluColors.Magenta,FluColors.Purple,FluColors.Blue,FluColors.Teal,FluColors.Green] diff --git a/example/qml-Qt6/page/T_StatusLayout.qml b/example/qml-Qt6/page/T_StatusLayout.qml index 1b400711..a2742461 100644 --- a/example/qml-Qt6/page/T_StatusLayout.qml +++ b/example/qml-Qt6/page/T_StatusLayout.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"StatusLayout" + title: qsTr("StatusLayout") FluArea{ id:layout_actions @@ -61,8 +61,12 @@ FluScrollablePage{ FluStatusLayout{ id:status_view anchors.fill: parent + loadingText: qsTr("Loading...") + emptyText: qsTr("Empty") + errorText: qsTr("The page went wrong...") + errorButtonText: qsTr("Reload") onErrorClicked:{ - showError("点击重新加载") + showError("Click Reload") } Rectangle { anchors.fill: parent diff --git a/example/qml-Qt6/page/T_TabView.qml b/example/qml-Qt6/page/T_TabView.qml index ead55372..76bed115 100644 --- a/example/qml-Qt6/page/T_TabView.qml +++ b/example/qml-Qt6/page/T_TabView.qml @@ -9,7 +9,7 @@ FluScrollablePage{ property var colors : [FluColors.Yellow,FluColors.Orange,FluColors.Red,FluColors.Magenta,FluColors.Purple,FluColors.Blue,FluColors.Teal,FluColors.Green] - title:"TabView" + title: qsTr("TabView") Component{ id:com_page @@ -20,7 +20,7 @@ FluScrollablePage{ } function newTab(){ - tab_view.appendTab("qrc:/example/res/image/favicon.ico","Document "+tab_view.count(),com_page,colors[Math.floor(Math.random() * 8)]) + tab_view.appendTab("qrc:/example/res/image/favicon.ico",qsTr("Document ")+tab_view.count(),com_page,colors[Math.floor(Math.random() * 8)]) } Component.onCompleted: { diff --git a/example/qml-Qt6/page/T_TableView.qml b/example/qml-Qt6/page/T_TableView.qml index 9203a83d..271e2d85 100644 --- a/example/qml-Qt6/page/T_TableView.qml +++ b/example/qml-Qt6/page/T_TableView.qml @@ -8,7 +8,7 @@ import "../component" FluContentPage{ id:root - title:"TableView" + title: qsTr("TableView") signal checkBoxChanged property var dataSource : [] @@ -70,8 +70,8 @@ FluContentPage{ id:custom_update_dialog property var text property var onAccpetListener - title:"修改列名" - negativeText:"取消" + title: qsTr("Modify the column name") + negativeText: qsTr("Cancel") contentDelegate: Component{ Item{ implicitWidth: parent.width @@ -89,7 +89,7 @@ FluContentPage{ } } } - positiveText:"确定" + positiveText: qsTr("OK") onPositiveClicked:{ if(custom_update_dialog.onAccpetListener){ custom_update_dialog.onAccpetListener(custom_update_dialog.text) @@ -131,7 +131,7 @@ FluContentPage{ } FluButton{ - text:"搜索" + text: qsTr("Search") anchors{ bottom: parent.bottom right: parent.right @@ -174,7 +174,7 @@ FluContentPage{ id:com_column_filter_name Item{ FluText{ - text:"姓名" + text: qsTr("Name") anchors.centerIn: parent } FluIconButton{ @@ -208,14 +208,14 @@ FluContentPage{ RowLayout{ anchors.centerIn: parent FluButton{ - text:"删除" + text: qsTr("Delete") onClicked: { table_view.closeEditor() table_view.removeRow(row) } } FluFilledButton{ - text:"编辑" + text: qsTr("Edit") onClicked: { var obj = table_view.getRow(row) obj.name = "12345" @@ -234,7 +234,7 @@ FluContentPage{ RowLayout{ anchors.centerIn: parent FluText{ - text:"全选" + text: qsTr("Select All") Layout.alignment: Qt.AlignVCenter } FluCheckBox{ @@ -334,7 +334,7 @@ FluContentPage{ id:com_column_sort_age Item{ FluText{ - text:"年龄" + text: qsTr("Age") anchors.centerIn: parent } ColumnLayout{ @@ -409,14 +409,14 @@ FluContentPage{ } FluButton{ - text:"清空" + text: qsTr("Clear All") onClicked: { table_view.dataSource = [] } } FluButton{ - text:"删除选中" + text:"Delete Selection" onClicked: { var data = [] var rows = [] @@ -440,7 +440,7 @@ FluContentPage{ } FluButton{ - text:"添加一行数据" + text:"Add a row of Data" onClicked: { table_view.appendRow(genTestObject()) } @@ -465,17 +465,17 @@ FluContentPage{ { title: table_view.customItem(com_column_checbox,{checked:true}), dataIndex: 'checkbox', - width:80, - minimumWidth:80, - maximumWidth:80 + width:100, + minimumWidth:100, + maximumWidth:100 }, { - title: table_view.customItem(com_column_update_title,{title:'头像'}), + title: table_view.customItem(com_column_update_title,{title:qsTr("Avatar")}), dataIndex: 'avatar', width:100 }, { - title: table_view.customItem(com_column_filter_name,{title:'姓名'}), + title: table_view.customItem(com_column_filter_name,{title:qsTr("Name")}), dataIndex: 'name', readOnly:true }, @@ -488,28 +488,28 @@ FluContentPage{ maximumWidth:100 }, { - title: '住址', + title: qsTr("Address"), dataIndex: 'address', width:200, minimumWidth:100, maximumWidth:250 }, { - title: '别名', + title: qsTr("Nickname"), dataIndex: 'nickname', width:100, minimumWidth:80, maximumWidth:200 }, { - title: '长字符串', + title: qsTr("Long String"), dataIndex: 'longstring', width:200, minimumWidth:100, maximumWidth:300 }, { - title: '操作', + title: qsTr("Options"), dataIndex: 'action', width:160, minimumWidth:160, @@ -528,6 +528,8 @@ FluContentPage{ itemCount: 100000 pageButtonCount: 7 __itemPerPage: 1000 + previousText: qsTr("") onRequestPage: (page,count)=> { table_view.closeEditor() diff --git a/example/qml-Qt6/page/T_Text.qml b/example/qml-Qt6/page/T_Text.qml index a2306069..b88c59f0 100644 --- a/example/qml-Qt6/page/T_Text.qml +++ b/example/qml-Qt6/page/T_Text.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Text" + title: qsTr("Text") FluArea{ Layout.fillWidth: true @@ -16,7 +16,7 @@ FluScrollablePage{ paddings: 10 FluCopyableText{ - text: "这是一个可以支持复制的Text" + text: qsTr("This is a text that can be copied") anchors.verticalCenter: parent.verticalCenter } @@ -25,7 +25,7 @@ FluScrollablePage{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluCopyableText{ - text:"这是一个可以支持复制的Text" + text: qsTr("This is a text that can be copied") }' } diff --git a/example/qml-Qt6/page/T_TextBox.qml b/example/qml-Qt6/page/T_TextBox.qml index 37b85c01..ccee5d34 100644 --- a/example/qml-Qt6/page/T_TextBox.qml +++ b/example/qml-Qt6/page/T_TextBox.qml @@ -7,16 +7,13 @@ import "../component" import "../viewmodel" FluScrollablePage{ - title:"TextBox" + + title: qsTr("TextBox") TextBoxViewModel{ id:viewModel } - Component.onDestruction: { - console.debug("T_TextBox页面销毁了") - } - FluArea{ Layout.fillWidth: true height: 68 @@ -24,10 +21,10 @@ FluScrollablePage{ Layout.topMargin: 20 FluTextBox{ - placeholderText: "单行输入框" - disabled:text_box_switch.checked + placeholderText: qsTr("Single-line Input Box") + disabled: text_box_switch.checked cleanEnabled: true - text:viewModel.text1 + text: viewModel.text1 onTextChanged: { viewModel.text1 = text } @@ -38,19 +35,19 @@ FluScrollablePage{ } FluToggleSwitch{ - id:text_box_switch + id: text_box_switch anchors{ verticalCenter: parent.verticalCenter right: parent.right } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluTextBox{ - placeholderText:"单行输入框" + placeholderText: qsTr("Single-line Input Box") }' } @@ -61,7 +58,7 @@ FluScrollablePage{ Layout.topMargin: 20 FluPasswordBox{ - placeholderText: "请输入密码" + placeholderText: qsTr("Please enter your password") disabled:password_box_switch.checked anchors{ verticalCenter: parent.verticalCenter @@ -74,14 +71,14 @@ FluScrollablePage{ verticalCenter: parent.verticalCenter right: parent.right } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluPasswordBox{ - placeholderText:"请输入密码" + placeholderText: qsTr("Please enter your password") }' } @@ -93,13 +90,13 @@ FluScrollablePage{ Layout.topMargin: 20 FluMultilineTextBox{ - id:multiine_textbox - placeholderText: "多行输入框" + id: multiine_textbox + placeholderText: qsTr("Multi-line Input Box") text:viewModel.text2 onTextChanged: { viewModel.text2 = text } - disabled:text_box_multi_switch.checked + disabled: text_box_multi_switch.checked anchors{ verticalCenter: parent.verticalCenter left: parent.left @@ -112,14 +109,14 @@ FluScrollablePage{ verticalCenter: parent.verticalCenter right: parent.right } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluMultilineTextBox{ - placeholderText:"多行输入框" + placeholderText: qsTr("Multi-line Input Box") }' } @@ -129,9 +126,9 @@ FluScrollablePage{ paddings: 10 Layout.topMargin: 20 FluAutoSuggestBox{ - placeholderText: "AutoSuggestBox" - items:generateRandomNames(100) - disabled:text_box_suggest_switch.checked + placeholderText: qsTr("AutoSuggestBox") + items: generateRandomNames(100) + disabled: text_box_suggest_switch.checked anchors{ verticalCenter: parent.verticalCenter left: parent.left @@ -143,14 +140,14 @@ FluScrollablePage{ verticalCenter: parent.verticalCenter right: parent.right } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluAutoSuggestBox{ - placeholderText:"AutoSuggestBox" + placeholderText: qsTr("AutoSuggestBox") }' } @@ -167,12 +164,12 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:spin_box_switch + id: spin_box_switch anchors{ verticalCenter: parent.verticalCenter right: parent.right } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ diff --git a/example/qml-Qt6/page/T_Theme.qml b/example/qml-Qt6/page/T_Theme.qml index 5846ea4f..78380bd8 100644 --- a/example/qml-Qt6/page/T_Theme.qml +++ b/example/qml-Qt6/page/T_Theme.qml @@ -8,8 +8,8 @@ import "../component" FluScrollablePage{ property var colorData: [FluColors.Yellow,FluColors.Orange,FluColors.Red,FluColors.Magenta,FluColors.Purple,FluColors.Blue,FluColors.Teal,FluColors.Green] - id:root - title:"Theme" + id: root + title: qsTr("Theme") FluArea{ Layout.fillWidth: true @@ -23,7 +23,7 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"主题颜色" + text: qsTr("Theme colors") Layout.topMargin: 10 } RowLayout{ @@ -58,7 +58,7 @@ FluScrollablePage{ Layout.topMargin: 10 spacing: 10 FluText{ - text:"自定义主题颜色" + text: qsTr("Customize the Theme Color") anchors.verticalCenter: parent.verticalCenter } FluColorPicker{ @@ -84,7 +84,7 @@ FluScrollablePage{ } } FluText{ - text:"夜间模式" + text: qsTr("Dark Mode") Layout.topMargin: 20 } FluToggleSwitch{ @@ -99,7 +99,7 @@ FluScrollablePage{ } } FluText{ - text:"native文本渲染" + text: qsTr("Native Text") Layout.topMargin: 20 } FluToggleSwitch{ @@ -110,7 +110,7 @@ FluScrollablePage{ } } FluText{ - text:"开启动画效果" + text: qsTr("Open Animation") Layout.topMargin: 20 } FluToggleSwitch{ diff --git a/example/qml-Qt6/page/T_TimePicker.qml b/example/qml-Qt6/page/T_TimePicker.qml index 7c79b481..a144d963 100644 --- a/example/qml-Qt6/page/T_TimePicker.qml +++ b/example/qml-Qt6/page/T_TimePicker.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"TimePicker" + title: qsTr("TimePicker") launchMode: FluPageType.SingleInstance FluArea{ Layout.fillWidth: true @@ -23,11 +23,17 @@ FluScrollablePage{ } FluText{ - text:"hourFormat=FluTimePickerType.H" + text: qsTr("hourFormat=FluTimePickerType.H") } FluTimePicker{ current: new Date() + amText: qsTr("AM") + pmText: qsTr("PM") + hourText: qsTr("Hour") + minuteText: qsTr("Minute") + cancelText: qsTr("Cancel") + okText: qsTr("OK") onAccepted: { showSuccess(current.toLocaleTimeString(Qt.locale("de_DE"))) } @@ -57,11 +63,17 @@ FluScrollablePage{ } FluText{ - text:"hourFormat=FluTimePickerType.HH" + text: qsTr("hourFormat=FluTimePickerType.HH") } FluTimePicker{ hourFormat:FluTimePickerType.HH + amText: qsTr("AM") + pmText: qsTr("PM") + hourText: qsTr("Hour") + minuteText: qsTr("Minute") + cancelText: qsTr("Cancel") + okText: qsTr("OK") onAccepted: { showSuccess(current.toLocaleTimeString(Qt.locale("de_DE"))) } diff --git a/example/qml-Qt6/page/T_Timeline.qml b/example/qml-Qt6/page/T_Timeline.qml index 0f578561..1a127916 100644 --- a/example/qml-Qt6/page/T_Timeline.qml +++ b/example/qml-Qt6/page/T_Timeline.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Timeline" + title: qsTr("Timeline") Component{ id:com_dot @@ -23,7 +23,7 @@ FluScrollablePage{ Component{ id:com_lable FluText{ - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap font.bold: true horizontalAlignment: isRight ? Qt.AlignRight : Qt.AlignLeft text: modelData.lable @@ -41,7 +41,7 @@ FluScrollablePage{ Component{ id:com_text FluText{ - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap horizontalAlignment: isRight ? Qt.AlignRight : Qt.AlignLeft text: modelData.text font.bold: true @@ -108,18 +108,18 @@ FluScrollablePage{ spacing: 20 Layout.topMargin: 20 FluTextBox{ - id:text_box - text:"Technical testing 2015-09-01" + id: text_box + text: "Technical testing 2015-09-01" Layout.preferredWidth: 240 } FluFilledButton{ - text:"Append" + text: qsTr("Append") onClicked: { list_model.append({text:text_box.text}) } } FluFilledButton{ - text:"clear" + text: qsTr("clear") onClicked: { list_model.clear() } @@ -132,25 +132,25 @@ FluScrollablePage{ text:"mode:" } FluDropDownButton{ - id:btn_mode + id: btn_mode Layout.preferredWidth: 100 - text:"Alternate" + text: "Alternate" FluMenuItem{ - text:"Left" + text: "Left" onClicked: { btn_mode.text = text time_line.mode = FluTimelineType.Left } } FluMenuItem{ - text:"Right" + text: "Right" onClicked: { btn_mode.text = text time_line.mode = FluTimelineType.Right } } FluMenuItem{ - text:"Alternate" + text: "Alternate" onClicked: { btn_mode.text = text time_line.mode = FluTimelineType.Alternate @@ -160,12 +160,12 @@ FluScrollablePage{ } FluTimeline{ - id:time_line + id: time_line Layout.fillWidth: true Layout.topMargin: 20 Layout.bottomMargin: 20 mode: FluTimelineType.Alternate - model:list_model + model: list_model } } diff --git a/example/qml-Qt6/page/T_ToggleSwitch.qml b/example/qml-Qt6/page/T_ToggleSwitch.qml index 5eac656b..9220ff9f 100644 --- a/example/qml-Qt6/page/T_ToggleSwitch.qml +++ b/example/qml-Qt6/page/T_ToggleSwitch.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"ToggleSwitch" + title: qsTr("ToggleSwitch") FluArea{ Layout.fillWidth: true @@ -22,21 +22,21 @@ FluScrollablePage{ } FluToggleSwitch{ disabled: toggle_switch.checked - text:"Right" + text: qsTr("Right") } FluToggleSwitch{ disabled: toggle_switch.checked - text:"Left" + text: qsTr("Left") textRight: false } } FluToggleSwitch{ - id:toggle_switch + id: toggle_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ diff --git a/example/qml-Qt6/page/T_Tooltip.qml b/example/qml-Qt6/page/T_Tooltip.qml index 97315197..4d1b8ed8 100644 --- a/example/qml-Qt6/page/T_Tooltip.qml +++ b/example/qml-Qt6/page/T_Tooltip.qml @@ -7,11 +7,11 @@ import "../component" FluScrollablePage{ - title:"Tooltip" + title: qsTr("Tooltip") FluText{ Layout.topMargin: 20 - text:"鼠标悬停不动,弹出Tooltip" + text: qsTr("Hover over Tultip and it pops up") } FluArea{ @@ -27,14 +27,14 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"FluIconButton的text属性自带Tooltip效果" + text: qsTr("Text properties of FluIconButton support the Tooltip pop-up window by default") } FluIconButton{ iconSource:FluentIcons.ChromeCloseContrast iconSize: 15 - text:"删除" + text: qsTr("Delete") onClicked:{ - showSuccess("点击IconButton") + showSuccess(qsTr("Click IconButton")) } } } @@ -45,9 +45,9 @@ FluScrollablePage{ code:'FluIconButton{ iconSource:FluentIcons.ChromeCloseContrast iconSize: 15 - text:"删除" + text: qsTr("Delete") onClicked:{ - showSuccess("点击IconButton") + showSuccess(qsTr("Click IconButton")) } } ' @@ -66,13 +66,13 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"给一个Button添加Tooltip效果" + text: qsTr("Add a Tooltip pop-up to a Button") } FluButton{ id:button_1 - text:"删除" + text: qsTr("Delete") onClicked:{ - showSuccess("点击一个Button") + showSuccess(qsTr("Click Button")) } FluTooltip{ visible: button_1.hovered @@ -86,15 +86,15 @@ FluScrollablePage{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluButton{ - id:button_1 - text:"删除" + id: button_1 + text: qsTr("Delete") FluTooltip{ visible: button_1.hovered text:button_1.text delay: 1000 } onClicked:{ - showSuccess("点击一个Button") + showSuccess(qsTr("Click Button")) } }' } diff --git a/example/qml-Qt6/page/T_Tour.qml b/example/qml-Qt6/page/T_Tour.qml index d0492733..157607e1 100644 --- a/example/qml-Qt6/page/T_Tour.qml +++ b/example/qml-Qt6/page/T_Tour.qml @@ -11,10 +11,13 @@ FluScrollablePage{ FluTour{ id:tour + finishText: qsTr("Finish") + nextText: qsTr("Next") + previousText: qsTr("Previous") steps:[ - {title:"Upload File",description: "Put your files here.",target:()=>btn_upload}, - {title:"Save",description: "Save your changes.",target:()=>btn_save}, - {title:"Other Actions",description: "Click to see other actions.",target:()=>btn_more} + {title:qsTr("Upload File"),description: qsTr("Put your files here."),target:()=>btn_upload}, + {title:qsTr("Save"),description: qsTr("Save your changes."),target:()=>btn_save}, + {title:qsTr("Other Actions"),description: qsTr("Click to see other actions."),target:()=>btn_more} ] } @@ -29,7 +32,7 @@ FluScrollablePage{ top: parent.top topMargin: 14 } - text:"Begin Tour" + text: qsTr("Begin Tour") onClicked: { tour.open() } @@ -42,24 +45,24 @@ FluScrollablePage{ topMargin: 60 } FluButton{ - id:btn_upload - text:"Upload" + id: btn_upload + text: qsTr("Upload") onClicked: { - showInfo("Upload") + showInfo(qsTr("Upload")) } } FluFilledButton{ - id:btn_save - text:"Save" + id: btn_save + text: qsTr("Save") onClicked: { - showInfo("Save") + showInfo(qsTr("Save")) } } FluIconButton{ - id:btn_more + id: btn_more iconSource: FluentIcons.More onClicked: { - showInfo("More") + showInfo(qsTr("More")) } } } diff --git a/example/qml-Qt6/page/T_TreeView.qml b/example/qml-Qt6/page/T_TreeView.qml index a094dbf5..02e09ac8 100644 --- a/example/qml-Qt6/page/T_TreeView.qml +++ b/example/qml-Qt6/page/T_TreeView.qml @@ -7,7 +7,7 @@ import "../component" FluContentPage { - title:"TreeView" + title: qsTr("TreeView") function treeData(){ const dig = (path = '0', level = 4) => { @@ -29,7 +29,7 @@ FluContentPage { } Column{ - id:layout_column + id: layout_column spacing: 12 width: 300 anchors{ @@ -42,21 +42,21 @@ FluContentPage { } FluText{ - text:"共计%1条数据,当前显示的%2条数据".arg(tree_view.count()).arg(tree_view.visibleCount()) + text: qsTr("Total %1 data, %2 data currently displayed").arg(tree_view.count()).arg(tree_view.visibleCount()) } FluText{ - text:"共计选中%1条数据".arg(tree_view.selectionModel().length) + text: qsTr("A total of %1 data items are selected").arg(tree_view.selectionModel().length) } RowLayout{ spacing: 10 FluText{ - text:"cellHeight:" + text: "cellHeight:" Layout.alignment: Qt.AlignVCenter } FluSlider{ - id:slider_cell_height + id: slider_cell_height value: 30 from: 30 to:100 @@ -65,39 +65,39 @@ FluContentPage { RowLayout{ spacing: 10 FluText{ - text:"depthPadding:" + text: "depthPadding:" Layout.alignment: Qt.AlignVCenter } FluSlider{ - id:slider_depth_padding + id: slider_depth_padding value: 30 from: 30 to:100 } } FluToggleSwitch{ - id:switch_showline + id: switch_showline text:"showLine" checked: false } FluToggleSwitch{ - id:switch_draggable + id: switch_draggable text:"draggable" checked: false } FluToggleSwitch{ - id:switch_checkable + id: switch_checkable text:"checkable" checked: false } FluButton{ - text:"all expand" + text: "all expand" onClicked: { tree_view.allExpand() } } FluButton{ - text:"all collapse" + text: "all collapse" onClicked: { tree_view.allCollapse() } diff --git a/example/qml-Qt6/page/T_Typography.qml b/example/qml-Qt6/page/T_Typography.qml index 61f3cf43..7d3fd445 100644 --- a/example/qml-Qt6/page/T_Typography.qml +++ b/example/qml-Qt6/page/T_Typography.qml @@ -7,7 +7,7 @@ FluContentPage { property real textScale: 1 - title: "Typography" + title: qsTr("Typography") rightPadding: 10 FluArea{ diff --git a/example/qml-Qt6/page/T_Watermark.qml b/example/qml-Qt6/page/T_Watermark.qml index d40b4503..a383b4a7 100644 --- a/example/qml-Qt6/page/T_Watermark.qml +++ b/example/qml-Qt6/page/T_Watermark.qml @@ -7,7 +7,7 @@ import "../component" FluContentPage{ - title:"Watermark" + title: qsTr("Watermark") FluArea{ anchors.fill: parent @@ -23,12 +23,12 @@ FluContentPage{ spacing: 10 Layout.topMargin: 14 FluText{ - text:"text:" + text: "text:" Layout.alignment: Qt.AlignVCenter } FluTextBox{ - id:text_box - text:"会磨刀的小猪" + id: text_box + text: "会磨刀的小猪" Layout.preferredWidth: 240 } } @@ -36,11 +36,11 @@ FluContentPage{ RowLayout{ spacing: 10 FluText{ - text:"textSize:" + text: "textSize:" Layout.alignment: Qt.AlignVCenter } FluSlider{ - id:slider_text_size + id: slider_text_size value: 20 from: 13 to:50 @@ -49,7 +49,7 @@ FluContentPage{ RowLayout{ spacing: 10 FluText{ - text:"gapX:" + text: "gapX:" Layout.alignment: Qt.AlignVCenter } FluSlider{ @@ -60,18 +60,18 @@ FluContentPage{ RowLayout{ spacing: 10 FluText{ - text:"gapY:" + text: "gapY:" Layout.alignment: Qt.AlignVCenter } FluSlider{ - id:slider_gap_y + id: slider_gap_y value: 100 } } RowLayout{ spacing: 10 FluText{ - text:"offsetX:" + text: "offsetX:" Layout.alignment: Qt.AlignVCenter } FluSlider{ @@ -82,22 +82,22 @@ FluContentPage{ RowLayout{ spacing: 10 FluText{ - text:"offsetY:" + text: "offsetY:" Layout.alignment: Qt.AlignVCenter } FluSlider{ - id:slider_offset_y + id: slider_offset_y value: 50 } } RowLayout{ spacing: 10 FluText{ - text:"rotate:" + text: "rotate:" Layout.alignment: Qt.AlignVCenter } FluSlider{ - id:slider_rotate + id: slider_rotate value: 22 from: 0 to:360 @@ -106,18 +106,18 @@ FluContentPage{ RowLayout{ spacing: 10 FluText{ - text:"textColor:" + text: "textColor:" Layout.alignment: Qt.AlignVCenter } FluColorPicker{ - id:color_picker + id: color_picker current: Qt.rgba(0,0,0,0.1) } } } FluWatermark{ - id:water_mark + id: water_mark anchors.fill: parent text:text_box.text textColor: color_picker.current diff --git a/example/qml-Qt6/window/CrashWindow.qml b/example/qml-Qt6/window/CrashWindow.qml index d9f7a431..6abf7396 100644 --- a/example/qml-Qt6/window/CrashWindow.qml +++ b/example/qml-Qt6/window/CrashWindow.qml @@ -8,7 +8,7 @@ import "../component" FluWindow { id:window - title:"友情提示" + title: qsTr("Friendly Reminder") width: 300 height: 400 fixSize: true @@ -37,11 +37,15 @@ FluWindow { FluText{ id:text_info anchors{ - horizontalCenter: parent.horizontalCenter top: parent.top topMargin: 240 + left: parent.left + right: parent.right + leftMargin: 10 + rightMargin: 10 } - text:"发生意外错误\n给您带来的不便,我们深表歉意" + wrapMode: Text.WordWrap + text: qsTr("We apologize for the inconvenience caused by an unexpected error") horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } @@ -53,7 +57,7 @@ FluWindow { bottomMargin: 20 } FluButton{ - text:"日志上报" + text: qsTr("Report Logs") onClicked: { FluTools.showFileInFolder(crashFilePath) } @@ -63,7 +67,7 @@ FluWindow { height: 1 } FluFilledButton{ - text:"重启程序" + text: qsTr("Restart Program") onClicked: { FluApp.exit(931) } diff --git a/example/qml-Qt6/window/FluentInitalizrWindow.qml b/example/qml-Qt6/window/FluentInitalizrWindow.qml new file mode 100644 index 00000000..3dee14df --- /dev/null +++ b/example/qml-Qt6/window/FluentInitalizrWindow.qml @@ -0,0 +1,115 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import FluentUI +import Qt.labs.platform +import "../component" + +FluWindow { + + id:window + title:"FluentUI Initalizr" + width: 600 + height: 400 + fixSize: true + modality: Qt.ApplicationModal + launchMode: FluWindowType.SingleTask + showStayTop: false + + Connections{ + target: InitalizrHelper + function onError(message){ + showError(message) + } + function onSuccess(){ + showSuccess("创建成功") + } + } + + FluText{ + id:text_title + text:"FluentUI脚手架" + font: FluTextStyle.Title + anchors{ + left: parent.left + top: parent.top + leftMargin: 20 + topMargin: 20 + } + } + + Column{ + spacing: 14 + anchors{ + left: parent.left + top: text_title.bottom + leftMargin: 20 + topMargin: 20 + } + FluTextBox{ + id:text_box_name + width: 180 + placeholderText: "名称" + focus: true + } + Row{ + spacing: 8 + FluTextBox{ + id:text_box_path + width: 300 + placeholderText: "创建路径" + anchors.verticalCenter: parent.verticalCenter + Component.onCompleted: { + text = FluTools.toLocalPath(StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0]) + } + } + FluButton{ + text:"浏览" + anchors.verticalCenter: parent.verticalCenter + onClicked: { + folder_dialog.open() + } + } + } + } + + FolderDialog{ + id:folder_dialog + folder: StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0] + onAccepted: { + text_box_path.text = FluTools.toLocalPath(currentFolder) + } + } + + Rectangle{ + id:layout_actions + width: parent.width + height: 60 + anchors.bottom: parent.bottom + color: FluTheme.backgroundColor + Row{ + height: parent.height + spacing: 20 + anchors{ + right: parent.right + rightMargin: 20 + } + FluButton{ + text:"取消" + width: 120 + anchors.verticalCenter: parent.verticalCenter + onClicked: { + window.close() + } + } + FluFilledButton{ + text:"创建" + width: 120 + anchors.verticalCenter: parent.verticalCenter + onClicked: { + InitalizrHelper.generate(text_box_name.text,text_box_path.text) + } + } + } + } +} diff --git a/example/qml-Qt6/window/HotloadWindow.qml b/example/qml-Qt6/window/HotloadWindow.qml index 5b1a0f2d..acf75bd4 100644 --- a/example/qml-Qt6/window/HotloadWindow.qml +++ b/example/qml-Qt6/window/HotloadWindow.qml @@ -8,7 +8,7 @@ import "../component" FluWindow { id:window - title:"热加载" + title: qsTr("Hot Loader") width: 800 height: 600 minimumWidth: 520 @@ -32,7 +32,7 @@ FluWindow { text:loader.itemLodaer().sourceComponent.errorString() color:"red" anchors.fill: parent - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap padding: 20 verticalAlignment: Qt.AlignVCenter horizontalAlignment: Qt.AlignHCenter @@ -40,7 +40,7 @@ FluWindow { } } FluText{ - text:"拖入qml文件" + text: qsTr("Drag in a qml file") font.pixelSize: 26 anchors.centerIn: parent visible: !loader.itemLodaer().item && loader.statusMode === FluStatusLayoutType.Success diff --git a/example/qml-Qt6/window/LoginWindow.qml b/example/qml-Qt6/window/LoginWindow.qml index 7c3bd788..23f95972 100644 --- a/example/qml-Qt6/window/LoginWindow.qml +++ b/example/qml-Qt6/window/LoginWindow.qml @@ -6,8 +6,8 @@ import "../component" FluWindow { - id:window - title:"登录" + id: window + title: qsTr("Login") width: 400 height: 400 fixSize: true @@ -26,38 +26,34 @@ FluWindow { } FluAutoSuggestBox{ - id:textbox_uesrname + id: textbox_uesrname items:[{title:"Admin"},{title:"User"}] - placeholderText: "请输入账号" + placeholderText: qsTr("Please enter the account") Layout.preferredWidth: 260 Layout.alignment: Qt.AlignHCenter } FluTextBox{ - id:textbox_password + id: textbox_password Layout.topMargin: 20 Layout.preferredWidth: 260 - placeholderText: "请输入密码" + placeholderText: qsTr("Please enter your password") echoMode:TextInput.Password Layout.alignment: Qt.AlignHCenter } FluFilledButton{ - text:"登录" + text: qsTr("Login") Layout.alignment: Qt.AlignHCenter Layout.topMargin: 20 onClicked:{ if(textbox_password.text === ""){ - showError("请随便输入一个密码") + showError(qsTr("Please feel free to enter a password")) return } onResult({password:textbox_password.text}) window.close() } } - } - - - } diff --git a/example/qml-Qt6/window/MainWindow.qml b/example/qml-Qt6/window/MainWindow.qml index 0b30f0c9..c7bc0f4a 100644 --- a/example/qml-Qt6/window/MainWindow.qml +++ b/example/qml-Qt6/window/MainWindow.qml @@ -21,7 +21,7 @@ FluWindow { fitsAppBarWindows: true appBar: FluAppBar { height: 30 - darkText: Lang.dark_mode + darkText: qsTr("Dark Mode") showDark: true darkClickListener:(button)=>handleDarkChanged(button) closeClickListener: ()=>{dialog_close.open()} @@ -85,7 +85,7 @@ FluWindow { } Timer{ - id:timer_window_hide_delay + id: timer_window_hide_delay interval: 150 onTriggered: { window.hide() @@ -93,29 +93,29 @@ FluWindow { } FluContentDialog{ - id:dialog_close - title:"退出" - message:"确定要退出程序吗?" - negativeText:"最小化" + id: dialog_close + title: qsTr("Quit") + message: qsTr("Are you sure you want to exit the program?") + negativeText: qsTr("Minimize") buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.NeutralButton | FluContentDialogType.PositiveButton onNegativeClicked: { - system_tray.showMessage("友情提示","FluentUI已隐藏至托盘,点击托盘可再次激活窗口"); + system_tray.showMessage(qsTr("Friendly Reminder"),qsTr("FluentUI is hidden from the tray, click on the tray to activate the window again")); timer_window_hide_delay.restart() } - positiveText:"退出" - neutralText:"取消" + positiveText: qsTr("Quit") + neutralText: qsTr("Cancel") onPositiveClicked:{ FluApp.exit(0) } } Component{ - id:nav_item_right_menu + id: nav_item_right_menu FluMenu{ - id:menu + id: menu width: 130 FluMenuItem{ - text: "在独立窗口打开" + text: qsTr("Open in Separate Window") visible: true onClicked: { FluApp.navigate("/pageWindow",{title:modelData.title,url:modelData.url}) @@ -212,7 +212,7 @@ FluWindow { title:"FluentUI" onLogoClicked:{ clickCount += 1 - showSuccess("点击%1次".arg(clickCount)) + showSuccess("%1:%2".arg(qsTr("Click Time")).arg(clickCount)) if(clickCount === 5){ loader.reload() flipable.flipped = true @@ -222,7 +222,7 @@ FluWindow { autoSuggestBox:FluAutoSuggestBox{ iconSource: FluentIcons.Search items: ItemsOriginal.getSearchData() - placeholderText: Lang.search + placeholderText: qsTr("Search") onItemClicked: (data)=>{ ItemsOriginal.startPageByItem(data) @@ -312,13 +312,16 @@ FluWindow { } FluTour{ - id:tour + id: tour + finishText: qsTr("Finish") + nextText: qsTr("Next") + previousText: qsTr("Previous") steps:{ var data = [] if(!window.useSystemAppBar){ - data.push({title:"夜间模式",description: "这里可以切换夜间模式.",target:()=>appBar.buttonDark}) + data.push({title:qsTr("Dark Mode"),description: qsTr("Here you can switch to night mode."),target:()=>appBar.buttonDark}) } - data.push({title:"隐藏彩蛋",description: "多点几下试试!!",target:()=>nav_view.imageLogo}) + data.push({title:qsTr("Hide Easter eggs"),description: qsTr("Try a few more clicks!!"),target:()=>nav_view.imageLogo}) return data } } @@ -328,7 +331,7 @@ FluWindow { } FluText{ - text:"fps %1".arg(fps_item.fps) + text: "fps %1".arg(fps_item.fps) opacity: 0.3 anchors{ bottom: parent.bottom @@ -341,12 +344,12 @@ FluWindow { FluContentDialog{ property string newVerson property string body - id:dialog_update - title:"升级提示" - message:"FluentUI目前最新版本 "+ newVerson +" -- 当前应用版本 "+AppInfo.version+" \n现在是否去下载新版本?\n\n更新内容:\n"+body + id: dialog_update + title: qsTr("Upgrade Tips") + message:qsTr("FluentUI is currently up to date ")+ newVerson +qsTr(" -- The current app version") +AppInfo.version+qsTr(" \nNow go and download the new version?\n\nUpdated content: \n")+body buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton - negativeText: "取消" - positiveText:"确定" + negativeText: qsTr("Cancel") + positiveText: qsTr("OK") onPositiveClicked:{ Qt.openUrlExternally("https://github.com/zhuzichu520/FluentUI/releases/latest") } @@ -373,14 +376,14 @@ FluWindow { dialog_update.open() }else{ if(!silent){ - showInfo("当前版本已经是最新版") + showInfo(qsTr("The current version is already the latest")) } } } onError: (status,errorString)=>{ if(!silent){ - showError("网络异常!") + showError(qsTr("The network is abnormal")) } console.debug(status+";"+errorString) } diff --git a/example/qml-Qt6/window/SingleInstanceWindow.qml b/example/qml-Qt6/window/SingleInstanceWindow.qml index d397ef99..5e7e47a9 100644 --- a/example/qml-Qt6/window/SingleInstanceWindow.qml +++ b/example/qml-Qt6/window/SingleInstanceWindow.qml @@ -2,13 +2,12 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts import FluentUI - import "../component" FluWindow { - id:window - title:"SingleInstance" + id: window + title: qsTr("SingleInstance") width: 500 height: 600 fixSize: true @@ -23,7 +22,7 @@ FluWindow { } FluText{ - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap anchors{ left: parent.left right: parent.right @@ -31,6 +30,6 @@ FluWindow { rightMargin: 20 verticalCenter: parent.verticalCenter } - text:"我是一个SingleInstance模式的窗口,如果我存在,我会销毁之前的窗口,并创建一个新窗口" + text: qsTr("I'm a SingleInstance window, and if I exist, I'll destroy the previous window and create a new one") } } diff --git a/example/qml-Qt6/window/SingleTaskWindow.qml b/example/qml-Qt6/window/SingleTaskWindow.qml index d53d1371..a43cc042 100644 --- a/example/qml-Qt6/window/SingleTaskWindow.qml +++ b/example/qml-Qt6/window/SingleTaskWindow.qml @@ -6,8 +6,8 @@ import "../component" FluWindow { - id:window - title:"SingleTask" + id: window + title: qsTr("SingleTask") width: 500 height: 600 fixSize: true @@ -15,7 +15,7 @@ FluWindow { FluText{ anchors.centerIn: parent - text:"我是一个SingleTask模式的窗口,如果我存在,我就激活窗口" + text: qsTr("I'm a SingleTask mode window, and if I exist, I activate the window") } } diff --git a/example/qml-Qt6/window/StandardWindow.qml b/example/qml-Qt6/window/StandardWindow.qml index 34ca7b1a..13e60a8a 100644 --- a/example/qml-Qt6/window/StandardWindow.qml +++ b/example/qml-Qt6/window/StandardWindow.qml @@ -37,7 +37,7 @@ FluWindow { FluText{ anchors.centerIn: parent - text:"我是一个Standard模式的窗口,每次我都会创建一个新的窗口" + text: qsTr("I'm a Standard mode window, and every time I create a new window") } } diff --git a/example/qml/App.qml b/example/qml/App.qml index a8739444..8b282184 100644 --- a/example/qml/App.qml +++ b/example/qml/App.qml @@ -21,6 +21,13 @@ Item { } } + Connections{ + target: TranslateHelper + function onCurrentChanged(){ + SettingsHelper.saveLanguage(TranslateHelper.current) + } + } + Component.onCompleted: { FluNetwork.openLog = false FluNetwork.setInterceptor(function(param){ @@ -37,6 +44,7 @@ Item { "/login":"qrc:/example/qml/window/LoginWindow.qml", "/hotload":"qrc:/example/qml/window/HotloadWindow.qml", "/crash":"qrc:/example/qml/window/CrashWindow.qml", + "/fluentInitalizr":"qrc:/example/qml/window/FluentInitalizrWindow.qml", "/singleTaskWindow":"qrc:/example/qml/window/SingleTaskWindow.qml", "/standardWindow":"qrc:/example/qml/window/StandardWindow.qml", "/singleInstanceWindow":"qrc:/example/qml/window/SingleInstanceWindow.qml", diff --git a/example/qml/component/CodeExpander.qml b/example/qml/component/CodeExpander.qml index 81fc1b45..24003a9f 100644 --- a/example/qml/component/CodeExpander.qml +++ b/example/qml/component/CodeExpander.qml @@ -8,7 +8,7 @@ FluExpander{ id:control property string code: "" - headerText: "Source" + headerText: qsTr("Source") contentHeight:content.height focus: false @@ -34,7 +34,7 @@ FluExpander{ } onClicked:{ FluTools.clipText(FluTools.html2PlantText(content.text)) - showSuccess("复制成功") + showSuccess(qsTr("The Copy is Successful")) } } @@ -49,7 +49,6 @@ FluExpander{ } function highlightQmlCode(code) { - // 定义 QML 关键字列表 var qmlKeywords = [ "FluTextButton", "FluAppBar", diff --git a/example/qml/global/ItemsFooter.qml b/example/qml/global/ItemsFooter.qml index 046e1be8..7b510e5f 100644 --- a/example/qml/global/ItemsFooter.qml +++ b/example/qml/global/ItemsFooter.qml @@ -13,7 +13,7 @@ FluObject{ FluPaneItemSeparator{} FluPaneItem{ - title:Lang.about + title:qsTr("About") icon:FluentIcons.Contact onTapListener:function(){ FluApp.navigate("/about") @@ -21,7 +21,7 @@ FluObject{ } FluPaneItem{ - title:Lang.settings + title:qsTr("Settings") menuDelegate: paneItemMenu icon:FluentIcons.Settings url:"qrc:/example/qml/page/T_Settings.qml" diff --git a/example/qml/global/ItemsOriginal.qml b/example/qml/global/ItemsOriginal.qml index 2dc61230..25f6fb2a 100644 --- a/example/qml/global/ItemsOriginal.qml +++ b/example/qml/global/ItemsOriginal.qml @@ -17,14 +17,14 @@ FluObject{ FluPaneItem{ id:item_home count: 9 - title:Lang.home + title: qsTr("Home") menuDelegate: paneItemMenu - infoBadge:FluBadge{ + infoBadge: FluBadge{ count: item_home.count } - icon:FluentIcons.Home - url:"qrc:/example/qml/page/T_Home.qml" - onTap:{ + icon: FluentIcons.Home + url: "qrc:/example/qml/page/T_Home.qml" + onTap: { if(navigationView.getCurrentUrl()){ item_home.count = 0 } @@ -33,376 +33,376 @@ FluObject{ } FluPaneItemExpander{ - title:"PaneItemExpander Disabled" + title: qsTr("PaneItemExpander Disabled") iconVisible: false disabled: true } FluPaneItemExpander{ - id:item_expander_basic_input - title:Lang.basic_input - icon:FluentIcons.CheckboxComposite + id: item_expander_basic_input + title: qsTr("Basic Input") + icon: FluentIcons.CheckboxComposite FluPaneItem{ - id:item_buttons + id: item_buttons count: 99 - infoBadge:FluBadge{ + infoBadge: FluBadge{ count: item_buttons.count } - title:"Buttons" + title: qsTr("Buttons") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/Button.png",recentlyUpdated:true,desc:"A control that responds to user input and raisesa Click event."}) - url:"qrc:/example/qml/page/T_Buttons.qml" - onTap:{ + extra: ({image:"qrc:/example/res/image/control/Button.png",recentlyUpdated:true,desc:qsTr("A control that responds to user input and raisesa Click event.")}) + url: "qrc:/example/qml/page/T_Buttons.qml" + onTap: { item_buttons.count = 0 navigationView.push(url) } } FluPaneItem{ - id:item_text - title:"Text" + id: item_text + title: qsTr("Text") menuDelegate: paneItemMenu count: 5 - infoBadge:FluBadge{ + infoBadge: FluBadge{ count: item_text.count color: Qt.rgba(82/255,196/255,26/255,1) } - url:"qrc:/example/qml/page/T_Text.qml" - onTap:{ + url: "qrc:/example/qml/page/T_Text.qml" + onTap: { item_text.count = 0 navigationView.push(url) } } FluPaneItem{ - title:"Image" + title: qsTr("Image") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Image.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Image.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Slider" + title: qsTr("Slider") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/Slider.png",recentlyUpdated:true,desc:"A control that lets the user select from a rangeof values by moving a Thumb control along atrack."}) - url:"qrc:/example/qml/page/T_Slider.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/Slider.png",recentlyUpdated:true,desc:qsTr("A control that lets the user select from a rangeof values by moving a Thumb control along atrack.")}) + url: "qrc:/example/qml/page/T_Slider.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"CheckBox" + title: qsTr("CheckBox") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/Checkbox.png",recentlyUpdated:true,desc:"A control that a user can select or clear."}) - url:"qrc:/example/qml/page/T_CheckBox.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/Checkbox.png",recentlyUpdated:true,desc:qsTr("A control that a user can select or clear.")}) + url: "qrc:/example/qml/page/T_CheckBox.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"RadioButton" + title: qsTr("RadioButton") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_RadioButton.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_RadioButton.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"ToggleSwitch" + title: qsTr("ToggleSwitch") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_ToggleSwitch.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_ToggleSwitch.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"PaneItem Disabled" + title: qsTr("PaneItem Disabled") disabled: true icon: FluentIcons.Error } } FluPaneItemExpander{ - title:Lang.form - icon:FluentIcons.GridView - FluPaneItem{ - title:"TextBox" + title: qsTr("Form") + icon: FluentIcons.GridView + FluPaneItem { + title: qsTr("TextBox") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_TextBox.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_TextBox.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"TimePicker" + title: qsTr("TimePicker") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_TimePicker.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_TimePicker.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"DatePicker" + title: qsTr("DatePicker") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_DatePicker.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_DatePicker.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"CalendarPicker" + title: qsTr("CalendarPicker") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_CalendarPicker.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_CalendarPicker.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"ColorPicker" + title: qsTr("ColorPicker") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_ColorPicker.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_ColorPicker.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"ShortcutPicker" + title: qsTr("ShortcutPicker") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_ShortcutPicker.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_ShortcutPicker.qml" + onTap: { navigationView.push(url) } } } FluPaneItemExpander{ - title:Lang.surface - icon:FluentIcons.SurfaceHub + title: qsTr("Surface") + icon: FluentIcons.SurfaceHub FluPaneItem{ - title:"InfoBar" + title: qsTr("InfoBar") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/InfoBar.png",recentlyUpdated:true,desc:"An inline message to display app-wide statuschange information."}) - url:"qrc:/example/qml/page/T_InfoBar.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/InfoBar.png",recentlyUpdated:true,desc:qsTr("An inline message to display app-wide statuschange information.")}) + url: "qrc:/example/qml/page/T_InfoBar.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Progress" + title: qsTr("Progress") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Progress.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Progress.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"RatingControl" + title: qsTr("RatingControl") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_RatingControl.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_RatingControl.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Badge" + title: qsTr("Badge") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Badge.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Badge.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Rectangle" + title: qsTr("Rectangle") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Rectangle.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Rectangle.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Clip" + title: qsTr("Clip") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Clip.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Clip.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Carousel" + title: qsTr("Carousel") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Carousel.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Carousel.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Expander" + title: qsTr("Expander") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Expander.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Expander.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Watermark" + title: qsTr("Watermark") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Watermark.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Watermark.qml" + onTap: { navigationView.push(url) } } } FluPaneItemExpander{ - title:Lang.layout - icon:FluentIcons.DockLeft - FluPaneItem{ - title:"StaggeredLayout" + title: qsTr("Layout") + icon: FluentIcons.DockLeft + FluPaneItem { + title: qsTr("StaggeredLayout") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_StaggeredLayout.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_StaggeredLayout.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"SplitLayout" + title: qsTr("SplitLayout") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_SplitLayout.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_SplitLayout.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"StatusLayout" + title: qsTr("StatusLayout") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_StatusLayout.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_StatusLayout.qml" + onTap: { navigationView.push(url) } } } FluPaneItemExpander{ - title:Lang.popus - icon:FluentIcons.ButtonMenu + title: qsTr("Popus") + icon: FluentIcons.ButtonMenu FluPaneItem{ - title:"Dialog" + title: qsTr("Dialog") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Dialog.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Dialog.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - id:item_combobox - title:"ComboBox" + id: item_combobox + title: qsTr("ComboBox") menuDelegate: paneItemMenu count: 9 infoBadge:FluBadge{ count: item_combobox.count color: Qt.rgba(250/255,173/255,20/255,1) } - url:"qrc:/example/qml/page/T_ComboBox.qml" - onTap:{ + url: "qrc:/example/qml/page/T_ComboBox.qml" + onTap: { item_combobox.count = 0 navigationView.push("qrc:/example/qml/page/T_ComboBox.qml") } } FluPaneItem{ - title:"Tooltip" + title: qsTr("Tooltip") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Tooltip.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Tooltip.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Menu" + title: qsTr("Menu") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Menu.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Menu.qml" + onTap: { navigationView.push(url) } } } FluPaneItemExpander{ - title:Lang.navigation - icon:FluentIcons.AllApps + title: qsTr("Navigation") + icon: FluentIcons.AllApps FluPaneItem{ - title:"Pivot" + title: qsTr("Pivot") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/Pivot.png",order:3,recentlyAdded:true,desc:"Presents information from different sources in atabbed view."}) - url:"qrc:/example/qml/page/T_Pivot.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/Pivot.png",order:3,recentlyAdded:true,desc:qsTr("Presents information from different sources in a tabbed view.")}) + url: "qrc:/example/qml/page/T_Pivot.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"BreadcrumbBar" + title: qsTr("BreadcrumbBar") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_BreadcrumbBar.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_BreadcrumbBar.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"TabView" + title: qsTr("TabView") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/TabView.png",order:1,recentlyAdded:true,desc:"A control that displays a collection of tabs thatcan be used to display several documents."}) - url:"qrc:/example/qml/page/T_TabView.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/TabView.png",order:1,recentlyAdded:true,desc:qsTr("A control that displays a collection of tabs thatcan be used to display several documents.")}) + url: "qrc:/example/qml/page/T_TabView.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"TreeView" + title: qsTr("TreeView") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_TreeView.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_TreeView.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"TableView" + title: qsTr("TableView") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/DataGrid.png",order:4,recentlyAdded:true,desc:"The TableView control provides a flexible way to display a collection of data in rows and columns"}) - url:"qrc:/example/qml/page/T_TableView.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/DataGrid.png",order:4,recentlyAdded:true,desc:qsTr("The TableView control provides a flexible way to display a collection of data in rows and columns")}) + url: "qrc:/example/qml/page/T_TableView.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Pagination" + title: qsTr("Pagination") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Pagination.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Pagination.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"MultiWindow" + title: qsTr("MultiWindow") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_MultiWindow.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_MultiWindow.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"FlipView" + title: qsTr("FlipView") menuDelegate: paneItemMenu - extra:({image:"qrc:/example/res/image/control/FlipView.png",order:2,recentlyAdded:true,desc:"Presents a collection of items that the user canflip through, one item at a time."}) - url:"qrc:/example/qml/page/T_FlipView.qml" - onTap:{ navigationView.push(url) } + extra: ({image:"qrc:/example/res/image/control/FlipView.png",order:2,recentlyAdded:true,desc:qsTr("Presents a collection of items that the user canflip through, one item at a time.")}) + url: "qrc:/example/qml/page/T_FlipView.qml" + onTap: { navigationView.push(url) } } } FluPaneItemExpander{ - title:Lang.theming + title: qsTr("Theming") icon:FluentIcons.Brightness FluPaneItem{ - title:"Acrylic" + title: qsTr("Acrylic") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Acrylic.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Acrylic.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Theme" + title: qsTr("Theme") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Theme.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Theme.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Typography" + title: qsTr("Typography") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Typography.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Typography.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Awesome" + title: qsTr("Awesome") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Awesome.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Awesome.qml" + onTap: { navigationView.push(url) } } } FluPaneItemExpander{ - title: Lang.chart - icon:FluentIcons.AreaChart + title: qsTr("Chart") + icon: FluentIcons.AreaChart FluPaneItem{ - title:Lang.bar_chart + title: qsTr("Bar Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_BarChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_BarChart.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:Lang.line_chart + title: qsTr("Line Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_LineChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_LineChart.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:Lang.pie_chart + title: qsTr("Pie Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_PieChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_PieChart.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:Lang.polar_area_chart + title: qsTr("Polar Area Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_PolarAreaChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_PolarAreaChart.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:Lang.bubble_chart + title: qsTr("Bubble Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_BubbleChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_BubbleChart.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:Lang.scatter_chart + title: qsTr("Scatter Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_ScatterChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_ScatterChart.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:Lang.radar_chart + title: qsTr("Radar Chart") menuDelegate: paneItemMenu - url:"qrc:/example/qml/chart/T_RadarChart.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/chart/T_RadarChart.qml" + onTap: { navigationView.push(url) } } } @@ -412,67 +412,67 @@ FluObject{ } FluPaneItemExpander{ - title:Lang.other - icon:FluentIcons.Shop + title: qsTr("Other") + icon: FluentIcons.Shop FluPaneItem{ - title:"QRCode" + title: qsTr("QRCode") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_QRCode.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_QRCode.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Tour" + title: qsTr("Tour") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Tour.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Tour.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Timeline" + title: qsTr("Timeline") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Timeline.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Timeline.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Captcha" + title: qsTr("Captcha") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Captcha.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Captcha.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Network" + title: qsTr("Network") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_Network.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_Network.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - id:item_other - title:"RemoteLoader" + id: item_other + title: qsTr("Remote Loader") menuDelegate: paneItemMenu count: 99 infoBadge:FluBadge{ count: item_other.count color: Qt.rgba(82/255,196/255,26/255,1) } - url:"qrc:/example/qml/page/T_RemoteLoader.qml" - onTap:{ + url: "qrc:/example/qml/page/T_RemoteLoader.qml" + onTap: { item_other.count = 0 navigationView.push("qrc:/example/qml/page/T_RemoteLoader.qml") } } FluPaneItem{ - title:"HotLoader" - onTapListener:function(){ + title: qsTr("Hot Loader") + onTapListener: function(){ FluApp.navigate("/hotload") } } FluPaneItem{ - title:"3D" + title: qsTr("3D") menuDelegate: paneItemMenu - url:"qrc:/example/qml/page/T_3D.qml" - onTap:{ navigationView.push(url) } + url: "qrc:/example/qml/page/T_3D.qml" + onTap: { navigationView.push(url) } } FluPaneItem{ - title:"Test Crash" + title: qsTr("Test Crash") visible: FluTools.isWin() onTapListener: function(){ AppInfo.testCrash() diff --git a/example/qml/global/Lang.qml b/example/qml/global/Lang.qml deleted file mode 100644 index 8db9cfc4..00000000 --- a/example/qml/global/Lang.qml +++ /dev/null @@ -1,104 +0,0 @@ -pragma Singleton - -import QtQuick 2.15 - -QtObject { - - property string home - property string basic_input - property string form - property string surface - property string layout - property string popus - property string navigation - property string theming - property string media - property string dark_mode - property string sys_dark_mode - property string search - property string about - property string settings - property string locale - property string navigation_view_display_mode - property string other - property string chart - property string bar_chart - property string line_chart - property string pie_chart - property string polar_area_chart - property string bubble_chart - property string scatter_chart - property string radar_chart - - function zh(){ - home="首页" - basic_input="基本输入" - form="表单" - surface="表面" - layout="布局" - popus="弹窗" - navigation="导航" - theming="主题" - media="媒体" - dark_mode="夜间模式" - sys_dark_mode="跟随系统" - search="查找" - about="关于" - settings="设置" - locale="语言环境" - navigation_view_display_mode="导航视图显示模式" - other="其他" - chart="表格" - bar_chart="条形图" - line_chart="折线图" - pie_chart="饼图" - polar_area_chart="极坐标区域图" - bubble_chart="气泡图" - scatter_chart="散点图" - radar_chart="雷达图" - } - - function en(){ - home="Home" - basic_input="Basic Input" - form="Form" - surface="Surfaces" - layout="Layout" - popus="Popus" - navigation="Navigation" - theming="Theming" - media="Media" - dark_mode="Dark Mode" - sys_dark_mode="Sync with system" - search="Search" - about="About" - settings="Settings" - locale="Locale" - navigation_view_display_mode="NavigationView Display Mode" - other="Other" - chart="Chart" - bar_chart="Bar Chart" - line_chart="Line Chart" - pie_chart="Pie Chart" - polar_area_chart="Polar Area Chart" - bubble_chart="Bubble Chart" - scatter_chart="Scatter Chart" - radar_chart="Radar Chart" - } - - property string __locale - property var __localeList: ["Zh","En"] - - on__LocaleChanged: { - if(__locale === "Zh"){ - zh() - }else{ - en() - } - } - - Component.onCompleted: { - __locale = "En" - } - -} diff --git a/example/qml/global/qmldir b/example/qml/global/qmldir index cc5287d7..eb6bfeaf 100644 --- a/example/qml/global/qmldir +++ b/example/qml/global/qmldir @@ -1,3 +1,2 @@ singleton ItemsOriginal 1.0 ItemsOriginal.qml singleton ItemsFooter 1.0 ItemsFooter.qml -singleton Lang 1.0 Lang.qml diff --git a/example/qml/page/T_Acrylic.qml b/example/qml/page/T_Acrylic.qml index 700d17e3..4e037f23 100644 --- a/example/qml/page/T_Acrylic.qml +++ b/example/qml/page/T_Acrylic.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Acrylic" + title: qsTr("Acrylic") RowLayout{ spacing: 10 diff --git a/example/qml/page/T_Awesome.qml b/example/qml/page/T_Awesome.qml index 92ab874f..8d81181b 100644 --- a/example/qml/page/T_Awesome.qml +++ b/example/qml/page/T_Awesome.qml @@ -6,11 +6,11 @@ import FluentUI 1.0 FluContentPage { - title:"Awesome" + title: qsTr("Awesome") FluTextBox{ id:text_box - placeholderText: "请输入关键字" + placeholderText: qsTr("Please enter a keyword") anchors{ topMargin: 20 top:parent.top @@ -18,7 +18,7 @@ FluContentPage { } FluFilledButton{ - text:"搜索" + text: qsTr("Search") anchors{ left: text_box.right verticalCenter: text_box.verticalCenter @@ -53,7 +53,7 @@ FluContentPage { onClicked: { var text ="FluentIcons."+modelData.name; FluTools.clipText(text) - showSuccess("您复制了 "+text) + showSuccess(qsTr("You Copied ")+text) } } FluText { @@ -62,7 +62,7 @@ FluContentPage { anchors.horizontalCenter: parent.horizontalCenter anchors.top: item_icon.bottom width:parent.width - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap text: modelData.name horizontalAlignment: Text.AlignHCenter } diff --git a/example/qml/page/T_Badge.qml b/example/qml/page/T_Badge.qml index 4ba4770e..3e205c25 100644 --- a/example/qml/page/T_Badge.qml +++ b/example/qml/page/T_Badge.qml @@ -7,12 +7,12 @@ import "../component" FluScrollablePage{ - title:"Badge" + title: qsTr("Badge") FluArea{ Layout.fillWidth: true Layout.topMargin: 20 - height: 106 + height: 120 paddings: 10 Column{ @@ -20,11 +20,13 @@ FluScrollablePage{ anchors{ verticalCenter: parent.verticalCenter left: parent.left + right: parent.right } FluText{ - text:"一般出现在通知图标或头像的右上角,用于显示需要处理的消息条数" + wrapMode: Text.WordWrap + width: parent.width + text: qsTr("It usually appears in the upper right corner of the notification icon or avatar to display the number of messages that need to be processed") } - Row{ spacing: 20 Rectangle{ diff --git a/example/qml/page/T_BreadcrumbBar.qml b/example/qml/page/T_BreadcrumbBar.qml index 65ee1a19..947ea127 100644 --- a/example/qml/page/T_BreadcrumbBar.qml +++ b/example/qml/page/T_BreadcrumbBar.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"BreadcurmbBar" + title: qsTr("BreadcurmbBar") Component.onCompleted: { var items = [] @@ -48,7 +48,7 @@ FluScrollablePage{ spacing: 10 FluFilledButton{ - text:"Reset sample" + text: qsTr("Reset sample") onClicked:{ var items = [] for(var i=0;i<10;i++){ @@ -66,7 +66,6 @@ FluScrollablePage{ Layout.fillWidth: true onClickItem: (model)=>{ - //不是点击最后一个item元素 if(model.index+1!==count()){ breadcrumb_2.remove(model.index+1,count()-model.index-1) } diff --git a/example/qml/page/T_Buttons.qml b/example/qml/page/T_Buttons.qml index ba6f6407..4c049ca3 100644 --- a/example/qml/page/T_Buttons.qml +++ b/example/qml/page/T_Buttons.qml @@ -7,11 +7,11 @@ import "../component" FluScrollablePage{ - title:"Buttons" + title: qsTr("Buttons") FluText{ Layout.topMargin: 20 - text:"支持Tab键切换焦点,空格键执行点击事件" + text: qsTr("Support the Tab key to switch focus, and the Space key to perform click events") } FluArea{ @@ -21,9 +21,8 @@ FluScrollablePage{ Layout.topMargin: 20 FluTextButton{ - disabled:text_button_switch.checked - text:"Text Button" - contentDescription: "文本按钮" + disabled: text_button_switch.checked + text: qsTr("Text Button") onClicked: { showInfo("点击Text Button") } @@ -33,12 +32,12 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:text_button_switch + id: text_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -59,10 +58,10 @@ FluScrollablePage{ Layout.topMargin: 20 FluButton{ - disabled:button_switch.checked - text:"Standard Button" + disabled: button_switch.checked + text: qsTr("Standard Button") onClicked: { - showInfo("点击StandardButton") + showInfo(qsTr("Click StandardButton")) } anchors{ verticalCenter: parent.verticalCenter @@ -70,12 +69,12 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:button_switch + id: button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -96,10 +95,10 @@ FluScrollablePage{ paddings: 10 FluFilledButton{ - disabled:filled_button_switch.checked - text:"Filled Button" + disabled: filled_button_switch.checked + text: qsTr("Filled Button") onClicked: { - showWarning("点击FilledButton"+height) + showWarning(qsTr("Click FilledButton")) } anchors{ verticalCenter: parent.verticalCenter @@ -107,12 +106,12 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:filled_button_switch + id: filled_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -134,19 +133,19 @@ FluScrollablePage{ FluToggleButton{ disabled:toggle_button_switch.checked - text:"Toggle Button" + text: qsTr("Toggle Button") anchors{ verticalCenter: parent.verticalCenter left: parent.left } } FluToggleSwitch{ - id:toggle_button_switch + id: toggle_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -161,7 +160,7 @@ FluScrollablePage{ } Timer{ - id:timer_progress + id: timer_progress interval: 200 onTriggered: { btn_progress.progress = (btn_progress.progress + 0.1).toFixed(1) @@ -180,9 +179,9 @@ FluScrollablePage{ paddings: 10 FluProgressButton{ - id:btn_progress - disabled:progress_button_switch.checked - text:"Progress Button" + id: btn_progress + disabled: progress_button_switch.checked + text: qsTr("Progress Button") anchors{ verticalCenter: parent.verticalCenter left: parent.left @@ -193,12 +192,12 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:progress_button_switch + id: progress_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -219,9 +218,9 @@ FluScrollablePage{ paddings: 10 FluLoadingButton{ - id:btn_loading - loading:loading_button_switch.checked - text:"Loading Button" + id: btn_loading + loading: loading_button_switch.checked + text: qsTr("Loading Button") anchors{ verticalCenter: parent.verticalCenter left: parent.left @@ -231,13 +230,13 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:loading_button_switch + id: loading_button_switch checked: true anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Loading" + text: qsTr("Loading") } } CodeExpander{ @@ -258,7 +257,7 @@ FluScrollablePage{ paddings: 10 Layout.topMargin: 20 Flow{ - id:layout_icon_button + id: layout_icon_button spacing: 10 anchors{ verticalCenter: parent.verticalCenter @@ -266,60 +265,60 @@ FluScrollablePage{ right: icon_button_switch.left } FluIconButton{ - disabled:icon_button_switch.checked + disabled: icon_button_switch.checked iconDelegate: Image{ sourceSize: Qt.size(40,40) ; width: 20; height: 20; source: "qrc:/example/res/image/ic_home_github.png" } onClicked:{ - showSuccess("点击IconButton") + showSuccess(qsTr("Click IconButton")) } } FluIconButton{ - iconSource:FluentIcons.ChromeCloseContrast - disabled:icon_button_switch.checked + iconSource: FluentIcons.ChromeCloseContrast + disabled: icon_button_switch.checked iconSize: 15 - text:"IconOnly" + text: qsTr("IconOnly") display: Button.IconOnly onClicked:{ - showSuccess("Button.IconOnly") + showSuccess(qsTr("Button.IconOnly")) } } FluIconButton{ - iconSource:FluentIcons.ChromeCloseContrast - disabled:icon_button_switch.checked + iconSource: FluentIcons.ChromeCloseContrast + disabled: icon_button_switch.checked iconSize: 15 - text:"TextOnly" + text: qsTr("TextOnly") display: Button.TextOnly onClicked:{ - showSuccess("Button.TextOnly") + showSuccess(qsTr("Button.TextOnly")) } } FluIconButton{ - iconSource:FluentIcons.ChromeCloseContrast - disabled:icon_button_switch.checked + iconSource: FluentIcons.ChromeCloseContrast + disabled: icon_button_switch.checked iconSize: 15 - text:"TextBesideIcon" + text: qsTr("TextBesideIcon") display: Button.TextBesideIcon onClicked:{ - showSuccess("Button.TextBesideIcon") + showSuccess(qsTr("Button.TextBesideIcon")) } } FluIconButton{ - iconSource:FluentIcons.ChromeCloseContrast - disabled:icon_button_switch.checked + iconSource: FluentIcons.ChromeCloseContrast + disabled: icon_button_switch.checked iconSize: 15 - text:"TextUnderIcon" + text: qsTr("TextUnderIcon") display: Button.TextUnderIcon onClicked:{ - showSuccess("Button.TextUnderIcon") + showSuccess(qsTr("Button.TextUnderIcon")) } } } FluToggleSwitch{ - id:icon_button_switch + id: icon_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -339,35 +338,35 @@ FluScrollablePage{ paddings: 10 Layout.topMargin: 20 FluDropDownButton{ - disabled:drop_down_button_switch.checked - text:"DropDownButton" + disabled: drop_down_button_switch.checked + text: qsTr("DropDownButton") anchors{ verticalCenter: parent.verticalCenter left: parent.left } FluMenuItem{ - text:"Menu_1" + text: qsTr("Menu_1") } FluMenuItem{ - text:"Menu_2" + text: qsTr("Menu_2") } FluMenuItem{ - text:"Menu_3" + text: qsTr("Menu_3") } FluMenuItem{ - text:"Menu_4" + text: qsTr("Menu_4") onClicked: { } } } FluToggleSwitch{ - id:drop_down_button_switch + id: drop_down_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -403,24 +402,24 @@ FluScrollablePage{ } FluRadioButton{ disabled:radio_button_switch.checked - text:"Radio Button_1" + text: qsTr("Radio Button_1") } FluRadioButton{ disabled:radio_button_switch.checked - text:"Radio Button_2" + text: qsTr("Radio Button_2") } FluRadioButton{ disabled:radio_button_switch.checked - text:"Radio Button_3" + text: qsTr("Radio Button_3") } } FluToggleSwitch{ - id:radio_button_switch + id: radio_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ diff --git a/example/qml/page/T_CalendarPicker.qml b/example/qml/page/T_CalendarPicker.qml index 883db2f7..637ddc28 100644 --- a/example/qml/page/T_CalendarPicker.qml +++ b/example/qml/page/T_CalendarPicker.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"CalendarPicker" + title: qsTr("CalendarPicker") FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Captcha.qml b/example/qml/page/T_Captcha.qml index 31c3e9a2..2c520bc9 100644 --- a/example/qml/page/T_Captcha.qml +++ b/example/qml/page/T_Captcha.qml @@ -7,10 +7,10 @@ import "../component" FluScrollablePage{ - title:"Captcha" + title: qsTr("Captcha") FluCaptcha{ - id:captcha + id: captcha Layout.topMargin: 20 ignoreCase:switch_case.checked MouseArea{ @@ -23,7 +23,7 @@ FluScrollablePage{ } FluButton{ - text:"Refresh" + text: qsTr("Refresh") Layout.topMargin: 20 onClicked: { captcha.refresh() @@ -31,8 +31,8 @@ FluScrollablePage{ } FluToggleSwitch{ - id:switch_case - text:"Ignore Case" + id: switch_case + text: qsTr("Ignore Case") checked: true Layout.topMargin: 10 } @@ -42,7 +42,7 @@ FluScrollablePage{ Layout.topMargin: 10 FluTextBox{ id:text_box - placeholderText: "请输入验证码" + placeholderText: qsTr("Please enter a verification code") Layout.preferredWidth: 240 } FluButton{ @@ -50,9 +50,9 @@ FluScrollablePage{ onClicked: { var success = captcha.verify(text_box.text) if(success){ - showSuccess("验证码正确") + showSuccess(qsTr("The verification code is correct")) }else{ - showError("错误验证,请重新输入") + showError(qsTr("Error validation, please re-enter")) } } } diff --git a/example/qml/page/T_Carousel.qml b/example/qml/page/T_Carousel.qml index e3f7f3b7..f386085b 100644 --- a/example/qml/page/T_Carousel.qml +++ b/example/qml/page/T_Carousel.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Carousel" + title: qsTr("Carousel") ListModel{ id:data_model @@ -34,7 +34,7 @@ FluScrollablePage{ left:parent.left } FluText{ - text:"轮播图,支持无限轮播,无限滑动,用ListView实现的组件" + text: qsTr("Carousel map, support infinite carousel, infinite swipe, and components implemented with ListView") } Item{ width: 400 diff --git a/example/qml/page/T_CheckBox.qml b/example/qml/page/T_CheckBox.qml index cc35d4fa..3f6caf65 100644 --- a/example/qml/page/T_CheckBox.qml +++ b/example/qml/page/T_CheckBox.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"CheckBox" + title: qsTr("CheckBox") FluArea{ Layout.fillWidth: true @@ -16,7 +16,7 @@ FluScrollablePage{ Layout.topMargin: 20 FluText{ - text:"A 2-state CheckBox" + text: qsTr("A 2-state CheckBox") } Row{ @@ -30,11 +30,11 @@ FluScrollablePage{ } FluCheckBox{ disabled: check_box_switch_two.checked - text:"Right" + text: qsTr("Right") } FluCheckBox{ disabled: check_box_switch_two.checked - text:"Left" + text: qsTr("Left") textRight: false } } @@ -44,7 +44,7 @@ FluScrollablePage{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -62,7 +62,7 @@ FluScrollablePage{ Layout.topMargin: 20 FluText{ - text:"A 3-state CheckBox" + text: qsTr("A 3-state CheckBox") } Row{ @@ -73,7 +73,7 @@ FluScrollablePage{ } FluCheckBox{ property int count: 1 - text:"Three State" + text: qsTr("Three State") disabled: check_box_switch_three.checked clickListener: function(){ var flag = count%3 @@ -94,12 +94,12 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:check_box_switch_three + id: check_box_switch_three anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ diff --git a/example/qml/page/T_Clip.qml b/example/qml/page/T_Clip.qml index 166ae6ad..00f2d2e2 100644 --- a/example/qml/page/T_Clip.qml +++ b/example/qml/page/T_Clip.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Clip" + title: qsTr("Clip") FluArea{ Layout.fillWidth: true @@ -22,8 +22,7 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"配合图片使用(software渲染下该组件将没有效果)" - font: FluTextStyle.Subtitle + text: qsTr("Use with images (this component will have no effect under software rendering)") Layout.topMargin: 20 } RowLayout{ @@ -31,7 +30,7 @@ FluScrollablePage{ FluClip{ width: 50 height: 50 - radius:[25,0,25,25] + radius: [25,0,25,25] Image { asynchronous: true anchors.fill: parent @@ -42,7 +41,7 @@ FluScrollablePage{ FluClip{ width: 50 height: 50 - radius:[10,10,10,10] + radius: [10,10,10,10] Image { asynchronous: true anchors.fill: parent @@ -53,7 +52,7 @@ FluScrollablePage{ FluClip{ width: 50 height: 50 - radius:[25,25,25,25] + radius: [25,25,25,25] Image { asynchronous: true anchors.fill: parent @@ -64,7 +63,7 @@ FluScrollablePage{ FluClip{ width: 50 height: 50 - radius:[0,25,25,25] + radius: [0,25,25,25] Image { asynchronous: true anchors.fill: parent @@ -76,7 +75,7 @@ FluScrollablePage{ FluClip{ width: 1920/5 height: 1200/5 - radius:[8,8,8,8] + radius: [8,8,8,8] Image { asynchronous: true source: "qrc:/example/res/image/banner_1.jpg" diff --git a/example/qml/page/T_ColorPicker.qml b/example/qml/page/T_ColorPicker.qml index 69bb9f50..8833a005 100644 --- a/example/qml/page/T_ColorPicker.qml +++ b/example/qml/page/T_ColorPicker.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"ColorPicker" + title: qsTr("ColorPicker") FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_ComboBox.qml b/example/qml/page/T_ComboBox.qml index 21bd835b..d546672b 100644 --- a/example/qml/page/T_ComboBox.qml +++ b/example/qml/page/T_ComboBox.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"ComboBox" + title: qsTr("ComboBox") FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_DatePicker.qml b/example/qml/page/T_DatePicker.qml index 5243e565..b193c9ca 100644 --- a/example/qml/page/T_DatePicker.qml +++ b/example/qml/page/T_DatePicker.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"TimePicker" + title: qsTr("TimePicker") FluArea{ Layout.fillWidth: true @@ -20,10 +20,15 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"showYear=true" + text: qsTr("showYear=true") } FluDatePicker{ current: new Date() + yearText: qsTr("Year") + monthText: qsTr("Month") + dayText: qsTr("Day") + cancelText: qsTr("Cancel") + okText: qsTr("OK") onAccepted: { showSuccess(current.toLocaleDateString()) } @@ -49,10 +54,15 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"showYear=false" + text: qsTr("showYear=false") } FluDatePicker{ - showYear:false + 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_Dialog.qml b/example/qml/page/T_Dialog.qml index 1e41c0fe..6df1221b 100644 --- a/example/qml/page/T_Dialog.qml +++ b/example/qml/page/T_Dialog.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Dialog" + title: qsTr("Dialog") FluArea{ Layout.fillWidth: true @@ -16,7 +16,7 @@ FluScrollablePage{ Layout.topMargin: 20 FluButton{ anchors.verticalCenter: parent.verticalCenter - text:"Show Double Button Dialog" + text: qsTr("Show Double Button Dialog") onClicked: { double_btn_dialog.open() } @@ -27,16 +27,16 @@ FluScrollablePage{ Layout.topMargin: -1 code:'FluContentDialog{ id:dialog - title:"友情提示" - message:"确定要退出程序么?" - negativeText:"取消" + title: qsTr("Friendly Reminder") + message: qsTr("Are you sure you want to opt out?") + negativeText: qsTr("Cancel") buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton onNegativeClicked:{ - showSuccess("点击取消按钮") + showSuccess(qsTr("Click the Cancel Button")) } - positiveText:"确定" + positiveText: qsTr("OK") onPositiveClicked:{ - showSuccess("点击确定按钮") + showSuccess(qsTr("Click the OK Button")) } } dialog.open()' @@ -44,16 +44,16 @@ FluScrollablePage{ FluContentDialog{ id:double_btn_dialog - title:"友情提示" - message:"确定要退出程序么?" + title: qsTr("Friendly Reminder") + message: qsTr("Are you sure you want to opt out?") buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton - negativeText:"取消" - onNegativeClicked:{ - showSuccess("点击取消按钮") + negativeText: qsTr("Cancel") + onNegativeClicked: { + showSuccess(qsTr("Click the Cancel Button")) } - positiveText:"确定" + positiveText: qsTr("OK") onPositiveClicked:{ - showSuccess("点击确定按钮") + showSuccess(qsTr("Click the OK Button")) } } @@ -74,43 +74,43 @@ FluScrollablePage{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluContentDialog{ - id:dialog - title:"友情提示" - message:"确定要退出程序么?" - negativeText:"取消" + id: dialog + title: qsTr("Friendly Reminder") + message: qsTr("Are you sure you want to opt out?") + negativeText: qsTr("Cancel") buttonFlags: FluContentDialogType.NeutralButton | FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton - negativeText:"取消" - onNegativeClicked:{ - showSuccess("点击取消按钮") + negativeText: qsTr("Cancel") + onNegativeClicked: { + showSuccess(qsTr("Click the Cancel Button")) } - positiveText:"确定" - onPositiveClicked:{ - showSuccess("点击确定按钮") + positiveText: qsTr("OK") + onPositiveClicked: { + showSuccess(qsTr("Click the OK Button")) } - neutralText:"最小化" - onNeutralClicked:{ - showSuccess("点击最小化按钮") + neutralText: qsTr("Minimize") + onNeutralClicked: { + showSuccess(qsTr("Click Minimize")) } } dialog.open()' } FluContentDialog{ - id:triple_btn_dialog - title:"友情提示" - message:"确定要退出程序么?" + id: triple_btn_dialog + title: qsTr("Friendly Reminder") + message: qsTr("Are you sure you want to opt out?") buttonFlags: FluContentDialogType.NeutralButton | FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton - negativeText:"取消" - onNegativeClicked:{ - showSuccess("点击取消按钮") + negativeText: qsTr("Cancel") + onNegativeClicked: { + showSuccess(qsTr("Click the Cancel Button")) } - positiveText:"确定" - onPositiveClicked:{ - showSuccess("点击确定按钮") + positiveText: qsTr("OK") + onPositiveClicked: { + showSuccess(qsTr("Click the OK Button")) } - neutralText:"最小化" - onNeutralClicked:{ - showSuccess("点击最小化按钮") + neutralText: qsTr("Minimize") + onNeutralClicked: { + showSuccess(qsTr("Click Minimize")) } } @@ -122,7 +122,7 @@ FluScrollablePage{ FluButton{ anchors.top: parent.top anchors.topMargin: 5 - text:"Custom Content Dialog" + text: qsTr("Custom Content Dialog") onClicked: { custom_btn_dialog.open() } @@ -130,7 +130,7 @@ FluScrollablePage{ FluButton{ anchors.top: parent.top anchors.topMargin: 48 - text:"Custom Content Dialog2" + text: qsTr("Custom Content Dialog2") onClicked: { custom_btn_dialog2.open() } @@ -140,10 +140,10 @@ FluScrollablePage{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluContentDialog{ - id:dialog - title:"友情提示" - message:"数据正在加载中,请稍等..." - negativeText:"取消加载" + id: dialog + title: qsTr("Friendly Reminder") + message: qsTr("Data is loading, please wait...") + negativeText: qsTr("Unload") contentDelegate: Component{ Item{ width: parent.width @@ -153,22 +153,22 @@ FluScrollablePage{ } } } - onNegativeClicked:{ - showSuccess("点击取消按钮") + onNegativeClicked: { + showSuccess(qsTr("Click the Cancel Button")) } - positiveText:"确定" - onPositiveClicked:{ - showSuccess("点击确定按钮") + positiveText :qsTr("OK") + onPositiveClicked: { + showSuccess(qsTr("Click the OK Button")) } } dialog.open()' } FluContentDialog{ - id:custom_btn_dialog - title:"友情提示" - message:"数据正在加载中,请稍等..." - negativeText:"取消加载" + id: custom_btn_dialog + title: qsTr("Friendly Reminder") + message: qsTr("Data is loading, please wait...") + negativeText: qsTr("Unload") contentDelegate: Component{ Item{ implicitWidth: parent.width @@ -178,18 +178,18 @@ FluScrollablePage{ } } } - onNegativeClicked:{ - showSuccess("点击取消按钮") + onNegativeClicked: { + showSuccess(qsTr("Click the Cancel Button")) } - positiveText:"确定" - onPositiveClickListener:function(){ - showError("测试InfoBar层级在Popup之上") + positiveText: qsTr("OK") + onPositiveClickListener: function(){ + showError(qsTr("Test the InfoBar level on top of the Popup")) } } FluContentDialog{ id:custom_btn_dialog2 - title:"折线图" + title: qsTr("Line Chart") contentDelegate: Component{ Item{ implicitWidth: parent.width @@ -224,9 +224,9 @@ FluScrollablePage{ } } buttonFlags: FluContentDialogType.PositiveButton - positiveText:"确定" - onPositiveClicked:{ - showSuccess("点击确定按钮") + positiveText: qsTr("OK") + onPositiveClicked: { + showSuccess(qsTr("Click the OK Button")) } } } diff --git a/example/qml/page/T_Expander.qml b/example/qml/page/T_Expander.qml index 066fd48a..ebe727c2 100644 --- a/example/qml/page/T_Expander.qml +++ b/example/qml/page/T_Expander.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Expander" + title: qsTr("Expander") FluArea{ Layout.fillWidth: true @@ -23,7 +23,7 @@ FluScrollablePage{ } FluExpander{ - headerText:"打开一个单选框" + headerText: qsTr("Open a radio box") Layout.topMargin: 20 Item{ anchors.fill: parent @@ -50,7 +50,7 @@ FluScrollablePage{ FluExpander{ Layout.topMargin: 20 - headerText:"打开一个滑动文本框" + headerText: qsTr("Open a sliding text box") Item{ anchors.fill: parent Flickable{ @@ -64,9 +64,16 @@ FluScrollablePage{ FluText{ id:text_info width: scrollview.width - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap padding: 14 - text:"先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。宫中府中,俱为一体;陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。臣不胜受恩感激。今当远离,临表涕零,不知所言。" + text: qsTr("Permit me to observe: the late emperor was taken from us before he could finish his life`s work, the restoration of Han. Today, the empire is still divided in three, and our very survival is threatened. Yet still the officials at court and the soldiers throughout the realm remain loyal to you, your majesty. Because they remember the late emperor, all of them, and they wish to repay his kindness in service to you. This is the moment to extend your divine influence, to honour the memory of the late Emperor and strengthen the morale of your officers. It is not time to listen to bad advice, or close your ears to the suggestions of loyal men. +The court and the administration are as one. Both must be judged by one standard. Those who are loyal and good must get what they deserve, but so must the evil-doers who break the law. This will demonstrate the justice of your rule. There cannot be one law for the court and another for the administration. +Counselors and attendants like Guo Youzhi, Fei Yi, and Dong Yun are all reliable men, loyal of purpose and pure in motive. The late Emperor selected them for office so that they would serve you after his death.These are the men who should be consulted on all palace affairs. Xiang Chong has proved himself a fine general in battle, and the late Emperor believed in him. That is why the assembly has recommended him for overall command. It will keep the troops happy if he is consulted on all military matters. +Xiang Chong has proved himself a fine general in battle, and the late Emperor believed in him. That is why the assembly has recommended him for overall command. It will keep the troops happy if he is consulted on all military matters. +The emperors of the Western Han chose their courtiers wisely, and their dynasty flourished. The emperors of the Eastern Han chose poorly, and they doomed the empire to ruin. Whenever the late Emperor discussed this problem with me, he lamented the failings of Emperors Huan and Ling. Advisors like Guo Youzhi, Fei Yi, Chen Zhen, Zhang Yi, and Jiang Wan – these are all men of great integrity and devotion. I encourage you to trust them, your majesty, if the house of Han is to rise again. +I begin as a common man, farming in my fields in Nanyang, doing what I could to survive in an age of chaos. I never had any interest in making a name for myself as a noble. The late Emperor was not ashamed to visit my cottage and seek my advice. Grateful for his regard, I responded to his appeal and threw myself into his service. Now twenty-one years has passed, the late Emperor always appreciated my caution and, in his final days, entrusted me with his cause. +Since that moment, I have been tormented day and night by the fear that I might let him down. That is why I crossed the Lu river at the height of summer, and entered the wastelands beyond. Now the south has been subdued, and our forces are fully armed.I should lead our soldiers to conquer the northern heartland and attempt to remove the hateful traitors, restore the house of Han, and return it to the former capital.This the way I mean to honor my debt to the late Emperor and fulfill my duty to you. Guo Youzhi, Fei Yi, and Dong Yun are the ones who should be making policy decisions and recommendations. +My only desire is to be permitted to drive out the traitors and restore the Han. If I should let you down, punish my offense and report it to the spirit of the late Emperor. If those three advisors should fail in their duties, then they should be punished for their negligence.Your Majesty, consider your course of action carefully. Seek out good advice, and never forget the late Emperor. I depart now on a long expedition, and I will be forever grateful if you heed my advice. Blinded by my own tears, I know not what I write.") } } } @@ -78,7 +85,7 @@ FluScrollablePage{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluExpander{ - headerText:"打开一个单选框" + headerText: qsTr("Open a radio box") Item{ anchors.fill: parent Flickable{ @@ -90,9 +97,9 @@ FluScrollablePage{ FluText{ id:text_info width: scrollview.width - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap padding: 14 - text:"先帝创业未半而中道崩殂,今天下三分......"" + text: qsTr("Permit me to observe: the late emperor was taken from us before he could finish his life`s work...") } } } diff --git a/example/qml/page/T_FlipView.qml b/example/qml/page/T_FlipView.qml index 116d5904..26d35350 100644 --- a/example/qml/page/T_FlipView.qml +++ b/example/qml/page/T_FlipView.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"FlipView" + title: qsTr("FlipView") FluArea{ Layout.fillWidth: true @@ -17,7 +17,7 @@ FluScrollablePage{ ColumnLayout{ anchors.verticalCenter: parent.verticalCenter FluText{ - text:"水平方向的FlipView" + text: qsTr("Horizontal FlipView") } FluFlipView{ Image{ @@ -69,7 +69,7 @@ FluScrollablePage{ ColumnLayout{ anchors.verticalCenter: parent.verticalCenter FluText{ - text:"垂直方向的FlipView" + text: qsTr("Vertical FlipView") } FluFlipView{ vertical:true diff --git a/example/qml/page/T_Home.qml b/example/qml/page/T_Home.qml index 809faeab..6c7ac4b7 100644 --- a/example/qml/page/T_Home.qml +++ b/example/qml/page/T_Home.qml @@ -11,12 +11,24 @@ FluScrollablePage{ animDisabled: true ListModel{ - id:model_header + id: model_header ListElement{ - icon:"qrc:/example/res/image/ic_home_github.png" - title:"FluentUI GitHub" - desc:"The latest FluentUI controls and styles for your applications." - url:"https://github.com/zhuzichu520/FluentUI" + icon: "qrc:/example/res/image/ic_home_github.png" + title: qsTr("FluentUI GitHub") + desc: qsTr("The latest FluentUI controls and styles for your applications.") + url: "https://github.com/zhuzichu520/FluentUI" + clicked: function(model){ + Qt.openUrlExternally(model.url) + } + } + ListElement{ + icon: "qrc:/example/res/image/favicon.ico" + title: qsTr("FluentUI Initalizr") + desc: qsTr("FluentUI Initializr is a FluentUI tool that helps you create and customize Fluent UI projects with various options.") + url: "https://github.com/zhuzichu520/FluentUI" + clicked: function(model){ + FluApp.navigate("/fluentInitalizr") + } } } @@ -106,7 +118,7 @@ FluScrollablePage{ Layout.leftMargin: 20 color: FluColors.Grey120 font.pixelSize: 12 - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap } } FluIcon{ @@ -129,7 +141,7 @@ FluScrollablePage{ else scrollbar_header.increase() } onClicked: { - Qt.openUrlExternally(model.url) + model.clicked(model) } } } @@ -202,7 +214,7 @@ FluScrollablePage{ id:item_desc text:desc color:FluColors.Grey120 - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap elide: Text.ElideRight font: FluTextStyle.Caption maximumLineCount: 2 @@ -275,3 +287,4 @@ FluScrollablePage{ } } + diff --git a/example/qml/page/T_Image.qml b/example/qml/page/T_Image.qml index 0ada284e..e66f77f8 100644 --- a/example/qml/page/T_Image.qml +++ b/example/qml/page/T_Image.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Image" + title: qsTr("Image") FluArea{ Layout.fillWidth: true @@ -24,9 +24,10 @@ 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("图片加载失败,请重新加载") + showError(qsTr("The image failed to load, please reload")) } } clickErrorListener: function(){ diff --git a/example/qml/page/T_InfoBar.qml b/example/qml/page/T_InfoBar.qml index 6a3cce53..f91c1bd1 100644 --- a/example/qml/page/T_InfoBar.qml +++ b/example/qml/page/T_InfoBar.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"InfoBar" + title: qsTr("InfoBar") FluArea{ Layout.fillWidth: true @@ -21,39 +21,39 @@ FluScrollablePage{ left: parent.left } FluButton{ - text:"Info" + text: qsTr("Info") onClicked: { - showInfo("这是一个Info样式的InfoBar") + showInfo(qsTr("This is an InfoBar in the Info Style")) } } FluButton{ - text:"Warning" + text: qsTr("Warning") onClicked: { - showWarning("这是一个Warning样式的InfoBar") + showWarning(qsTr("This is an InfoBar in the Warning Style")) } } FluButton{ text:"Error" onClicked: { - showError("这是一个Error样式的InfoBar") + showError(qsTr("This is an InfoBar in the Error Style")) } } FluButton{ text:"Success" onClicked: { - showSuccess("这是一个Success样式的InfoBar") + showSuccess(qsTr("This is an InfoBar in the Success Style")) } } FluButton{ - text:"手动关闭的InfoBar" + text: qsTr("InfoBar that needs to be turned off manually") onClicked: { - showInfo("这是一个Info样式的InfoBar",0,"支持手动关闭") + showInfo("This is an InfoBar in the Info Style",0,"Manual shutdown is supported") } } FluButton{ text:"Loading" onClicked: { - showLoading() + showLoading(qsTr("Loading...")) } } } @@ -61,12 +61,12 @@ FluScrollablePage{ CodeExpander{ Layout.fillWidth: true Layout.topMargin: -1 - code:'showInfo("这是一个Info样式的InfoBar") + code:'showInfo(qsTr("This is an InfoBar in the Info Style")) -showWarning("这是一个Warning样式的InfoBar") +showWarning(qsTr("This is an InfoBar in the Warning Style")) -showError("这是一个Error样式的InfoBar") +showError(qsTr("This is an InfoBar in the Error Style")) -showSuccess("这是一个Success样式的InfoBar这是一个Success样式的InfoBar")' +showSuccess(qsTr("This is an InfoBar in the Success Style"))' } } diff --git a/example/qml/page/T_Menu.qml b/example/qml/page/T_Menu.qml index dc0545ea..e98dfcfe 100644 --- a/example/qml/page/T_Menu.qml +++ b/example/qml/page/T_Menu.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Menu" + title: qsTr("Menu") FluMenu { id:menu @@ -34,13 +34,13 @@ FluScrollablePage{ text: qsTr("Disable") enabled:false onTriggered: { - showError("Disable") + showError(qsTr("Disable")) } } FluMenuSeparator { } Action { text: qsTr("Check");checkable: true;checked: true} FluMenu{ - title: "Save As..." + title: qsTr("Save As...") Action { text: qsTr("Doc") } Action { text: qsTr("PDF") } } @@ -53,7 +53,7 @@ FluScrollablePage{ paddings: 10 Layout.topMargin: 20 Column{ - id:layout_column + id: layout_column spacing: 15 anchors{ verticalCenter: parent.verticalCenter @@ -61,11 +61,11 @@ FluScrollablePage{ } FluText{ - text:"Menu" + text: qsTr("Menu") } FluButton{ - text:"Show Menu Popup" + text: qsTr("Show Menu Popup") Layout.topMargin: 20 onClicked:{ menu.popup() @@ -112,7 +112,7 @@ menu.popup() } FluText{ - text:"MenuBar" + text: qsTr("MenuBar") } FluMenuBar { @@ -129,7 +129,7 @@ menu.popup() enabled:false } FluMenu{ - title: "Save As..." + title: qsTr("Save As...") Action { text: qsTr("Doc") } Action { text: qsTr("PDF") } } @@ -168,8 +168,4 @@ menu.popup() menu.popup() ' } - - - - } diff --git a/example/qml/page/T_MultiWindow.qml b/example/qml/page/T_MultiWindow.qml index 4a16d532..cdde41c2 100644 --- a/example/qml/page/T_MultiWindow.qml +++ b/example/qml/page/T_MultiWindow.qml @@ -10,7 +10,7 @@ FluScrollablePage{ property string password: "" property var loginPageRegister: registerForWindowResult("/login") - title:"MultiWindow" + title: qsTr("MultiWindow") Connections{ target: loginPageRegister @@ -32,10 +32,10 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"Standard模式窗口,每次都会创建新窗口" + text: qsTr("Standard mode window,a new window is created every time") } FluButton{ - text:"点击创建窗口" + text: qsTr("Create Window") onClicked: { FluApp.navigate("/standardWindow") } @@ -55,11 +55,11 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"SingleTask模式窗口,如果窗口存在,这激活该窗口" + text: qsTr("SingleTask mode window,If a window exists, this activates the window") textFormat: Text.RichText } FluButton{ - text:"点击创建窗口" + text: qsTr("Create Window") onClicked: { FluApp.navigate("/singleTaskWindow") } @@ -79,10 +79,10 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"SingleInstance模式窗口,如果窗口存在,则销毁窗口,然后新建窗口" + text: qsTr("SingleInstance mode window,If the window exists, destroy the window and create a new window") } FluButton{ - text:"点击创建窗口" + text: qsTr("Create Window") onClicked: { FluApp.navigate("/singleInstanceWindow") } @@ -113,10 +113,10 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"页面跳转,不携带任何参数" + text: qsTr("Create the window without carrying any parameters") } FluButton{ - text:"点击跳转" + text: qsTr("Create Window") onClicked: { FluApp.navigate("/about") } @@ -127,7 +127,7 @@ FluScrollablePage{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluButton{ - text:"点击跳转" + text: qsTr("Create Window") onClicked: { FluApp.navigate("/about") } @@ -148,16 +148,16 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"页面跳转,并携带参数用户名:zhuzichu" + text: qsTr("Create a window with the parameter username: zhuzichu") } FluButton{ - text:"点击跳转到登录" + text: qsTr("Create Window") onClicked: { loginPageRegister.launch({username:"zhuzichu"}) } } FluText{ - text:"登录窗口返回过来的密码->"+password + text:qsTr("Login Window Returned Password - >")+password } } } @@ -175,7 +175,7 @@ Connections{ } FluButton{ - text:"点击跳转" + text: qsTr("Create Window") onClicked: { loginPageRegister.launch({username:"zhuzichu"}) } diff --git a/example/qml/page/T_Network.qml b/example/qml/page/T_Network.qml index 7742162e..ce39a37d 100644 --- a/example/qml/page/T_Network.qml +++ b/example/qml/page/T_Network.qml @@ -552,7 +552,7 @@ FluContentPage{ FluText{ id:text_info width: scrollview.width - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap padding: 14 } } diff --git a/example/qml/page/T_Pagination.qml b/example/qml/page/T_Pagination.qml index b029d0ba..52e2d9f2 100644 --- a/example/qml/page/T_Pagination.qml +++ b/example/qml/page/T_Pagination.qml @@ -7,7 +7,7 @@ import FluentUI 1.0 FluScrollablePage{ - title:"Pagination" + title: qsTr("Pagination") FluArea{ Layout.fillWidth: true @@ -21,16 +21,22 @@ 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_Pivot.qml b/example/qml/page/T_Pivot.qml index cbfeb8d7..c2c15c84 100644 --- a/example/qml/page/T_Pivot.qml +++ b/example/qml/page/T_Pivot.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Pivot" + title: qsTr("Pivot") FluArea{ Layout.fillWidth: true @@ -22,27 +22,27 @@ FluScrollablePage{ currentIndex: 2 FluPivotItem{ - title:"All" + title: qsTr("All") contentItem:FluText{ - text:"All emails go here." + text: qsTr("All emails go here.") } } FluPivotItem{ - title:"Unread" - contentItem:FluText{ - text:"Unread emails go here." + title: qsTr("Unread") + contentItem: FluText{ + text: qsTr("Unread emails go here.") } } FluPivotItem{ - title:"Flagged" - contentItem:FluText{ - text:"Flagged emails go here." + title: qsTr("Flagged") + contentItem: FluText{ + text: qsTr("Flagged emails go here.") } } FluPivotItem{ - title:"Urgent" - contentItem:FluText{ - text:"Urgent emails go here." + title: qsTr("Urgent") + contentItem: FluText{ + text: qsTr("Urgent emails go here.") } } } @@ -53,27 +53,27 @@ FluScrollablePage{ code:'FluPivot{ anchors.fill: parent FluPivotItem:{ - text:"All" + text: qsTr("All") contentItem: FluText{ - text:"All emails go here." + text: qsTr("All emails go here.") } } FluPivotItem:{ - text:"Unread" + text: qsTr("Unread") contentItem: FluText{ - text:"Unread emails go here." + text: qsTr("Unread emails go here.") } } FluPivotItem:{ - text:"Flagged" + text: qsTr("Flagged") contentItem: FluText{ - text:"Flagged emails go here." + text: qsTr("Flagged emails go here.") } } FluPivotItem:{ - text:"Urgent" + text: qsTr("Urgent") contentItem: FluText{ - text:"Urgent emails go here." + text: qsTr("Urgent emails go here.") } } } diff --git a/example/qml/page/T_Progress.qml b/example/qml/page/T_Progress.qml index 2aefe9cf..bf175b9b 100644 --- a/example/qml/page/T_Progress.qml +++ b/example/qml/page/T_Progress.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Progress" + title: qsTr("Progress") FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_QRCode.qml b/example/qml/page/T_QRCode.qml index 00b38b22..1afff6af 100644 --- a/example/qml/page/T_QRCode.qml +++ b/example/qml/page/T_QRCode.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"QRCode" + title: qsTr("QRCode") FluQRCode{ id:qrcode diff --git a/example/qml/page/T_RadioButton.qml b/example/qml/page/T_RadioButton.qml index 4e30ce00..8af2a0fe 100644 --- a/example/qml/page/T_RadioButton.qml +++ b/example/qml/page/T_RadioButton.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"RadioButton" + title: qsTr("RadioButton") FluArea{ Layout.fillWidth: true @@ -22,21 +22,21 @@ FluScrollablePage{ } FluRadioButton{ disabled: radio_button_switch.checked - text:"Right" + text: qsTr("Right") } FluRadioButton{ disabled: radio_button_switch.checked - text:"Left" + text: qsTr("Left") textRight: false } } FluToggleSwitch{ - id:radio_button_switch + id: radio_button_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ @@ -61,24 +61,24 @@ FluScrollablePage{ } FluRadioButton{ disabled: radio_button_switch2.checked - text:"Radio Button_1" + text: qsTr("Radio Button_1") } FluRadioButton{ disabled: radio_button_switch2.checked - text:"Radio Button_2" + text: qsTr("Radio Button_2") } FluRadioButton{ disabled: radio_button_switch2.checked - text:"Radio Button_3" + text: qsTr("Radio Button_3") } } FluToggleSwitch{ - id:radio_button_switch2 + id: radio_button_switch2 anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ diff --git a/example/qml/page/T_RatingControl.qml b/example/qml/page/T_RatingControl.qml index 86d29e96..6ea00725 100644 --- a/example/qml/page/T_RatingControl.qml +++ b/example/qml/page/T_RatingControl.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage { - title: "RatingControl" + title: qsTr("RatingControl") FluArea { Layout.fillWidth: true diff --git a/example/qml/page/T_Rectangle.qml b/example/qml/page/T_Rectangle.qml index 8b6c9f7f..f9219c78 100644 --- a/example/qml/page/T_Rectangle.qml +++ b/example/qml/page/T_Rectangle.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Rectangle" + title: qsTr("Rectangle") FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Settings.qml b/example/qml/page/T_Settings.qml index ede7ca10..85e93fab 100644 --- a/example/qml/page/T_Settings.qml +++ b/example/qml/page/T_Settings.qml @@ -9,7 +9,7 @@ import "../global" FluScrollablePage{ - title:"Settings" + title: qsTr("Settings") SettingsViewModel{ id:viewmodel_settings @@ -40,13 +40,13 @@ FluScrollablePage{ spacing: 20 anchors.verticalCenter: parent.verticalCenter FluText{ - text:"当前版本 v%1".arg(AppInfo.version) + text: "%1 v%2".arg(qsTr("Current Version")).arg(AppInfo.version) font: FluTextStyle.Body anchors.verticalCenter: parent.verticalCenter } FluLoadingButton{ - id:btn_checkupdate - text:"检查更新" + id: btn_checkupdate + text: qsTr("Check for Updates") anchors.verticalCenter: parent.verticalCenter onClicked: { loading = true @@ -62,7 +62,7 @@ FluScrollablePage{ height: 50 paddings: 10 FluCheckBox{ - text:"Use System AppBar" + text: qsTr("Use System AppBar") checked: FluApp.useSystemAppBar anchors.verticalCenter: parent.verticalCenter onClicked: { @@ -78,7 +78,7 @@ FluScrollablePage{ height: 50 paddings: 10 FluCheckBox{ - text:"fitsAppBarWindows" + text:qsTr("Fits AppBar Windows") checked: window.fitsAppBarWindows anchors.verticalCenter: parent.verticalCenter onClicked: { @@ -88,13 +88,13 @@ FluScrollablePage{ } FluContentDialog{ - id:dialog_restart - title:"友情提示" - message:"此操作需要重启才能生效,是否重新启动?" + id: dialog_restart + title: qsTr("Friendly Reminder") + message: qsTr("This action requires a restart of the program to take effect, is it restarted?") buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton - negativeText: "取消" - positiveText:"确定" - onPositiveClicked:{ + negativeText: qsTr("Cancel") + positiveText: qsTr("OK") + onPositiveClicked: { FluApp.exit(931) } } @@ -112,13 +112,13 @@ FluScrollablePage{ left: parent.left } FluText{ - text:Lang.dark_mode + text: qsTr("Dark Mode") font: FluTextStyle.BodyStrong Layout.bottomMargin: 4 } Repeater{ - model: [{title:"System",mode:FluThemeType.System},{title:"Light",mode:FluThemeType.Light},{title:"Dark",mode:FluThemeType.Dark}] - delegate: FluRadioButton{ + model: [{title:qsTr("System"),mode:FluThemeType.System},{title:qsTr("Light"),mode:FluThemeType.Light},{title:qsTr("Dark"),mode:FluThemeType.Dark}] + delegate: FluRadioButton{ checked : FluTheme.darkMode === modelData.mode text:modelData.title clickListener:function(){ @@ -142,12 +142,12 @@ FluScrollablePage{ left: parent.left } FluText{ - text:Lang.navigation_view_display_mode + text:qsTr("Navigation View Display Mode") font: FluTextStyle.BodyStrong Layout.bottomMargin: 4 } Repeater{ - model: [{title:"Open",mode:FluNavigationViewType.Open},{title:"Compact",mode:FluNavigationViewType.Compact},{title:"Minimal",mode:FluNavigationViewType.Minimal},{title:"Auto",mode:FluNavigationViewType.Auto}] + model: [{title:qsTr("Open"),mode:FluNavigationViewType.Open},{title:qsTr("Compact"),mode:FluNavigationViewType.Compact},{title:qsTr("Minimal"),mode:FluNavigationViewType.Minimal},{title:qsTr("Auto"),mode:FluNavigationViewType.Auto}] delegate: FluRadioButton{ checked : viewmodel_settings.displayMode===modelData.mode text:modelData.title @@ -159,6 +159,16 @@ FluScrollablePage{ } } + ListModel{ + id:model_language + ListElement{ + name:"en" + } + ListElement{ + name:"zh" + } + } + FluArea{ Layout.fillWidth: true Layout.topMargin: 20 @@ -171,22 +181,21 @@ FluScrollablePage{ top: parent.top left: parent.left } - FluText{ - text:Lang.locale + text:qsTr("Language") font: FluTextStyle.BodyStrong Layout.bottomMargin: 4 } - Flow{ spacing: 5 Repeater{ - model: Lang.__localeList + model: TranslateHelper.languages delegate: FluRadioButton{ - checked: Lang.__locale === modelData + checked: TranslateHelper.current === modelData text:modelData clickListener:function(){ - Lang.__locale = modelData + TranslateHelper.current = modelData + dialog_restart.open() } } } diff --git a/example/qml/page/T_ShortcutPicker.qml b/example/qml/page/T_ShortcutPicker.qml index cc073715..25b9dc46 100644 --- a/example/qml/page/T_ShortcutPicker.qml +++ b/example/qml/page/T_ShortcutPicker.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"ShortcutPicker" + title: qsTr("ShortcutPicker") FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_Slider.qml b/example/qml/page/T_Slider.qml index b4fc9ad3..61ca77cd 100644 --- a/example/qml/page/T_Slider.qml +++ b/example/qml/page/T_Slider.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Slider" + title: qsTr("Slider") FluArea{ Layout.fillWidth: true diff --git a/example/qml/page/T_SplitLayout.qml b/example/qml/page/T_SplitLayout.qml index 745ec51e..95434212 100644 --- a/example/qml/page/T_SplitLayout.qml +++ b/example/qml/page/T_SplitLayout.qml @@ -7,7 +7,7 @@ import "../component" FluContentPage{ - title:"SplitLayout" + title: qsTr("SplitLayout") RowLayout{ id:layout_dropdown diff --git a/example/qml/page/T_StaggeredLayout.qml b/example/qml/page/T_StaggeredLayout.qml index dfc5139e..a9cdc86c 100644 --- a/example/qml/page/T_StaggeredLayout.qml +++ b/example/qml/page/T_StaggeredLayout.qml @@ -7,7 +7,7 @@ import "../component" FluContentPage{ - title:"StaggeredLayout" + title: qsTr("StaggeredLayout") property var colors : [FluColors.Yellow,FluColors.Orange,FluColors.Red,FluColors.Magenta,FluColors.Purple,FluColors.Blue,FluColors.Teal,FluColors.Green] diff --git a/example/qml/page/T_StatusLayout.qml b/example/qml/page/T_StatusLayout.qml index 05280d20..04895caf 100644 --- a/example/qml/page/T_StatusLayout.qml +++ b/example/qml/page/T_StatusLayout.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"StatusLayout" + title: qsTr("StatusLayout") FluArea{ id:layout_actions @@ -61,8 +61,12 @@ FluScrollablePage{ FluStatusLayout{ id:status_view anchors.fill: parent + loadingText: qsTr("Loading...") + emptyText: qsTr("Empty") + errorText: qsTr("The page went wrong...") + errorButtonText: qsTr("Reload") onErrorClicked:{ - showError("点击重新加载") + showError("Click Reload") } Rectangle { anchors.fill: parent diff --git a/example/qml/page/T_TabView.qml b/example/qml/page/T_TabView.qml index 2a7d1a82..c6271337 100644 --- a/example/qml/page/T_TabView.qml +++ b/example/qml/page/T_TabView.qml @@ -9,7 +9,7 @@ FluScrollablePage{ property var colors : [FluColors.Yellow,FluColors.Orange,FluColors.Red,FluColors.Magenta,FluColors.Purple,FluColors.Blue,FluColors.Teal,FluColors.Green] - title:"TabView" + title: qsTr("TabView") Component{ id:com_page @@ -20,7 +20,7 @@ FluScrollablePage{ } function newTab(){ - tab_view.appendTab("qrc:/example/res/image/favicon.ico","Document "+tab_view.count(),com_page,colors[Math.floor(Math.random() * 8)]) + tab_view.appendTab("qrc:/example/res/image/favicon.ico",qsTr("Document ")+tab_view.count(),com_page,colors[Math.floor(Math.random() * 8)]) } Component.onCompleted: { diff --git a/example/qml/page/T_TableView.qml b/example/qml/page/T_TableView.qml index c21a94b6..e6b06a08 100644 --- a/example/qml/page/T_TableView.qml +++ b/example/qml/page/T_TableView.qml @@ -8,7 +8,7 @@ import "../component" FluContentPage{ id:root - title:"TableView" + title: qsTr("TableView") signal checkBoxChanged property var dataSource : [] @@ -70,8 +70,8 @@ FluContentPage{ id:custom_update_dialog property var text property var onAccpetListener - title:"修改列名" - negativeText:"取消" + title: qsTr("Modify the column name") + negativeText: qsTr("Cancel") contentDelegate: Component{ Item{ implicitWidth: parent.width @@ -89,7 +89,7 @@ FluContentPage{ } } } - positiveText:"确定" + positiveText: qsTr("OK") onPositiveClicked:{ if(custom_update_dialog.onAccpetListener){ custom_update_dialog.onAccpetListener(custom_update_dialog.text) @@ -131,7 +131,7 @@ FluContentPage{ } FluButton{ - text:"搜索" + text: qsTr("Search") anchors{ bottom: parent.bottom right: parent.right @@ -174,7 +174,7 @@ FluContentPage{ id:com_column_filter_name Item{ FluText{ - text:"姓名" + text: qsTr("Name") anchors.centerIn: parent } FluIconButton{ @@ -208,14 +208,14 @@ FluContentPage{ RowLayout{ anchors.centerIn: parent FluButton{ - text:"删除" + text: qsTr("Delete") onClicked: { table_view.closeEditor() table_view.removeRow(row) } } FluFilledButton{ - text:"编辑" + text: qsTr("Edit") onClicked: { var obj = table_view.getRow(row) obj.name = "12345" @@ -234,7 +234,7 @@ FluContentPage{ RowLayout{ anchors.centerIn: parent FluText{ - text:"全选" + text: qsTr("Select All") Layout.alignment: Qt.AlignVCenter } FluCheckBox{ @@ -334,7 +334,7 @@ FluContentPage{ id:com_column_sort_age Item{ FluText{ - text:"年龄" + text: qsTr("Age") anchors.centerIn: parent } ColumnLayout{ @@ -409,14 +409,14 @@ FluContentPage{ } FluButton{ - text:"清空" + text: qsTr("Clear All") onClicked: { table_view.dataSource = [] } } FluButton{ - text:"删除选中" + text:"Delete Selection" onClicked: { var data = [] var rows = [] @@ -440,7 +440,7 @@ FluContentPage{ } FluButton{ - text:"添加一行数据" + text:"Add a row of Data" onClicked: { table_view.appendRow(genTestObject()) } @@ -465,17 +465,17 @@ FluContentPage{ { title: table_view.customItem(com_column_checbox,{checked:true}), dataIndex: 'checkbox', - width:80, - minimumWidth:80, - maximumWidth:80 + width:100, + minimumWidth:100, + maximumWidth:100 }, { - title: table_view.customItem(com_column_update_title,{title:'头像'}), + title: table_view.customItem(com_column_update_title,{title:qsTr("Avatar")}), dataIndex: 'avatar', width:100 }, { - title: table_view.customItem(com_column_filter_name,{title:'姓名'}), + title: table_view.customItem(com_column_filter_name,{title:qsTr("Name")}), dataIndex: 'name', readOnly:true }, @@ -488,28 +488,28 @@ FluContentPage{ maximumWidth:100 }, { - title: '住址', + title: qsTr("Address"), dataIndex: 'address', width:200, minimumWidth:100, maximumWidth:250 }, { - title: '别名', + title: qsTr("Nickname"), dataIndex: 'nickname', width:100, minimumWidth:80, maximumWidth:200 }, { - title: '长字符串', + title: qsTr("Long String"), dataIndex: 'longstring', width:200, minimumWidth:100, maximumWidth:300 }, { - title: '操作', + title: qsTr("Options"), dataIndex: 'action', width:160, minimumWidth:160, @@ -528,6 +528,8 @@ FluContentPage{ itemCount: 100000 pageButtonCount: 7 __itemPerPage: 1000 + previousText: qsTr("") onRequestPage: (page,count)=> { table_view.closeEditor() diff --git a/example/qml/page/T_Text.qml b/example/qml/page/T_Text.qml index f3cd8bc3..70c705ff 100644 --- a/example/qml/page/T_Text.qml +++ b/example/qml/page/T_Text.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Text" + title: qsTr("Text") FluArea{ Layout.fillWidth: true @@ -16,7 +16,7 @@ FluScrollablePage{ paddings: 10 FluCopyableText{ - text: "这是一个可以支持复制的Text" + text: qsTr("This is a text that can be copied") anchors.verticalCenter: parent.verticalCenter } @@ -25,7 +25,7 @@ FluScrollablePage{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluCopyableText{ - text:"这是一个可以支持复制的Text" + text: qsTr("This is a text that can be copied") }' } diff --git a/example/qml/page/T_TextBox.qml b/example/qml/page/T_TextBox.qml index d2dab198..6517b0ad 100644 --- a/example/qml/page/T_TextBox.qml +++ b/example/qml/page/T_TextBox.qml @@ -7,16 +7,13 @@ import "../component" import "../viewmodel" FluScrollablePage{ - title:"TextBox" + + title: qsTr("TextBox") TextBoxViewModel{ id:viewModel } - Component.onDestruction: { - console.debug("T_TextBox页面销毁了") - } - FluArea{ Layout.fillWidth: true height: 68 @@ -24,10 +21,10 @@ FluScrollablePage{ Layout.topMargin: 20 FluTextBox{ - placeholderText: "单行输入框" - disabled:text_box_switch.checked + placeholderText: qsTr("Single-line Input Box") + disabled: text_box_switch.checked cleanEnabled: true - text:viewModel.text1 + text: viewModel.text1 onTextChanged: { viewModel.text1 = text } @@ -38,19 +35,19 @@ FluScrollablePage{ } FluToggleSwitch{ - id:text_box_switch + id: text_box_switch anchors{ verticalCenter: parent.verticalCenter right: parent.right } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluTextBox{ - placeholderText:"单行输入框" + placeholderText: qsTr("Single-line Input Box") }' } @@ -61,7 +58,7 @@ FluScrollablePage{ Layout.topMargin: 20 FluPasswordBox{ - placeholderText: "请输入密码" + placeholderText: qsTr("Please enter your password") disabled:password_box_switch.checked anchors{ verticalCenter: parent.verticalCenter @@ -74,14 +71,14 @@ FluScrollablePage{ verticalCenter: parent.verticalCenter right: parent.right } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluPasswordBox{ - placeholderText:"请输入密码" + placeholderText: qsTr("Please enter your password") }' } @@ -93,13 +90,13 @@ FluScrollablePage{ Layout.topMargin: 20 FluMultilineTextBox{ - id:multiine_textbox - placeholderText: "多行输入框" + id: multiine_textbox + placeholderText: qsTr("Multi-line Input Box") text:viewModel.text2 onTextChanged: { viewModel.text2 = text } - disabled:text_box_multi_switch.checked + disabled: text_box_multi_switch.checked anchors{ verticalCenter: parent.verticalCenter left: parent.left @@ -112,14 +109,14 @@ FluScrollablePage{ verticalCenter: parent.verticalCenter right: parent.right } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluMultilineTextBox{ - placeholderText:"多行输入框" + placeholderText: qsTr("Multi-line Input Box") }' } @@ -129,9 +126,9 @@ FluScrollablePage{ paddings: 10 Layout.topMargin: 20 FluAutoSuggestBox{ - placeholderText: "AutoSuggestBox" - items:generateRandomNames(100) - disabled:text_box_suggest_switch.checked + placeholderText: qsTr("AutoSuggestBox") + items: generateRandomNames(100) + disabled: text_box_suggest_switch.checked anchors{ verticalCenter: parent.verticalCenter left: parent.left @@ -143,14 +140,14 @@ FluScrollablePage{ verticalCenter: parent.verticalCenter right: parent.right } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluAutoSuggestBox{ - placeholderText:"AutoSuggestBox" + placeholderText: qsTr("AutoSuggestBox") }' } @@ -167,12 +164,12 @@ FluScrollablePage{ } } FluToggleSwitch{ - id:spin_box_switch + id: spin_box_switch anchors{ verticalCenter: parent.verticalCenter right: parent.right } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ diff --git a/example/qml/page/T_Theme.qml b/example/qml/page/T_Theme.qml index 915b5d64..fa4f24f8 100644 --- a/example/qml/page/T_Theme.qml +++ b/example/qml/page/T_Theme.qml @@ -8,8 +8,8 @@ import "../component" FluScrollablePage{ property var colorData: [FluColors.Yellow,FluColors.Orange,FluColors.Red,FluColors.Magenta,FluColors.Purple,FluColors.Blue,FluColors.Teal,FluColors.Green] - id:root - title:"Theme" + id: root + title: qsTr("Theme") FluArea{ Layout.fillWidth: true @@ -23,7 +23,7 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"主题颜色" + text: qsTr("Theme colors") Layout.topMargin: 10 } RowLayout{ @@ -58,7 +58,7 @@ FluScrollablePage{ Layout.topMargin: 10 spacing: 10 FluText{ - text:"自定义主题颜色" + text: qsTr("Customize the Theme Color") anchors.verticalCenter: parent.verticalCenter } FluColorPicker{ @@ -84,7 +84,7 @@ FluScrollablePage{ } } FluText{ - text:"夜间模式" + text: qsTr("Dark Mode") Layout.topMargin: 20 } FluToggleSwitch{ @@ -99,7 +99,7 @@ FluScrollablePage{ } } FluText{ - text:"native文本渲染" + text: qsTr("Native Text") Layout.topMargin: 20 } FluToggleSwitch{ @@ -110,7 +110,7 @@ FluScrollablePage{ } } FluText{ - text:"开启动画效果" + text: qsTr("Open Animation") Layout.topMargin: 20 } FluToggleSwitch{ diff --git a/example/qml/page/T_TimePicker.qml b/example/qml/page/T_TimePicker.qml index dde538ab..6b86b937 100644 --- a/example/qml/page/T_TimePicker.qml +++ b/example/qml/page/T_TimePicker.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"TimePicker" + title: qsTr("TimePicker") launchMode: FluPageType.SingleInstance FluArea{ Layout.fillWidth: true @@ -23,11 +23,17 @@ FluScrollablePage{ } FluText{ - text:"hourFormat=FluTimePickerType.H" + text: qsTr("hourFormat=FluTimePickerType.H") } FluTimePicker{ current: new Date() + amText: qsTr("AM") + pmText: qsTr("PM") + hourText: qsTr("Hour") + minuteText: qsTr("Minute") + cancelText: qsTr("Cancel") + okText: qsTr("OK") onAccepted: { showSuccess(current.toLocaleTimeString(Qt.locale("de_DE"))) } @@ -57,11 +63,17 @@ FluScrollablePage{ } FluText{ - text:"hourFormat=FluTimePickerType.HH" + text: qsTr("hourFormat=FluTimePickerType.HH") } FluTimePicker{ hourFormat:FluTimePickerType.HH + amText: qsTr("AM") + pmText: qsTr("PM") + hourText: qsTr("Hour") + minuteText: qsTr("Minute") + cancelText: qsTr("Cancel") + okText: qsTr("OK") onAccepted: { showSuccess(current.toLocaleTimeString(Qt.locale("de_DE"))) } diff --git a/example/qml/page/T_Timeline.qml b/example/qml/page/T_Timeline.qml index 29ab41e8..1d60373a 100644 --- a/example/qml/page/T_Timeline.qml +++ b/example/qml/page/T_Timeline.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"Timeline" + title: qsTr("Timeline") Component{ id:com_dot @@ -23,7 +23,7 @@ FluScrollablePage{ Component{ id:com_lable FluText{ - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap font.bold: true horizontalAlignment: isRight ? Qt.AlignRight : Qt.AlignLeft text: modelData.lable @@ -41,7 +41,7 @@ FluScrollablePage{ Component{ id:com_text FluText{ - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap horizontalAlignment: isRight ? Qt.AlignRight : Qt.AlignLeft text: modelData.text font.bold: true @@ -108,18 +108,18 @@ FluScrollablePage{ spacing: 20 Layout.topMargin: 20 FluTextBox{ - id:text_box - text:"Technical testing 2015-09-01" + id: text_box + text: "Technical testing 2015-09-01" Layout.preferredWidth: 240 } FluFilledButton{ - text:"Append" + text: qsTr("Append") onClicked: { list_model.append({text:text_box.text}) } } FluFilledButton{ - text:"clear" + text: qsTr("clear") onClicked: { list_model.clear() } @@ -132,25 +132,25 @@ FluScrollablePage{ text:"mode:" } FluDropDownButton{ - id:btn_mode + id: btn_mode Layout.preferredWidth: 100 - text:"Alternate" + text: "Alternate" FluMenuItem{ - text:"Left" + text: "Left" onClicked: { btn_mode.text = text time_line.mode = FluTimelineType.Left } } FluMenuItem{ - text:"Right" + text: "Right" onClicked: { btn_mode.text = text time_line.mode = FluTimelineType.Right } } FluMenuItem{ - text:"Alternate" + text: "Alternate" onClicked: { btn_mode.text = text time_line.mode = FluTimelineType.Alternate @@ -160,12 +160,12 @@ FluScrollablePage{ } FluTimeline{ - id:time_line + id: time_line Layout.fillWidth: true Layout.topMargin: 20 Layout.bottomMargin: 20 mode: FluTimelineType.Alternate - model:list_model + model: list_model } } diff --git a/example/qml/page/T_ToggleSwitch.qml b/example/qml/page/T_ToggleSwitch.qml index 4daa69f8..464378a2 100644 --- a/example/qml/page/T_ToggleSwitch.qml +++ b/example/qml/page/T_ToggleSwitch.qml @@ -7,7 +7,7 @@ import "../component" FluScrollablePage{ - title:"ToggleSwitch" + title: qsTr("ToggleSwitch") FluArea{ Layout.fillWidth: true @@ -22,21 +22,21 @@ FluScrollablePage{ } FluToggleSwitch{ disabled: toggle_switch.checked - text:"Right" + text: qsTr("Right") } FluToggleSwitch{ disabled: toggle_switch.checked - text:"Left" + text: qsTr("Left") textRight: false } } FluToggleSwitch{ - id:toggle_switch + id: toggle_switch anchors{ right: parent.right verticalCenter: parent.verticalCenter } - text:"Disabled" + text: qsTr("Disabled") } } CodeExpander{ diff --git a/example/qml/page/T_Tooltip.qml b/example/qml/page/T_Tooltip.qml index ac64a5ee..e9799c8b 100644 --- a/example/qml/page/T_Tooltip.qml +++ b/example/qml/page/T_Tooltip.qml @@ -7,11 +7,11 @@ import "../component" FluScrollablePage{ - title:"Tooltip" + title: qsTr("Tooltip") FluText{ Layout.topMargin: 20 - text:"鼠标悬停不动,弹出Tooltip" + text: qsTr("Hover over Tultip and it pops up") } FluArea{ @@ -27,14 +27,14 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"FluIconButton的text属性自带Tooltip效果" + text: qsTr("Text properties of FluIconButton support the Tooltip pop-up window by default") } FluIconButton{ iconSource:FluentIcons.ChromeCloseContrast iconSize: 15 - text:"删除" + text: qsTr("Delete") onClicked:{ - showSuccess("点击IconButton") + showSuccess(qsTr("Click IconButton")) } } } @@ -45,9 +45,9 @@ FluScrollablePage{ code:'FluIconButton{ iconSource:FluentIcons.ChromeCloseContrast iconSize: 15 - text:"删除" + text: qsTr("Delete") onClicked:{ - showSuccess("点击IconButton") + showSuccess(qsTr("Click IconButton")) } } ' @@ -66,13 +66,13 @@ FluScrollablePage{ left: parent.left } FluText{ - text:"给一个Button添加Tooltip效果" + text: qsTr("Add a Tooltip pop-up to a Button") } FluButton{ id:button_1 - text:"删除" + text: qsTr("Delete") onClicked:{ - showSuccess("点击一个Button") + showSuccess(qsTr("Click Button")) } FluTooltip{ visible: button_1.hovered @@ -86,15 +86,15 @@ FluScrollablePage{ Layout.fillWidth: true Layout.topMargin: -1 code:'FluButton{ - id:button_1 - text:"删除" + id: button_1 + text: qsTr("Delete") FluTooltip{ visible: button_1.hovered text:button_1.text delay: 1000 } onClicked:{ - showSuccess("点击一个Button") + showSuccess(qsTr("Click Button")) } }' } diff --git a/example/qml/page/T_Tour.qml b/example/qml/page/T_Tour.qml index bf4c0460..87022fa7 100644 --- a/example/qml/page/T_Tour.qml +++ b/example/qml/page/T_Tour.qml @@ -11,10 +11,13 @@ FluScrollablePage{ FluTour{ id:tour + finishText: qsTr("Finish") + nextText: qsTr("Next") + previousText: qsTr("Previous") steps:[ - {title:"Upload File",description: "Put your files here.",target:()=>btn_upload}, - {title:"Save",description: "Save your changes.",target:()=>btn_save}, - {title:"Other Actions",description: "Click to see other actions.",target:()=>btn_more} + {title:qsTr("Upload File"),description: qsTr("Put your files here."),target:()=>btn_upload}, + {title:qsTr("Save"),description: qsTr("Save your changes."),target:()=>btn_save}, + {title:qsTr("Other Actions"),description: qsTr("Click to see other actions."),target:()=>btn_more} ] } @@ -29,7 +32,7 @@ FluScrollablePage{ top: parent.top topMargin: 14 } - text:"Begin Tour" + text: qsTr("Begin Tour") onClicked: { tour.open() } @@ -42,24 +45,24 @@ FluScrollablePage{ topMargin: 60 } FluButton{ - id:btn_upload - text:"Upload" + id: btn_upload + text: qsTr("Upload") onClicked: { - showInfo("Upload") + showInfo(qsTr("Upload")) } } FluFilledButton{ - id:btn_save - text:"Save" + id: btn_save + text: qsTr("Save") onClicked: { - showInfo("Save") + showInfo(qsTr("Save")) } } FluIconButton{ - id:btn_more + id: btn_more iconSource: FluentIcons.More onClicked: { - showInfo("More") + showInfo(qsTr("More")) } } } diff --git a/example/qml/page/T_TreeView.qml b/example/qml/page/T_TreeView.qml index 01a4db54..e22db3ce 100644 --- a/example/qml/page/T_TreeView.qml +++ b/example/qml/page/T_TreeView.qml @@ -7,7 +7,7 @@ import "../component" FluContentPage { - title:"TreeView" + title: qsTr("TreeView") function treeData(){ const dig = (path = '0', level = 4) => { @@ -29,7 +29,7 @@ FluContentPage { } Column{ - id:layout_column + id: layout_column spacing: 12 width: 300 anchors{ @@ -42,21 +42,21 @@ FluContentPage { } FluText{ - text:"共计%1条数据,当前显示的%2条数据".arg(tree_view.count()).arg(tree_view.visibleCount()) + text: qsTr("Total %1 data, %2 data currently displayed").arg(tree_view.count()).arg(tree_view.visibleCount()) } FluText{ - text:"共计选中%1条数据".arg(tree_view.selectionModel().length) + text: qsTr("A total of %1 data items are selected").arg(tree_view.selectionModel().length) } RowLayout{ spacing: 10 FluText{ - text:"cellHeight:" + text: "cellHeight:" Layout.alignment: Qt.AlignVCenter } FluSlider{ - id:slider_cell_height + id: slider_cell_height value: 30 from: 30 to:100 @@ -65,39 +65,39 @@ FluContentPage { RowLayout{ spacing: 10 FluText{ - text:"depthPadding:" + text: "depthPadding:" Layout.alignment: Qt.AlignVCenter } FluSlider{ - id:slider_depth_padding + id: slider_depth_padding value: 30 from: 30 to:100 } } FluToggleSwitch{ - id:switch_showline + id: switch_showline text:"showLine" checked: false } FluToggleSwitch{ - id:switch_draggable + id: switch_draggable text:"draggable" checked: false } FluToggleSwitch{ - id:switch_checkable + id: switch_checkable text:"checkable" checked: false } FluButton{ - text:"all expand" + text: "all expand" onClicked: { tree_view.allExpand() } } FluButton{ - text:"all collapse" + text: "all collapse" onClicked: { tree_view.allCollapse() } diff --git a/example/qml/page/T_Typography.qml b/example/qml/page/T_Typography.qml index 854eab56..8ff9f270 100644 --- a/example/qml/page/T_Typography.qml +++ b/example/qml/page/T_Typography.qml @@ -7,7 +7,7 @@ FluContentPage { property real textScale: 1 - title: "Typography" + title: qsTr("Typography") rightPadding: 10 FluArea{ diff --git a/example/qml/page/T_Watermark.qml b/example/qml/page/T_Watermark.qml index daea85eb..8c5b8a37 100644 --- a/example/qml/page/T_Watermark.qml +++ b/example/qml/page/T_Watermark.qml @@ -7,7 +7,7 @@ import "../component" FluContentPage{ - title:"Watermark" + title: qsTr("Watermark") FluArea{ anchors.fill: parent @@ -23,12 +23,12 @@ FluContentPage{ spacing: 10 Layout.topMargin: 14 FluText{ - text:"text:" + text: "text:" Layout.alignment: Qt.AlignVCenter } FluTextBox{ - id:text_box - text:"会磨刀的小猪" + id: text_box + text: "会磨刀的小猪" Layout.preferredWidth: 240 } } @@ -36,11 +36,11 @@ FluContentPage{ RowLayout{ spacing: 10 FluText{ - text:"textSize:" + text: "textSize:" Layout.alignment: Qt.AlignVCenter } FluSlider{ - id:slider_text_size + id: slider_text_size value: 20 from: 13 to:50 @@ -49,7 +49,7 @@ FluContentPage{ RowLayout{ spacing: 10 FluText{ - text:"gapX:" + text: "gapX:" Layout.alignment: Qt.AlignVCenter } FluSlider{ @@ -60,18 +60,18 @@ FluContentPage{ RowLayout{ spacing: 10 FluText{ - text:"gapY:" + text: "gapY:" Layout.alignment: Qt.AlignVCenter } FluSlider{ - id:slider_gap_y + id: slider_gap_y value: 100 } } RowLayout{ spacing: 10 FluText{ - text:"offsetX:" + text: "offsetX:" Layout.alignment: Qt.AlignVCenter } FluSlider{ @@ -82,22 +82,22 @@ FluContentPage{ RowLayout{ spacing: 10 FluText{ - text:"offsetY:" + text: "offsetY:" Layout.alignment: Qt.AlignVCenter } FluSlider{ - id:slider_offset_y + id: slider_offset_y value: 50 } } RowLayout{ spacing: 10 FluText{ - text:"rotate:" + text: "rotate:" Layout.alignment: Qt.AlignVCenter } FluSlider{ - id:slider_rotate + id: slider_rotate value: 22 from: 0 to:360 @@ -106,18 +106,18 @@ FluContentPage{ RowLayout{ spacing: 10 FluText{ - text:"textColor:" + text: "textColor:" Layout.alignment: Qt.AlignVCenter } FluColorPicker{ - id:color_picker + id: color_picker current: Qt.rgba(0,0,0,0.1) } } } FluWatermark{ - id:water_mark + id: water_mark anchors.fill: parent text:text_box.text textColor: color_picker.current diff --git a/example/qml/window/CrashWindow.qml b/example/qml/window/CrashWindow.qml index 87ee23c1..f012f0f3 100644 --- a/example/qml/window/CrashWindow.qml +++ b/example/qml/window/CrashWindow.qml @@ -8,7 +8,7 @@ import "../component" FluWindow { id:window - title:"友情提示" + title: qsTr("Friendly Reminder") width: 300 height: 400 fixSize: true @@ -37,11 +37,15 @@ FluWindow { FluText{ id:text_info anchors{ - horizontalCenter: parent.horizontalCenter top: parent.top topMargin: 240 + left: parent.left + right: parent.right + leftMargin: 10 + rightMargin: 10 } - text:"发生意外错误\n给您带来的不便,我们深表歉意" + wrapMode: Text.WordWrap + text: qsTr("We apologize for the inconvenience caused by an unexpected error") horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } @@ -53,7 +57,7 @@ FluWindow { bottomMargin: 20 } FluButton{ - text:"日志上报" + text: qsTr("Report Logs") onClicked: { FluTools.showFileInFolder(crashFilePath) } @@ -63,7 +67,7 @@ FluWindow { height: 1 } FluFilledButton{ - text:"重启程序" + text: qsTr("Restart Program") onClicked: { FluApp.exit(931) } diff --git a/example/qml/window/FluentInitalizrWindow.qml b/example/qml/window/FluentInitalizrWindow.qml new file mode 100644 index 00000000..a3c5c527 --- /dev/null +++ b/example/qml/window/FluentInitalizrWindow.qml @@ -0,0 +1,115 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 +import FluentUI 1.0 +import Qt.labs.platform 1.1 +import "../component" + +FluWindow { + + id:window + title:qsTr("FluentUI Initalizr") + width: 600 + height: 400 + fixSize: true + // modality: Qt.ApplicationModal + launchMode: FluWindowType.SingleTask + showStayTop: false + + Connections{ + target: InitalizrHelper + function onError(message){ + showError(message) + } + function onSuccess(){ + showSuccess("创建成功") + } + } + + FluText{ + id:text_title + text:qsTr("FluentUI Initalizr") + font: FluTextStyle.Title + anchors{ + left: parent.left + top: parent.top + leftMargin: 20 + topMargin: 20 + } + } + + Column{ + spacing: 14 + anchors{ + left: parent.left + top: text_title.bottom + leftMargin: 20 + topMargin: 20 + } + FluTextBox{ + id:text_box_name + width: 180 + placeholderText: qsTr("Name") + focus: true + } + Row{ + spacing: 8 + FluTextBox{ + id:text_box_path + width: 300 + placeholderText: qsTr("Create In") + anchors.verticalCenter: parent.verticalCenter + Component.onCompleted: { + text = FluTools.toLocalPath(StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0]) + } + } + FluButton{ + text:qsTr("Browse") + anchors.verticalCenter: parent.verticalCenter + onClicked: { + folder_dialog.open() + } + } + } + } + + FolderDialog{ + id:folder_dialog + folder: StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0] + onAccepted: { + text_box_path.text = FluTools.toLocalPath(currentFolder) + } + } + + Rectangle{ + id:layout_actions + width: parent.width + height: 60 + anchors.bottom: parent.bottom + color: FluTheme.backgroundColor + Row{ + height: parent.height + spacing: 20 + anchors{ + right: parent.right + rightMargin: 20 + } + FluButton{ + text:qsTr("Cancel") + width: 120 + anchors.verticalCenter: parent.verticalCenter + onClicked: { + window.close() + } + } + FluFilledButton{ + text:qsTr("Create") + width: 120 + anchors.verticalCenter: parent.verticalCenter + onClicked: { + InitalizrHelper.generate(text_box_name.text,text_box_path.text) + } + } + } + } +} diff --git a/example/qml/window/HotloadWindow.qml b/example/qml/window/HotloadWindow.qml index 19ac9184..2031b0e1 100644 --- a/example/qml/window/HotloadWindow.qml +++ b/example/qml/window/HotloadWindow.qml @@ -8,7 +8,7 @@ import "../component" FluWindow { id:window - title:"热加载" + title: qsTr("Hot Loader") width: 800 height: 600 minimumWidth: 520 @@ -32,7 +32,7 @@ FluWindow { text:loader.itemLodaer().sourceComponent.errorString() color:"red" anchors.fill: parent - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap padding: 20 verticalAlignment: Qt.AlignVCenter horizontalAlignment: Qt.AlignHCenter @@ -40,7 +40,7 @@ FluWindow { } } FluText{ - text:"拖入qml文件" + text: qsTr("Drag in a qml file") font.pixelSize: 26 anchors.centerIn: parent visible: !loader.itemLodaer().item && loader.statusMode === FluStatusLayoutType.Success diff --git a/example/qml/window/LoginWindow.qml b/example/qml/window/LoginWindow.qml index 7e6446fa..abdcd51b 100644 --- a/example/qml/window/LoginWindow.qml +++ b/example/qml/window/LoginWindow.qml @@ -6,8 +6,8 @@ import "../component" FluWindow { - id:window - title:"登录" + id: window + title: qsTr("Login") width: 400 height: 400 fixSize: true @@ -26,38 +26,34 @@ FluWindow { } FluAutoSuggestBox{ - id:textbox_uesrname + id: textbox_uesrname items:[{title:"Admin"},{title:"User"}] - placeholderText: "请输入账号" + placeholderText: qsTr("Please enter the account") Layout.preferredWidth: 260 Layout.alignment: Qt.AlignHCenter } FluTextBox{ - id:textbox_password + id: textbox_password Layout.topMargin: 20 Layout.preferredWidth: 260 - placeholderText: "请输入密码" + placeholderText: qsTr("Please enter your password") echoMode:TextInput.Password Layout.alignment: Qt.AlignHCenter } FluFilledButton{ - text:"登录" + text: qsTr("Login") Layout.alignment: Qt.AlignHCenter Layout.topMargin: 20 onClicked:{ if(textbox_password.text === ""){ - showError("请随便输入一个密码") + showError(qsTr("Please feel free to enter a password")) return } onResult({password:textbox_password.text}) window.close() } } - } - - - } diff --git a/example/qml/window/MainWindow.qml b/example/qml/window/MainWindow.qml index 350d5ed3..96c83c2f 100644 --- a/example/qml/window/MainWindow.qml +++ b/example/qml/window/MainWindow.qml @@ -21,7 +21,7 @@ FluWindow { fitsAppBarWindows: true appBar: FluAppBar { height: 30 - darkText: Lang.dark_mode + darkText: qsTr("Dark Mode") showDark: true darkClickListener:(button)=>handleDarkChanged(button) closeClickListener: ()=>{dialog_close.open()} @@ -85,7 +85,7 @@ FluWindow { } Timer{ - id:timer_window_hide_delay + id: timer_window_hide_delay interval: 150 onTriggered: { window.hide() @@ -93,29 +93,29 @@ FluWindow { } FluContentDialog{ - id:dialog_close - title:"退出" - message:"确定要退出程序吗?" - negativeText:"最小化" + id: dialog_close + title: qsTr("Quit") + message: qsTr("Are you sure you want to exit the program?") + negativeText: qsTr("Minimize") buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.NeutralButton | FluContentDialogType.PositiveButton onNegativeClicked: { - system_tray.showMessage("友情提示","FluentUI已隐藏至托盘,点击托盘可再次激活窗口"); + system_tray.showMessage(qsTr("Friendly Reminder"),qsTr("FluentUI is hidden from the tray, click on the tray to activate the window again")); timer_window_hide_delay.restart() } - positiveText:"退出" - neutralText:"取消" + positiveText: qsTr("Quit") + neutralText: qsTr("Cancel") onPositiveClicked:{ FluApp.exit(0) } } Component{ - id:nav_item_right_menu + id: nav_item_right_menu FluMenu{ - id:menu + id: menu width: 130 FluMenuItem{ - text: "在独立窗口打开" + text: qsTr("Open in Separate Window") visible: true onClicked: { FluApp.navigate("/pageWindow",{title:modelData.title,url:modelData.url}) @@ -212,7 +212,7 @@ FluWindow { title:"FluentUI" onLogoClicked:{ clickCount += 1 - showSuccess("点击%1次".arg(clickCount)) + showSuccess("%1:%2".arg(qsTr("Click Time")).arg(clickCount)) if(clickCount === 5){ loader.reload() flipable.flipped = true @@ -222,7 +222,7 @@ FluWindow { autoSuggestBox:FluAutoSuggestBox{ iconSource: FluentIcons.Search items: ItemsOriginal.getSearchData() - placeholderText: Lang.search + placeholderText: qsTr("Search") onItemClicked: (data)=>{ ItemsOriginal.startPageByItem(data) @@ -312,13 +312,16 @@ FluWindow { } FluTour{ - id:tour + id: tour + finishText: qsTr("Finish") + nextText: qsTr("Next") + previousText: qsTr("Previous") steps:{ var data = [] if(!window.useSystemAppBar){ - data.push({title:"夜间模式",description: "这里可以切换夜间模式.",target:()=>appBar.buttonDark}) + data.push({title:qsTr("Dark Mode"),description: qsTr("Here you can switch to night mode."),target:()=>appBar.buttonDark}) } - data.push({title:"隐藏彩蛋",description: "多点几下试试!!",target:()=>nav_view.imageLogo}) + data.push({title:qsTr("Hide Easter eggs"),description: qsTr("Try a few more clicks!!"),target:()=>nav_view.imageLogo}) return data } } @@ -328,7 +331,7 @@ FluWindow { } FluText{ - text:"fps %1".arg(fps_item.fps) + text: "fps %1".arg(fps_item.fps) opacity: 0.3 anchors{ bottom: parent.bottom @@ -341,12 +344,12 @@ FluWindow { FluContentDialog{ property string newVerson property string body - id:dialog_update - title:"升级提示" - message:"FluentUI目前最新版本 "+ newVerson +" -- 当前应用版本 "+AppInfo.version+" \n现在是否去下载新版本?\n\n更新内容:\n"+body + id: dialog_update + title: qsTr("Upgrade Tips") + message:qsTr("FluentUI is currently up to date ")+ newVerson +qsTr(" -- The current app version") +AppInfo.version+qsTr(" \nNow go and download the new version?\n\nUpdated content: \n")+body buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton - negativeText: "取消" - positiveText:"确定" + negativeText: qsTr("Cancel") + positiveText: qsTr("OK") onPositiveClicked:{ Qt.openUrlExternally("https://github.com/zhuzichu520/FluentUI/releases/latest") } @@ -373,14 +376,14 @@ FluWindow { dialog_update.open() }else{ if(!silent){ - showInfo("当前版本已经是最新版") + showInfo(qsTr("The current version is already the latest")) } } } onError: (status,errorString)=>{ if(!silent){ - showError("网络异常!") + showError(qsTr("The network is abnormal")) } console.debug(status+";"+errorString) } diff --git a/example/qml/window/SingleInstanceWindow.qml b/example/qml/window/SingleInstanceWindow.qml index baa99c09..0c1b7865 100644 --- a/example/qml/window/SingleInstanceWindow.qml +++ b/example/qml/window/SingleInstanceWindow.qml @@ -6,8 +6,8 @@ import "../component" FluWindow { - id:window - title:"SingleInstance" + id: window + title: qsTr("SingleInstance") width: 500 height: 600 fixSize: true @@ -22,7 +22,7 @@ FluWindow { } FluText{ - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap anchors{ left: parent.left right: parent.right @@ -30,6 +30,6 @@ FluWindow { rightMargin: 20 verticalCenter: parent.verticalCenter } - text:"我是一个SingleInstance模式的窗口,如果我存在,我会销毁之前的窗口,并创建一个新窗口" + text: qsTr("I'm a SingleInstance window, and if I exist, I'll destroy the previous window and create a new one") } } diff --git a/example/qml/window/SingleTaskWindow.qml b/example/qml/window/SingleTaskWindow.qml index 3f03a5ff..4dd7936e 100644 --- a/example/qml/window/SingleTaskWindow.qml +++ b/example/qml/window/SingleTaskWindow.qml @@ -6,8 +6,8 @@ import "../component" FluWindow { - id:window - title:"SingleTask" + id: window + title: qsTr("SingleTask") width: 500 height: 600 fixSize: true @@ -15,7 +15,7 @@ FluWindow { FluText{ anchors.centerIn: parent - text:"我是一个SingleTask模式的窗口,如果我存在,我就激活窗口" + text: qsTr("I'm a SingleTask mode window, and if I exist, I activate the window") } } diff --git a/example/qml/window/StandardWindow.qml b/example/qml/window/StandardWindow.qml index fc5b9ff1..c65d37f2 100644 --- a/example/qml/window/StandardWindow.qml +++ b/example/qml/window/StandardWindow.qml @@ -37,7 +37,7 @@ FluWindow { FluText{ anchors.centerIn: parent - text:"我是一个Standard模式的窗口,每次我都会创建一个新的窗口" + text: qsTr("I'm a Standard mode window, and every time I create a new window") } } diff --git a/example/src/helper/InitalizrHelper.cpp b/example/src/helper/InitalizrHelper.cpp new file mode 100644 index 00000000..a22cdb25 --- /dev/null +++ b/example/src/helper/InitalizrHelper.cpp @@ -0,0 +1,28 @@ +#include "InitalizrHelper.h" + +#include + +InitalizrHelper::InitalizrHelper(QObject *parent) : QObject(parent) +{ + +} + +InitalizrHelper::~InitalizrHelper() = default; + + +void InitalizrHelper::generate(const QString& name,const QString& path){ + if(name.isEmpty()){ + error(tr("The name cannot be empty")); + return; + } + if(path.isEmpty()){ + error(tr("The creation path cannot be empty")); + return; + } + QDir projectDir(path); + if(!projectDir.exists()){ + error(tr("The path does not exist")); + return; + } + return success(); +} diff --git a/example/src/helper/InitalizrHelper.h b/example/src/helper/InitalizrHelper.h new file mode 100644 index 00000000..db19d83f --- /dev/null +++ b/example/src/helper/InitalizrHelper.h @@ -0,0 +1,21 @@ +#ifndef INITALIZRHELPER_H +#define INITALIZRHELPER_H + +#include +#include +#include "src/singleton.h" + +class InitalizrHelper : public QObject +{ + Q_OBJECT +private: + explicit InitalizrHelper(QObject* parent = nullptr); +public: + SINGLETON(InitalizrHelper) + ~InitalizrHelper() override; + Q_INVOKABLE void generate(const QString& name,const QString& path); + Q_SIGNAL void error(const QString& message); + Q_SIGNAL void success(); +}; + +#endif // INITALIZRHELPER_H diff --git a/example/src/helper/Log.cpp b/example/src/helper/Log.cpp index c465cd2b..688db453 100644 --- a/example/src/helper/Log.cpp +++ b/example/src/helper/Log.cpp @@ -168,7 +168,7 @@ static inline void messageHandler(const QtMsgType type, const QMessageLogContext } } -void Log::setup(const QString &app,int level) +void Log::setup(char *argv[],const QString &app,int level) { Q_ASSERT(!app.isEmpty()); if (app.isEmpty()) { @@ -179,6 +179,7 @@ void Log::setup(const QString &app,int level) if (once) { return; } + QString applicationPath = QString::fromStdString(argv[0]); once = true; g_app = app; const QString logFileName = QString("%1_%2.log").arg(g_app,QDateTime::currentDateTime().toString("yyyyMMdd")); @@ -192,6 +193,7 @@ void Log::setup(const QString &app,int level) qInfo()<<"==================================================="; qInfo()<<"[AppName]"< +#include + +#include "SettingsHelper.h" + +TranslateHelper::TranslateHelper(QObject *parent) : QObject(parent) +{ + _languages<<"en"; + _languages<<"zh"; + _current = SettingsHelper::getInstance()->getLanguage(); +} + +TranslateHelper::~TranslateHelper() = default; + +void TranslateHelper::init(QQmlEngine* engine){ + _engine = engine; + _translator = new QTranslator(this); + qApp->installTranslator(_translator); + QString translatorPath = QGuiApplication::applicationDirPath()+"/i18n"; +#ifdef Q_OS_MACX + translatorPath.append("/../Resources/"); +#endif + _translator->load(QString::fromStdString("%1/example_%2.qm").arg(translatorPath,_current)); + _engine->retranslate(); +} diff --git a/example/src/helper/TranslateHelper.h b/example/src/helper/TranslateHelper.h new file mode 100644 index 00000000..93e1a4cc --- /dev/null +++ b/example/src/helper/TranslateHelper.h @@ -0,0 +1,26 @@ +#ifndef TRANSLATEHELPER_H +#define TRANSLATEHELPER_H + +#include +#include +#include +#include "src/singleton.h" +#include "src/stdafx.h" + +class TranslateHelper : public QObject +{ + Q_OBJECT + Q_PROPERTY_AUTO(QString,current) + Q_PROPERTY_READONLY_AUTO(QStringList,languages) +private: + explicit TranslateHelper(QObject* parent = nullptr); +public: + SINGLETON(TranslateHelper) + ~TranslateHelper() override; + void init(QQmlEngine* engine); +private: + QQmlEngine* _engine = nullptr; + QTranslator* _translator = nullptr; +}; + +#endif // TRANSLATEHELPER_H diff --git a/example/src/main.cpp b/example/src/main.cpp index bbcb34cc..2a24e946 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -15,6 +15,8 @@ #include "src/component/FileWatcher.h" #include "src/component/FpsItem.h" #include "src/helper/SettingsHelper.h" +#include "src/helper/InitalizrHelper.h" +#include "src/helper/TranslateHelper.h" #ifdef FLUENTUI_BUILD_STATIC_LIB #if (QT_VERSION > QT_VERSION_CHECK(6, 2, 0)) @@ -50,7 +52,7 @@ int main(int argc, char *argv[]) QGuiApplication::setApplicationDisplayName("FluentUI Exmaple"); QGuiApplication::setApplicationVersion(APPLICATION_VERSION); SettingsHelper::getInstance()->init(argv); - Log::setup("example"); + Log::setup(argv,"example"); #if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL); #endif @@ -63,8 +65,11 @@ int main(int argc, char *argv[]) #endif QGuiApplication app(argc, argv); QQmlApplicationEngine engine; + TranslateHelper::getInstance()->init(&engine); engine.rootContext()->setContextProperty("AppInfo",AppInfo::getInstance()); engine.rootContext()->setContextProperty("SettingsHelper",SettingsHelper::getInstance()); + engine.rootContext()->setContextProperty("InitalizrHelper",InitalizrHelper::getInstance()); + engine.rootContext()->setContextProperty("TranslateHelper",TranslateHelper::getInstance()); #ifdef FLUENTUI_BUILD_STATIC_LIB FluentUI::getInstance()->registerTypes(&engine); #endif diff --git a/.cmake/QmlPlugin.cmake b/src/.cmake/QmlPlugin.cmake similarity index 85% rename from .cmake/QmlPlugin.cmake rename to src/.cmake/QmlPlugin.cmake index 54cdbdfe..b7193718 100644 --- a/.cmake/QmlPlugin.cmake +++ b/src/.cmake/QmlPlugin.cmake @@ -1,7 +1,6 @@ include(CMakeParseArguments) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core) - function(FindQmlPluginDump) get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION) execute_process( @@ -10,7 +9,6 @@ function(FindQmlPluginDump) OUTPUT_STRIP_TRAILING_WHITESPACE ) endfunction() - function(FindQtInstallQml) execute_process( COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_QML @@ -19,7 +17,6 @@ function(FindQtInstallQml) ) set(QT_INSTALL_QML ${PROC_RESULT} PARENT_SCOPE) endfunction() - function(add_qmlplugin TARGET) set(options NO_AUTORCC NO_AUTOMOC) set(oneValueArgs URI VERSION BINARY_DIR QMLDIR LIBTYPE) @@ -30,13 +27,12 @@ function(add_qmlplugin TARGET) return() endif() if(NOT QMLPLUGIN_BINARY_DIR) - set(QMLPLUGIN_BINARY_DIR ${CMAKE_BINARY_DIR}/${QMLPLUGIN_URI}) + set(QMLPLUGIN_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${QMLPLUGIN_URI}) endif() add_library(${TARGET} ${QMLPLUGIN_LIBTYPE} ${QMLPLUGIN_SOURCES} ) set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib) - if(QMLPLUGIN_NO_AUTORCC) set_target_properties(${TARGET} PROPERTIES AUTOMOC OFF) else() @@ -47,25 +43,24 @@ if(QMLPLUGIN_NO_AUTOMOC) else() set_target_properties(${TARGET} PROPERTIES AUTOMOC ON) endif() - if (${QMLPLUGIN_LIBTYPE} MATCHES "SHARED") FindQmlPluginDump() FindQtInstallQml() if(QMLPLUGIN_BINARY_DIR) set(MAKE_QMLPLUGINDIR_COMMAND ${CMAKE_COMMAND} -E make_directory ${QMLPLUGIN_BINARY_DIR}) endif() - set(COPY_QMLDIR_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/qmldir $/${QMLPLUGIN_URI}/qmldir) - set(INSTALL_QMLDIR_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/qmldir ${QMLPLUGIN_BINARY_DIR}/qmldir) - set(COPY_QMLTYPES_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/plugins.qmltypes $/${QMLPLUGIN_URI}/plugins.qmltypes) - set(INSTALL_QMLTYPES_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/plugins.qmltypes ${QMLPLUGIN_BINARY_DIR}/plugins.qmltypes) + set(COPY_QMLDIR_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/qmldir $/${QMLPLUGIN_URI}/qmldir) + set(INSTALL_QMLDIR_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/qmldir ${QMLPLUGIN_BINARY_DIR}/qmldir) + set(COPY_QMLTYPES_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/plugins.qmltypes $/${QMLPLUGIN_URI}/plugins.qmltypes) + set(INSTALL_QMLTYPES_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Qt5/${QMLPLUGIN_QMLDIR}/plugins.qmltypes ${QMLPLUGIN_BINARY_DIR}/plugins.qmltypes) set(COPY_LIBRARY_COMMAND ${CMAKE_COMMAND} -E copy $/$ $/${QMLPLUGIN_URI}) set(INSTALL_LIBRARY_COMMAND ${CMAKE_COMMAND} -E copy $/$ ${QMLPLUGIN_BINARY_DIR}) if(QMLPLUGIN_QMLDIR) - set(COPY_QMLFILES_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR} $/${QMLPLUGIN_URI}) + set(COPY_QMLFILES_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/Qt5/${QMLPLUGIN_QMLDIR} $/${QMLPLUGIN_URI}) else() - set(COPY_QMLFILES_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/${QMLPLUGIN_QMLFILES} $/${QMLPLUGIN_URI}) + set(COPY_QMLFILES_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${QMLPLUGIN_QMLFILES} $/${QMLPLUGIN_URI}) endif() - set(INSTALL_QMLFILES_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_LIST_DIR}/Qt5/${QMLPLUGIN_QMLDIR} ${QMLPLUGIN_BINARY_DIR}) + set(INSTALL_QMLFILES_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/Qt5/${QMLPLUGIN_QMLDIR} ${QMLPLUGIN_BINARY_DIR}) if(QMLPLUGIN_BINARY_DIR) add_custom_command( TARGET ${TARGET} @@ -82,7 +77,6 @@ else() COMMENT "Copying qmldir to binary directory" ) endif() - if(QMLPLUGIN_BINARY_DIR) add_custom_command( TARGET ${TARGET} @@ -99,14 +93,12 @@ else() COMMENT "Copying qmltypes to binary directory" ) endif() - add_custom_command( TARGET ${TARGET} POST_BUILD COMMAND ${COPY_LIBRARY_COMMAND} COMMENT "Copying Lib to binary plugin directory" ) - if(QMLPLUGIN_QMLFILES) add_custom_command( TARGET ${TARGET} @@ -115,16 +107,13 @@ if(QMLPLUGIN_QMLFILES) COMMENT "Copying QML files to binary directory" ) endif() - add_custom_command( TARGET ${TARGET} POST_BUILD COMMAND ${GENERATE_QMLTYPES_COMMAND} COMMENT "Generating plugin.qmltypes" ) - string(REPLACE "." "/" QMLPLUGIN_INSTALL_URI ${QMLPLUGIN_URI}) - add_custom_command( TARGET ${TARGET} POST_BUILD diff --git a/.cmake/version_dll.rc.in b/src/.cmake/version_dll.rc.in similarity index 100% rename from .cmake/version_dll.rc.in rename to src/.cmake/version_dll.rc.in diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7a85bf03..0c0f9ff5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -6,6 +6,8 @@ else() project(fluentuiplugin VERSION 1.0) endif() +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/.cmake/) + #配置通用编译 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -81,9 +83,9 @@ endif() #如果是Windows平台,则生成rc文件 set(FLUENTUI_VERSION_RC_PATH "") if(WIN32) - set(FLUENTUI_VERSION_RC_PATH ${CMAKE_BINARY_DIR}/version_${PROJECT_NAME}.rc) + set(FLUENTUI_VERSION_RC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/version_${PROJECT_NAME}.rc) configure_file( - ${FLUENTUI_DIRECTORY}/.cmake/version_dll.rc.in + ${CMAKE_CURRENT_SOURCE_DIR}/.cmake/version_dll.rc.in ${FLUENTUI_VERSION_RC_PATH} ) endif() @@ -91,7 +93,7 @@ endif() if(QT_VERSION VERSION_GREATER_EQUAL "6.2") #如果是Qt6.2版本以上,则使用qt_add_library,qt_add_qml_module函数添加资源文件 if(FLUENTUI_BUILD_STATIC_LIB) - set(FLUENTUI_QML_PLUGIN_DIRECTORY ${CMAKE_BINARY_DIR}/FluentUI) + set(FLUENTUI_QML_PLUGIN_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/FluentUI) endif() qt_add_library(${PROJECT_NAME} ${LIB_TYPE}) qt_add_qml_module(${PROJECT_NAME} diff --git a/src/FluTheme.cpp b/src/FluTheme.cpp index e967dc90..6283d5c3 100644 --- a/src/FluTheme.cpp +++ b/src/FluTheme.cpp @@ -29,7 +29,7 @@ FluTheme::FluTheme(QObject *parent):QObject{parent}{ void FluTheme::refreshColors(){ auto isDark = dark(); primaryColor(isDark ? _accentColor->lighter() : _accentColor->dark()); - backgroundColor(isDark ? QColor(0,0,0,255) : QColor(1,1,1,255)); + backgroundColor(isDark ? QColor(0,0,0,255) : QColor(255,255,255,255)); dividerColor(isDark ? QColor(80,80,80,255) : QColor(210,210,210,255)); windowBackgroundColor(isDark ? QColor(32,32,32,255) : QColor(237,237,237,255)); windowActiveBackgroundColor(isDark ? QColor(26,26,26,255) : QColor(243,243,243,255)); diff --git a/src/Qt5/imports/FluentUI/Controls/FluContentDialog.qml b/src/Qt5/imports/FluentUI/Controls/FluContentDialog.qml index 1a49ddad..8ca8a3ba 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluContentDialog.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluContentDialog.qml @@ -41,7 +41,7 @@ FluPopup { FluText{ id:text_message font: FluTextStyle.Body - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap text:message width: parent.width topPadding: 4 @@ -67,7 +67,7 @@ FluPopup { topPadding: 20 leftPadding: 20 rightPadding: 20 - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap } FluLoader{ sourceComponent: com_message diff --git a/src/Qt5/imports/FluentUI/Controls/FluDatePicker.qml b/src/Qt5/imports/FluentUI/Controls/FluDatePicker.qml index eaa261f7..ecf94810 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluDatePicker.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluDatePicker.qml @@ -10,6 +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: "确定" signal accepted() id:control color: { @@ -26,9 +31,9 @@ Rectangle { Component.onCompleted: { if(current){ const now = current; - var year = text_year.text === "年"? now.getFullYear() : Number(text_year.text); - var month = text_month.text === "月"? now.getMonth() + 1 : Number(text_month.text); - var day = text_day.text === "日" ? now.getDate() : Number(text_day.text); + var year = text_year.text === control.yearText? now.getFullYear() : Number(text_year.text); + var month = text_month.text === control.monthText? now.getMonth() + 1 : Number(text_month.text); + var day = text_day.text === control.dayText ? now.getDate() : Number(text_day.text); text_year.text = year text_month.text = month text_day.text = day @@ -75,7 +80,7 @@ Rectangle { visible: showYear verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text:"年" + text:control.yearText } FluText{ id:text_month @@ -87,7 +92,7 @@ Rectangle { } verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text:"月" + text:control.monthText } FluText{ id:text_day @@ -99,7 +104,7 @@ Rectangle { } verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text:"日" + text:control.dayText } Menu{ id:popup @@ -315,7 +320,7 @@ Rectangle { right: divider.left verticalCenter: parent.verticalCenter } - text: "取消" + text: control.cancelText onClicked: { popup.close() } @@ -328,7 +333,7 @@ Rectangle { leftMargin: 10 verticalCenter: parent.verticalCenter } - text: "确定" + text: control.okText onClicked: { d.changeFlag = false popup.close() @@ -356,9 +361,9 @@ Rectangle { d.rowData[1] = text_month.text d.rowData[2] = text_day.text const now = new Date(); - var year = text_year.text === "年"? now.getFullYear() : Number(text_year.text); - var month = text_month.text === "月"? now.getMonth() + 1 : Number(text_month.text); - var day = text_day.text === "日" ? now.getDate() : Number(text_day.text); + var year = text_year.text === control.yearText? now.getFullYear() : Number(text_year.text); + var month = text_month.text === control.monthText? now.getMonth() + 1 : Number(text_month.text); + var day = text_day.text === control.dayText ? now.getDate() : Number(text_day.text); list_view_1.currentIndex = list_view_1.model.indexOf(year) text_year.text = year list_view_2.model = generateMonthArray(1,12) diff --git a/src/Qt5/imports/FluentUI/Controls/FluFilledButton.qml b/src/Qt5/imports/FluentUI/Controls/FluFilledButton.qml index 2827fd60..2dd4f198 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluFilledButton.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluFilledButton.qml @@ -38,17 +38,17 @@ Button { radius:4 } gradient: Gradient { - GradientStop { position: 0.33; color: control.normalColor } - GradientStop { position: 1.0; color: Qt.darker(control.normalColor,1.3) } + GradientStop { position: 0.33; color: control.enabled ? control.normalColor : Qt.rgba(0,0,0,0) } + GradientStop { position: 1.0; color: control.enabled ? Qt.darker(control.normalColor,1.3) : Qt.rgba(0,0,0,0) } } Rectangle{ radius: parent.radius anchors{ fill: parent - topMargin: 1 - leftMargin: 1 - rightMargin: 1 - bottomMargin: 2 + topMargin: control.enabled ? 1 : 0 + leftMargin: control.enabled ? 1 : 0 + rightMargin: control.enabled ? 1 : 0 + bottomMargin: control.enabled ? 2 : 0 } color:{ if(!enabled){ diff --git a/src/Qt5/imports/FluentUI/Controls/FluInfoBar.qml b/src/Qt5/imports/FluentUI/Controls/FluInfoBar.qml index 0e9d3006..355f99c4 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluInfoBar.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluInfoBar.qml @@ -192,7 +192,7 @@ FluObject { spacing: 5 FluText{ text:_super.text - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap width: Math.min(implicitWidth,mcontrol.maxWidth) } FluText{ diff --git a/src/Qt5/imports/FluentUI/Controls/FluMultilineTextBox.qml b/src/Qt5/imports/FluentUI/Controls/FluMultilineTextBox.qml index c09d6193..7168f25b 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluMultilineTextBox.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluMultilineTextBox.qml @@ -20,7 +20,7 @@ TextArea{ return normalColor } font:FluTextStyle.Body - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap padding: 8 leftPadding: padding+4 renderType: FluTheme.nativeText ? Text.NativeRendering : Text.QtRendering diff --git a/src/Qt5/imports/FluentUI/Controls/FluTableView.qml b/src/Qt5/imports/FluentUI/Controls/FluTableView.qml index 7ff4ffe3..0f5a94af 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluTableView.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluTableView.qml @@ -141,7 +141,7 @@ Rectangle { id:item_text text: String(display) elide: Text.ElideRight - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap anchors{ fill: parent leftMargin: 11 diff --git a/src/Qt5/imports/FluentUI/Controls/FluTimePicker.qml b/src/Qt5/imports/FluentUI/Controls/FluTimePicker.qml index 7319d96c..8ac4e2c6 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluTimePicker.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluTimePicker.qml @@ -11,6 +11,12 @@ Rectangle { property int hourFormat: FluTimePickerType.H property int isH: hourFormat === FluTimePickerType.H property var current + property string amText: "上午" + property string pmText: "下午" + property string hourText: "时" + property string minuteText: "分" + property string cancelText: "取消" + property string okText: "确定" signal accepted() id:control color: { @@ -32,17 +38,17 @@ Rectangle { if(isH){ hour = now.getHours(); if(hour>12){ - ampm = "下午" + ampm = control.pmText hour = hour-12 }else{ - ampm = "上午" + ampm = control.amText } }else{ hour = now.getHours(); } - hour = text_hour.text === "时"? hour.toString().padStart(2, '0') : text_hour.text - var minute = text_minute.text === "分"? now.getMinutes().toString().padStart(2, '0') : text_minute.text - ampm = text_ampm.text === "AM/PM"?ampm:text_ampm.text + hour = text_hour.text === control.hourText ? hour.toString().padStart(2, '0') : text_hour.text + var minute = text_minute.text === control.minuteText ? now.getMinutes().toString().padStart(2, '0') : text_minute.text + ampm = text_ampm.text === "%1/%2".arg(control.amText).arg(control.pmText) ? ampm : text_ampm.text text_hour.text = hour text_minute.text = minute if(isH){ @@ -60,7 +66,7 @@ Rectangle { } MouseArea{ - id:mouse_area + id: mouse_area hoverEnabled: true anchors.fill: parent onClicked: { @@ -68,22 +74,22 @@ Rectangle { } } Rectangle{ - id:divider_1 + id: divider_1 width: 1 x: isH ? parent.width/3 : parent.width/2 height: parent.height color: dividerColor } Rectangle{ - id:divider_2 + id: divider_2 width: 1 - x:parent.width*2/3 + x: parent.width*2/3 height: parent.height color: dividerColor visible: isH } FluText{ - id:text_hour + id: text_hour anchors{ left: parent.left right: divider_1.left @@ -92,10 +98,10 @@ Rectangle { } verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text:"时" + text: control.hourText } FluText{ - id:text_minute + id: text_minute anchors{ left: divider_1.right right: isH ? divider_2.left : parent.right @@ -104,7 +110,7 @@ Rectangle { } verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text:"分" + text: control.minuteText } FluText{ id:text_ampm @@ -117,7 +123,7 @@ Rectangle { } verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text:"AM/PM" + text: "%1/%2".arg(control.amText).arg(control.pmText) } Menu{ id:popup @@ -278,7 +284,7 @@ Rectangle { id:list_view_3 width: 100 height: 76 - model: ["上午","下午"] + model: [control.amText,control.pmText] clip: true visible: isH preferredHighlightBegin: 0 @@ -325,7 +331,7 @@ Rectangle { right: divider.left verticalCenter: parent.verticalCenter } - text: "取消" + text: control.cancelText onClicked: { popup.close() } @@ -338,7 +344,7 @@ Rectangle { leftMargin: 10 verticalCenter: parent.verticalCenter } - text: "确定" + text: control.okText onClicked: { d.changeFlag = false popup.close() @@ -349,9 +355,9 @@ Rectangle { var hours24 = parseInt(hours); if(control.hourFormat === FluTimePickerType.H){ if (hours === "12") { - hours24 = (period === "上午") ? 0 : 12; + hours24 = (period === control.amText) ? 0 : 12; } else { - hours24 = (period === "上午") ? hours24 : hours24 + 12; + hours24 = (period === control.pmText) ? hours24 : hours24 + 12; } } date.setHours(hours24); @@ -376,17 +382,17 @@ Rectangle { if(isH){ hour = now.getHours(); if(hour>12){ - ampm = "下午" + ampm = control.pmText hour = hour-12 }else{ - ampm = "上午" + ampm = control.amText } }else{ hour = now.getHours(); } - hour = text_hour.text === "时"? hour.toString().padStart(2, '0') : text_hour.text - var minute = text_minute.text === "分"? now.getMinutes().toString().padStart(2, '0') : text_minute.text - ampm = text_ampm.text === "AM/PM"?ampm:text_ampm.text + hour = text_hour.text === control.hourText ? hour.toString().padStart(2, '0') : text_hour.text + var minute = text_minute.text === control.minuteText ? now.getMinutes().toString().padStart(2, '0') : text_minute.text + ampm = text_ampm.text === "%1/%2".arg(control.amText).arg(control.pmText) ? ampm : text_ampm.text list_view_1.currentIndex = list_view_1.model.indexOf(hour); list_view_2.currentIndex = list_view_2.model.indexOf(minute); list_view_3.currentIndex = list_view_3.model.indexOf(ampm); @@ -421,4 +427,3 @@ Rectangle { return arr; } } - diff --git a/src/Qt5/imports/FluentUI/Controls/FluTimeline.qml b/src/Qt5/imports/FluentUI/Controls/FluTimeline.qml index a4a3b564..f4508aac 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluTimeline.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluTimeline.qml @@ -95,7 +95,7 @@ Item{ Component{ id:com_lable FluText{ - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap horizontalAlignment: isRight ? Qt.AlignRight : Qt.AlignLeft text: { if(modelData.lable){ @@ -110,7 +110,7 @@ Item{ Component{ id:com_text FluText{ - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap horizontalAlignment: isRight ? Qt.AlignRight : Qt.AlignLeft text: modelData.text textFormat: Text.RichText diff --git a/src/Qt5/imports/FluentUI/Controls/FluToggleButton.qml b/src/Qt5/imports/FluentUI/Controls/FluToggleButton.qml index 4013eb2c..e77ba5bc 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluToggleButton.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluToggleButton.qml @@ -39,6 +39,11 @@ Button { enabled: !disabled verticalPadding: 0 horizontalPadding:12 + onCheckableChanged: { + if(checkable){ + checkable = false + } + } onClicked: clickListener() background: Rectangle{ implicitWidth: 28 @@ -49,17 +54,17 @@ Button { radius:4 } gradient: Gradient { - GradientStop { position: 0.33; color: control.normalColor } - GradientStop { position: 1.0; color: Qt.darker(control.normalColor,1.3) } + GradientStop { position: 0.33; color: control.enabled ? control.normalColor : Qt.rgba(0,0,0,0) } + GradientStop { position: 1.0; color: control.enabled ? Qt.darker(control.normalColor,1.3) : Qt.rgba(0,0,0,0) } } Rectangle{ radius: parent.radius anchors{ fill: parent - topMargin: checked ? 1 : 0 - leftMargin: checked ? 1 : 0 - rightMargin: checked ? 1 : 0 - bottomMargin: checked ? 2 : 0 + topMargin: checked && enabled ? 1 : 0 + leftMargin: checked && enabled ? 1 : 0 + rightMargin: checked && enabled ? 1 : 0 + bottomMargin: checked && enabled ? 2 : 0 } color:{ if(!enabled){ diff --git a/src/Qt5/imports/FluentUI/Controls/FluTour.qml b/src/Qt5/imports/FluentUI/Controls/FluTour.qml index abfc5036..dd336479 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluTour.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluTour.qml @@ -10,6 +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: "上一步" id:control padding: 0 parent: Overlay.overlay @@ -26,9 +29,9 @@ Popup{ canvas.requestPaint() } Component{ - id:com_next_button + id: com_next_button FluFilledButton{ - text: isEnd ? "结束导览" :"下一步" + text: isEnd ? control.finishText : control.nextText onClicked: { if(isEnd){ control.close() @@ -39,9 +42,9 @@ Popup{ } } Component{ - id:com_prev_button + id: com_prev_button FluButton{ - text: "上一步" + text: control.previousText onClicked: { control.index = control.index - 1 } @@ -51,8 +54,8 @@ Popup{ id:d property var window: Window.window property point pos: Qt.point(0,0) - property var step : steps[index] - property var target : step.target() + property var step: steps[index] + property var target: step.target() } Connections{ target: d.window @@ -66,14 +69,14 @@ Popup{ } } Timer{ - id:timer_delay + id: timer_delay interval: 200 onTriggered: { canvas.requestPaint() } } Canvas{ - id:canvas + id: canvas anchors.fill: parent onPaint: { d.pos = d.target.mapToGlobal(0,0) @@ -105,7 +108,7 @@ Popup{ } } FluArea{ - id:layout_panne + id: layout_panne radius: 5 width: 500 height: 88 + text_desc.height @@ -116,7 +119,7 @@ Popup{ return 0 } x: Math.min(Math.max(0,d.pos.x+d.target.width/2-width/2),control.width-width) - y:{ + y: { var ty=d.pos.y+d.target.height+control.targetMargins + 15 if((ty+height)>control.height) return d.pos.y-height-control.targetMargins - 15 @@ -140,9 +143,9 @@ Popup{ } } FluText{ - id:text_desc + id: text_desc font: FluTextStyle.Body - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap maximumLineCount: 4 elide: Text.ElideRight text: d.step.description @@ -156,22 +159,22 @@ Popup{ } } FluLoader{ - id:loader_next + id: loader_next property bool isEnd: control.index === steps.length-1 sourceComponent: com_next_button anchors{ - top:text_desc.bottom + top: text_desc.bottom topMargin: 10 right: parent.right rightMargin: 15 } } FluLoader{ - id:loader_prev + id: loader_prev visible: control.index !== 0 sourceComponent: com_prev_button anchors{ - right:loader_next.left + right: loader_next.left top: loader_next.top rightMargin: 14 } @@ -187,7 +190,7 @@ Popup{ verticalPadding: 0 horizontalPadding: 0 iconSize: 12 - iconSource : FluentIcons.ChromeClose + iconSource: FluentIcons.ChromeClose onClicked: { control.close() } diff --git a/src/Qt5/imports/FluentUI/Controls/FluWindow.qml b/src/Qt5/imports/FluentUI/Controls/FluWindow.qml index e904b893..51635539 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluWindow.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluWindow.qml @@ -7,7 +7,6 @@ import FluentUI 1.0 Window { default property alias content: layout_content.data property string windowIcon: FluApp.windowIcon - property bool closeDestory: true property int launchMode: FluWindowType.Standard property var argument:({}) property var background : com_background @@ -39,6 +38,7 @@ Window { property bool autoMaximize: false property bool autoVisible: true property bool autoCenter: true + property bool autoDestory: true property bool useSystemAppBar property color resizeBorderColor: { if(window.active){ @@ -48,7 +48,7 @@ Window { } property int resizeBorderWidth: 1 property var closeListener: function(event){ - if(closeDestory){ + if(autoDestory){ destoryOnClose() }else{ visible = false diff --git a/src/Qt6/imports/FluentUI/Controls/FluContentDialog.qml b/src/Qt6/imports/FluentUI/Controls/FluContentDialog.qml index 0ca3b277..b281ed7e 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluContentDialog.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluContentDialog.qml @@ -41,7 +41,7 @@ FluPopup { FluText{ id:text_message font: FluTextStyle.Body - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap text:message width: parent.width topPadding: 4 @@ -67,7 +67,7 @@ FluPopup { topPadding: 20 leftPadding: 20 rightPadding: 20 - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap } FluLoader{ sourceComponent: com_message diff --git a/src/Qt6/imports/FluentUI/Controls/FluDatePicker.qml b/src/Qt6/imports/FluentUI/Controls/FluDatePicker.qml index 5862fad1..3271dddf 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluDatePicker.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluDatePicker.qml @@ -10,6 +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: "确定" signal accepted() id:control color: { @@ -26,9 +31,9 @@ Rectangle { Component.onCompleted: { if(current){ const now = current; - var year = text_year.text === "年"? now.getFullYear() : Number(text_year.text); - var month = text_month.text === "月"? now.getMonth() + 1 : Number(text_month.text); - var day = text_day.text === "日" ? now.getDate() : Number(text_day.text); + var year = text_year.text === control.yearText? now.getFullYear() : Number(text_year.text); + var month = text_month.text === control.monthText? now.getMonth() + 1 : Number(text_month.text); + var day = text_day.text === control.dayText ? now.getDate() : Number(text_day.text); text_year.text = year text_month.text = month text_day.text = day @@ -75,7 +80,7 @@ Rectangle { visible: showYear verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text:"年" + text:control.yearText } FluText{ id:text_month @@ -87,7 +92,7 @@ Rectangle { } verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text:"月" + text:control.monthText } FluText{ id:text_day @@ -99,7 +104,7 @@ Rectangle { } verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text:"日" + text:control.dayText } Menu{ id:popup @@ -315,7 +320,7 @@ Rectangle { right: divider.left verticalCenter: parent.verticalCenter } - text: "取消" + text: control.cancelText onClicked: { popup.close() } @@ -328,7 +333,7 @@ Rectangle { leftMargin: 10 verticalCenter: parent.verticalCenter } - text: "确定" + text: control.okText onClicked: { d.changeFlag = false popup.close() @@ -356,9 +361,9 @@ Rectangle { d.rowData[1] = text_month.text d.rowData[2] = text_day.text const now = new Date(); - var year = text_year.text === "年"? now.getFullYear() : Number(text_year.text); - var month = text_month.text === "月"? now.getMonth() + 1 : Number(text_month.text); - var day = text_day.text === "日" ? now.getDate() : Number(text_day.text); + var year = text_year.text === control.yearText? now.getFullYear() : Number(text_year.text); + var month = text_month.text === control.monthText? now.getMonth() + 1 : Number(text_month.text); + var day = text_day.text === control.dayText ? now.getDate() : Number(text_day.text); list_view_1.currentIndex = list_view_1.model.indexOf(year) text_year.text = year list_view_2.model = generateMonthArray(1,12) diff --git a/src/Qt6/imports/FluentUI/Controls/FluFilledButton.qml b/src/Qt6/imports/FluentUI/Controls/FluFilledButton.qml index d95b64cc..9827c289 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluFilledButton.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluFilledButton.qml @@ -39,17 +39,17 @@ Button { radius:4 } gradient: Gradient { - GradientStop { position: 0.33; color: control.normalColor } - GradientStop { position: 1.0; color: Qt.darker(control.normalColor,1.3) } + GradientStop { position: 0.33; color: control.enabled ? control.normalColor : Qt.rgba(0,0,0,0) } + GradientStop { position: 1.0; color: control.enabled ? Qt.darker(control.normalColor,1.3) : Qt.rgba(0,0,0,0) } } Rectangle{ radius: parent.radius anchors{ fill: parent - topMargin: 1 - leftMargin: 1 - rightMargin: 1 - bottomMargin: 2 + topMargin: control.enabled ? 1 : 0 + leftMargin: control.enabled ? 1 : 0 + rightMargin: control.enabled ? 1 : 0 + bottomMargin: control.enabled ? 2 : 0 } color:{ if(!enabled){ diff --git a/src/Qt6/imports/FluentUI/Controls/FluInfoBar.qml b/src/Qt6/imports/FluentUI/Controls/FluInfoBar.qml index df02d788..c54f526a 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluInfoBar.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluInfoBar.qml @@ -192,7 +192,7 @@ FluObject { spacing: 5 FluText{ text:_super.text - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap width: Math.min(implicitWidth,mcontrol.maxWidth) } FluText{ diff --git a/src/Qt6/imports/FluentUI/Controls/FluMultilineTextBox.qml b/src/Qt6/imports/FluentUI/Controls/FluMultilineTextBox.qml index 6d1c3649..d8562a4b 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluMultilineTextBox.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluMultilineTextBox.qml @@ -21,7 +21,7 @@ TextArea{ return normalColor } font:FluTextStyle.Body - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap padding: 8 leftPadding: padding+4 renderType: FluTheme.nativeText ? Text.NativeRendering : Text.QtRendering diff --git a/src/Qt6/imports/FluentUI/Controls/FluTableView.qml b/src/Qt6/imports/FluentUI/Controls/FluTableView.qml index 1be0d668..2b3f8f5b 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluTableView.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluTableView.qml @@ -142,7 +142,7 @@ Rectangle { id:item_text text: String(display) elide: Text.ElideRight - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap anchors{ fill: parent leftMargin: 11 diff --git a/src/Qt6/imports/FluentUI/Controls/FluTimePicker.qml b/src/Qt6/imports/FluentUI/Controls/FluTimePicker.qml index 9dfd3ea9..f34b6dd6 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluTimePicker.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluTimePicker.qml @@ -11,6 +11,12 @@ Rectangle { property int hourFormat: FluTimePickerType.H property int isH: hourFormat === FluTimePickerType.H property var current + property string amText: "上午" + property string pmText: "下午" + property string hourText: "时" + property string minuteText: "分" + property string cancelText: "取消" + property string okText: "确定" signal accepted() id:control color: { @@ -32,17 +38,17 @@ Rectangle { if(isH){ hour = now.getHours(); if(hour>12){ - ampm = "下午" + ampm = control.pmText hour = hour-12 }else{ - ampm = "上午" + ampm = control.amText } }else{ hour = now.getHours(); } - hour = text_hour.text === "时"? hour.toString().padStart(2, '0') : text_hour.text - var minute = text_minute.text === "分"? now.getMinutes().toString().padStart(2, '0') : text_minute.text - ampm = text_ampm.text === "AM/PM"?ampm:text_ampm.text + hour = text_hour.text === control.hourText ? hour.toString().padStart(2, '0') : text_hour.text + var minute = text_minute.text === control.minuteText ? now.getMinutes().toString().padStart(2, '0') : text_minute.text + ampm = text_ampm.text === "%1/%2".arg(control.amText).arg(control.pmText) ? ampm : text_ampm.text text_hour.text = hour text_minute.text = minute if(isH){ @@ -60,7 +66,7 @@ Rectangle { } MouseArea{ - id:mouse_area + id: mouse_area hoverEnabled: true anchors.fill: parent onClicked: { @@ -68,22 +74,22 @@ Rectangle { } } Rectangle{ - id:divider_1 + id: divider_1 width: 1 x: isH ? parent.width/3 : parent.width/2 height: parent.height color: dividerColor } Rectangle{ - id:divider_2 + id: divider_2 width: 1 - x:parent.width*2/3 + x: parent.width*2/3 height: parent.height color: dividerColor visible: isH } FluText{ - id:text_hour + id: text_hour anchors{ left: parent.left right: divider_1.left @@ -92,10 +98,10 @@ Rectangle { } verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text:"时" + text: control.hourText } FluText{ - id:text_minute + id: text_minute anchors{ left: divider_1.right right: isH ? divider_2.left : parent.right @@ -104,7 +110,7 @@ Rectangle { } verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text:"分" + text: control.minuteText } FluText{ id:text_ampm @@ -117,7 +123,7 @@ Rectangle { } verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - text:"AM/PM" + text: "%1/%2".arg(control.amText).arg(control.pmText) } Menu{ id:popup @@ -278,7 +284,7 @@ Rectangle { id:list_view_3 width: 100 height: 76 - model: ["上午","下午"] + model: [control.amText,control.pmText] clip: true visible: isH preferredHighlightBegin: 0 @@ -325,7 +331,7 @@ Rectangle { right: divider.left verticalCenter: parent.verticalCenter } - text: "取消" + text: control.cancelText onClicked: { popup.close() } @@ -338,7 +344,7 @@ Rectangle { leftMargin: 10 verticalCenter: parent.verticalCenter } - text: "确定" + text: control.okText onClicked: { d.changeFlag = false popup.close() @@ -349,9 +355,9 @@ Rectangle { var hours24 = parseInt(hours); if(control.hourFormat === FluTimePickerType.H){ if (hours === "12") { - hours24 = (period === "上午") ? 0 : 12; + hours24 = (period === control.amText) ? 0 : 12; } else { - hours24 = (period === "上午") ? hours24 : hours24 + 12; + hours24 = (period === control.pmText) ? hours24 : hours24 + 12; } } date.setHours(hours24); @@ -376,17 +382,17 @@ Rectangle { if(isH){ hour = now.getHours(); if(hour>12){ - ampm = "下午" + ampm = control.pmText hour = hour-12 }else{ - ampm = "上午" + ampm = control.amText } }else{ hour = now.getHours(); } - hour = text_hour.text === "时"? hour.toString().padStart(2, '0') : text_hour.text - var minute = text_minute.text === "分"? now.getMinutes().toString().padStart(2, '0') : text_minute.text - ampm = text_ampm.text === "AM/PM"?ampm:text_ampm.text + hour = text_hour.text === control.hourText ? hour.toString().padStart(2, '0') : text_hour.text + var minute = text_minute.text === control.minuteText ? now.getMinutes().toString().padStart(2, '0') : text_minute.text + ampm = text_ampm.text === "%1/%2".arg(control.amText).arg(control.pmText) ? ampm : text_ampm.text list_view_1.currentIndex = list_view_1.model.indexOf(hour); list_view_2.currentIndex = list_view_2.model.indexOf(minute); list_view_3.currentIndex = list_view_3.model.indexOf(ampm); diff --git a/src/Qt6/imports/FluentUI/Controls/FluTimeline.qml b/src/Qt6/imports/FluentUI/Controls/FluTimeline.qml index 6a42bf9c..32253e04 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluTimeline.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluTimeline.qml @@ -95,7 +95,7 @@ Item{ Component{ id:com_lable FluText{ - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap horizontalAlignment: isRight ? Qt.AlignRight : Qt.AlignLeft text: { if(modelData.lable){ @@ -110,7 +110,7 @@ Item{ Component{ id:com_text FluText{ - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap horizontalAlignment: isRight ? Qt.AlignRight : Qt.AlignLeft text: modelData.text textFormat: Text.RichText diff --git a/src/Qt6/imports/FluentUI/Controls/FluToggleButton.qml b/src/Qt6/imports/FluentUI/Controls/FluToggleButton.qml index 83b1ba05..19dc6560 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluToggleButton.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluToggleButton.qml @@ -50,17 +50,17 @@ Button { radius:4 } gradient: Gradient { - GradientStop { position: 0.33; color: control.normalColor } - GradientStop { position: 1.0; color: Qt.darker(control.normalColor,1.3) } + GradientStop { position: 0.33; color: control.enabled ? control.normalColor : Qt.rgba(0,0,0,0) } + GradientStop { position: 1.0; color: control.enabled ? Qt.darker(control.normalColor,1.3) : Qt.rgba(0,0,0,0) } } Rectangle{ radius: parent.radius anchors{ fill: parent - topMargin: checked ? 1 : 0 - leftMargin: checked ? 1 : 0 - rightMargin: checked ? 1 : 0 - bottomMargin: checked ? 2 : 0 + topMargin: checked && enabled ? 1 : 0 + leftMargin: checked && enabled ? 1 : 0 + rightMargin: checked && enabled ? 1 : 0 + bottomMargin: checked && enabled ? 2 : 0 } color:{ if(!enabled){ diff --git a/src/Qt6/imports/FluentUI/Controls/FluTour.qml b/src/Qt6/imports/FluentUI/Controls/FluTour.qml index 4e44b871..d406beb5 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluTour.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluTour.qml @@ -10,6 +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: "上一步" id:control padding: 0 parent: Overlay.overlay @@ -26,9 +29,9 @@ Popup{ canvas.requestPaint() } Component{ - id:com_next_button + id: com_next_button FluFilledButton{ - text: isEnd ? "结束导览" :"下一步" + text: isEnd ? control.finishText : control.nextText onClicked: { if(isEnd){ control.close() @@ -39,9 +42,9 @@ Popup{ } } Component{ - id:com_prev_button + id: com_prev_button FluButton{ - text: "上一步" + text: control.previousText onClicked: { control.index = control.index - 1 } @@ -51,8 +54,8 @@ Popup{ id:d property var window: Window.window property point pos: Qt.point(0,0) - property var step : steps[index] - property var target : step.target() + property var step: steps[index] + property var target: step.target() } Connections{ target: d.window @@ -66,14 +69,14 @@ Popup{ } } Timer{ - id:timer_delay + id: timer_delay interval: 200 onTriggered: { canvas.requestPaint() } } Canvas{ - id:canvas + id: canvas anchors.fill: parent onPaint: { d.pos = d.target.mapToGlobal(0,0) @@ -105,7 +108,7 @@ Popup{ } } FluArea{ - id:layout_panne + id: layout_panne radius: 5 width: 500 height: 88 + text_desc.height @@ -116,7 +119,7 @@ Popup{ return 0 } x: Math.min(Math.max(0,d.pos.x+d.target.width/2-width/2),control.width-width) - y:{ + y: { var ty=d.pos.y+d.target.height+control.targetMargins + 15 if((ty+height)>control.height) return d.pos.y-height-control.targetMargins - 15 @@ -140,9 +143,9 @@ Popup{ } } FluText{ - id:text_desc + id: text_desc font: FluTextStyle.Body - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap maximumLineCount: 4 elide: Text.ElideRight text: d.step.description @@ -156,22 +159,22 @@ Popup{ } } FluLoader{ - id:loader_next + id: loader_next property bool isEnd: control.index === steps.length-1 sourceComponent: com_next_button anchors{ - top:text_desc.bottom + top: text_desc.bottom topMargin: 10 right: parent.right rightMargin: 15 } } FluLoader{ - id:loader_prev + id: loader_prev visible: control.index !== 0 sourceComponent: com_prev_button anchors{ - right:loader_next.left + right: loader_next.left top: loader_next.top rightMargin: 14 } @@ -187,7 +190,7 @@ Popup{ verticalPadding: 0 horizontalPadding: 0 iconSize: 12 - iconSource : FluentIcons.ChromeClose + iconSource: FluentIcons.ChromeClose onClicked: { control.close() } diff --git a/src/Qt6/imports/FluentUI/Controls/FluWindow.qml b/src/Qt6/imports/FluentUI/Controls/FluWindow.qml index a00e83ab..e5fe38d4 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluWindow.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluWindow.qml @@ -6,7 +6,6 @@ import FluentUI Window { default property alias content: layout_content.data property string windowIcon: FluApp.windowIcon - property bool closeDestory: true property int launchMode: FluWindowType.Standard property var argument:({}) property var background : com_background @@ -38,6 +37,7 @@ Window { property bool autoMaximize: false property bool autoVisible: true property bool autoCenter: true + property bool autoDestory: true property bool useSystemAppBar property color resizeBorderColor: { if(window.active){ @@ -47,7 +47,7 @@ Window { } property int resizeBorderWidth: 1 property var closeListener: function(event){ - if(closeDestory){ + if(autoDestory){ destoryOnClose() }else{ visible = false diff --git a/src/version_fluentuiplugin.rc b/src/version_fluentuiplugin.rc new file mode 100644 index 00000000..4febd6e5 --- /dev/null +++ b/src/version_fluentuiplugin.rc @@ -0,0 +1,32 @@ +1 VERSIONINFO + FILEVERSION 1,6,9,1176 + PRODUCTVERSION 1,6,9,1176 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080404b0" + BEGIN + VALUE "CompanyName", "ZhuZiChu" + VALUE "FileDescription", "" + VALUE "FileVersion", "1.6.9.1176" + VALUE "InternalName", "fluentuiplugin.dll" + VALUE "LegalCopyright", "Copyright (C) 2023 ZhuZiChu. All rights reserved." + VALUE "OriginalFilename", "fluentuiplugin.dll" + VALUE "ProductName", "fluentuiplugin" + VALUE "ProductVersion", "1.6.9.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x804, 1200 + END +END