RinUI 0.0.10.1__py3-none-any.whl → 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. RinUI/__init__.py +1 -1
  2. RinUI/__pycache__/__init__.cpython-38.pyc +0 -0
  3. RinUI/assets/img/default_app_icon.png +0 -0
  4. RinUI/components/BasicInput/Button.qml +1 -2
  5. RinUI/components/ContextMenu.qml +1 -1
  6. RinUI/components/DialogsAndFlyouts/Flyout.qml +10 -67
  7. RinUI/components/Media/Avatar.qml +83 -0
  8. RinUI/components/MenusAndToolbars/TextInputMenu.qml +38 -0
  9. RinUI/components/Navigation/Segmented.qml +17 -0
  10. RinUI/components/Navigation/SegmentedItem.qml +108 -0
  11. RinUI/components/Navigation/SelectorBar.qml +3 -48
  12. RinUI/components/Navigation/SelectorBarItem.qml +89 -0
  13. RinUI/components/Text/TextArea.qml +1 -29
  14. RinUI/components/Text/TextField.qml +1 -29
  15. RinUI/components/Text/TextInput.qml +19 -0
  16. RinUI/components/qmldir +4 -0
  17. RinUI/core/__init__.py +2 -1
  18. RinUI/core/__pycache__/__init__.cpython-38.pyc +0 -0
  19. RinUI/core/__pycache__/config.cpython-38.pyc +0 -0
  20. RinUI/core/__pycache__/launcher.cpython-38.pyc +0 -0
  21. RinUI/core/__pycache__/theme.cpython-38.pyc +0 -0
  22. RinUI/core/__pycache__/translator.cpython-38.pyc +0 -0
  23. RinUI/core/config.py +11 -2
  24. RinUI/core/launcher.py +24 -37
  25. RinUI/core/theme.py +17 -20
  26. RinUI/core/translator.py +25 -0
  27. RinUI/languages/en_US.qm +1 -0
  28. RinUI/languages/en_US.ts +201 -0
  29. RinUI/languages/zh_CN.qm +0 -0
  30. RinUI/languages/zh_CN.ts +204 -0
  31. RinUI/qmldir +8 -0
  32. RinUI/themes/dark.qml +9 -0
  33. RinUI/themes/light.qml +10 -1
  34. RinUI/themes/theme.qml +39 -15
  35. RinUI/themes/utils.qml +4 -0
  36. RinUI/windows/FluentWindow.qml +0 -1
  37. RinUI/windows/FluentWindowBase.qml +0 -1
  38. RinUI/windows/TitleBar.qml +2 -2
  39. {rinui-0.0.10.1.data → rinui-0.1.0.data}/data/README.md +5 -1
  40. {rinui-0.0.10.1.dist-info → rinui-0.1.0.dist-info}/METADATA +6 -2
  41. {rinui-0.0.10.1.dist-info → rinui-0.1.0.dist-info}/RECORD +46 -35
  42. {rinui-0.0.10.1.data → rinui-0.1.0.data}/data/LICENSE +0 -0
  43. {rinui-0.0.10.1.dist-info → rinui-0.1.0.dist-info}/LICENSE +0 -0
  44. {rinui-0.0.10.1.dist-info → rinui-0.1.0.dist-info}/WHEEL +0 -0
  45. {rinui-0.0.10.1.dist-info → rinui-0.1.0.dist-info}/entry_points.txt +0 -0
  46. {rinui-0.0.10.1.dist-info → rinui-0.1.0.dist-info}/top_level.txt +0 -0
RinUI/core/config.py CHANGED
@@ -2,6 +2,7 @@ import os
2
2
  import json
3
3
  import platform
4
4
  import sys
5
+ from PySide6.QtCore import QLocale
5
6
  from enum import Enum
6
7
 
7
8
 
@@ -36,7 +37,6 @@ BASE_DIR = os.path.abspath(os.getcwd())
36
37
  PATH = os.path.join(BASE_DIR, "RinUI/config")
37
38
  RINUI_PATH = resource_path(os.path.join(rinui_core_path, "../../")) # 使用 resource_path 处理路径
38
39
  DEFAULT_CONFIG = {
39
- "language": "zh_CN",
40
40
  "theme": {
41
41
  "current_theme": "Auto",
42
42
  },
@@ -62,8 +62,13 @@ class BackdropEffect(Enum):
62
62
  Tabbed = "tabbed"
63
63
 
64
64
 
65
- class ConfigCenter:
65
+ class ConfigManager:
66
66
  def __init__(self, path, filename):
67
+ """
68
+ Json Config Manager
69
+ :param path: json config file path
70
+ :param filename: json config file name (eg: rin_ui.json)
71
+ """
67
72
  self.path = path
68
73
  self.filename = filename
69
74
  self.config = {}
@@ -118,3 +123,7 @@ class ConfigCenter:
118
123
 
119
124
  def __repr__(self):
120
125
  return json.dumps(self.config, ensure_ascii=False, indent=4)
126
+
127
+
128
+ RinConfig = ConfigManager(path=PATH, filename='rin_ui.json')
129
+ RinConfig.load_config(DEFAULT_CONFIG) # 加载配置
RinUI/core/launcher.py CHANGED
@@ -1,33 +1,20 @@
1
1
  import os
2
2
  import sys
3
3
 
4
- from PySide6.QtCore import QCoreApplication, QUrl
4
+ from PySide6.QtCore import QCoreApplication, QUrl, QObject
5
5
  from PySide6.QtGui import QIcon
6
- from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
6
+ from PySide6.QtWidgets import QApplication
7
7
  from PySide6.QtQml import QQmlApplicationEngine
8
- from .theme import ThemeManager
9
- from .config import BackdropEffect, is_windows, Theme, RINUI_PATH
10
-
11
8
 
12
- class TestWindow(QWidget):
13
- def __init__(self, theme_manager):
14
- super().__init__()
15
- layout = QVBoxLayout()
16
- self.setLayout(layout)
17
- self.setWindowTitle("Test Window")
18
- btn = QPushButton(theme_manager.current_theme)
19
- btn.clicked.connect(
20
- lambda: theme_manager.toggle_theme("Light" if theme_manager.current_theme == "Dark" else "Dark")
21
- )
22
- self.layout().addWidget(btn)
23
- self.resize(400, 300)
9
+ from .theme import ThemeManager
10
+ from .config import BackdropEffect, is_windows, Theme, RINUI_PATH, RinConfig
24
11
 
25
12
 
26
13
  class RinUIWindow:
27
14
  def __init__(self, qml_path: str):
28
15
  """
29
- 创建基于 RinUI QML 应用程序。
30
- :param qml_path: str, QML 文件路径
16
+ Create an application window with RinUI.
17
+ :param qml_path: str, QML file path (eg = "path/to/main.qml")
31
18
  """
32
19
  super().__init__()
33
20
  if hasattr(self, "_initialized") and self._initialized:
@@ -35,29 +22,29 @@ class RinUIWindow:
35
22
  self._initialized = True
36
23
  print("✨ RinUIWindow Initializing")
37
24
 
25
+ # 退出清理
26
+ app_instance = QCoreApplication.instance()
27
+ if not app_instance:
28
+ raise RuntimeError("QApplication must be created before RinUIWindow.")
29
+
38
30
  self.engine = QQmlApplicationEngine()
39
31
  self.theme_manager = ThemeManager()
40
32
  self.qml_path = qml_path
41
33
  self.autoSetWindowsEffect = True
42
34
 
35
+ app_instance.aboutToQuit.connect(self.theme_manager.clean_up)
43
36
  self._setup_application()
44
37
  self.print_startup_info()
45
38
 
46
- # 退出清理
47
- app_instance = QCoreApplication.instance()
48
- if app_instance:
49
- app_instance.aboutToQuit.connect(self.theme_manager.clean_up)
50
-
51
- def _setup_application(self):
39
+ def _setup_application(self) -> None:
52
40
  """Setup"""
53
41
  # RInUI 模块
54
- rinui_import_path = RINUI_PATH
55
- print(f"UI Module Path: {rinui_import_path}")
42
+ print(f"UI Module Path: {RINUI_PATH}")
56
43
 
57
- if os.path.exists(rinui_import_path):
58
- self.engine.addImportPath(rinui_import_path)
44
+ if os.path.exists(RINUI_PATH):
45
+ self.engine.addImportPath(RINUI_PATH)
59
46
  else:
60
- raise FileNotFoundError(f"Cannot find RinUI module: {rinui_import_path}")
47
+ raise FileNotFoundError(f"Cannot find RinUI module: {RINUI_PATH}")
61
48
 
62
49
  # 主题管理器
63
50
  self.engine.rootContext().setContextProperty("ThemeManager", self.theme_manager)
@@ -77,8 +64,8 @@ class RinUIWindow:
77
64
 
78
65
  def setIcon(self, path: str) -> None:
79
66
  """
80
- 设置应用程序图标。
81
- :param path: str, 图标路径
67
+ Sets the icon for the application.
68
+ :param path: str, icon file path (eg = "path/to/icon.png")
82
69
  :return:
83
70
  """
84
71
  app_instance = QApplication.instance()
@@ -88,7 +75,7 @@ class RinUIWindow:
88
75
  else:
89
76
  raise RuntimeError("Cannot set icon before QApplication is created.")
90
77
 
91
- def _apply_windows_effects(self):
78
+ def _apply_windows_effects(self) -> None:
92
79
  """
93
80
  Apply Windows effects to the window.
94
81
  :return:
@@ -98,7 +85,7 @@ class RinUIWindow:
98
85
  self.theme_manager.apply_window_effects()
99
86
 
100
87
  # func名称遵循 Qt 命名规范
101
- def setBackdropEffect(self, effect: BackdropEffect):
88
+ def setBackdropEffect(self, effect: BackdropEffect) -> None:
102
89
  """
103
90
  Sets the backdrop effect for the window. (Only available on Windows)
104
91
  :param effect: BackdropEffect, type of backdrop effect(Acrylic, Mica, Tabbed, None_)
@@ -108,7 +95,7 @@ class RinUIWindow:
108
95
  raise OSError("Only can set backdrop effect on Windows platform.")
109
96
  self.theme_manager.apply_backdrop_effect(effect.value)
110
97
 
111
- def setTheme(self, theme: Theme):
98
+ def setTheme(self, theme: Theme) -> None:
112
99
  """
113
100
  Sets the theme for the window.
114
101
  :param theme: Theme, type of theme(Auto, Dark, Light)
@@ -116,7 +103,7 @@ class RinUIWindow:
116
103
  """
117
104
  self.theme_manager.toggle_theme(theme.value)
118
105
 
119
- def __getattr__(self, name):
106
+ def __getattr__(self, name) -> QObject:
120
107
  """获取 QML 窗口属性"""
121
108
  try:
122
109
  root = object.__getattribute__(self, "root_window")
@@ -124,7 +111,7 @@ class RinUIWindow:
124
111
  except AttributeError:
125
112
  raise AttributeError(f"\"RinUIWindow\" object has no attribute '{name}'")
126
113
 
127
- def print_startup_info(self):
114
+ def print_startup_info(self) -> None:
128
115
  border = "=" * 40
129
116
  print(f"\n{border}")
130
117
  print("✨ RinUIWindow Loaded Successfully!")
RinUI/core/theme.py CHANGED
@@ -4,7 +4,7 @@ import time
4
4
 
5
5
  from PySide6.QtCore import QObject, Signal, Slot, QThread
6
6
 
7
- from .config import DEFAULT_CONFIG, ConfigCenter, PATH, is_win10, is_windows, is_win11, BackdropEffect
7
+ from .config import DEFAULT_CONFIG, RinConfig, is_win10, is_windows, is_win11, BackdropEffect
8
8
  import sys
9
9
  import darkdetect
10
10
 
@@ -99,7 +99,7 @@ class ThemeManager(QObject):
99
99
  清理资源并停止主题监听。
100
100
  """
101
101
  if self.listener:
102
- self.config.save_config()
102
+ RinConfig.save_config()
103
103
  print("Save config.")
104
104
  self.listener.stop()
105
105
  self.listener.wait() # 等待线程结束
@@ -129,11 +129,8 @@ class ThemeManager(QObject):
129
129
  self.current_theme = DEFAULT_CONFIG["theme"]["current_theme"] # 当前主题
130
130
  self.is_darkdetect_supported = check_darkdetect_support()
131
131
 
132
- self.config = ConfigCenter(PATH, "rin_ui.json") # 配置中心
133
- self.config.load_config(DEFAULT_CONFIG) # 加载配置
134
-
135
132
  try:
136
- self.current_theme = self.config["theme"]["current_theme"]
133
+ self.current_theme = RinConfig["theme"]["current_theme"]
137
134
  except Exception as e:
138
135
  print(f"Failed to load config because of {e}, using default config")
139
136
 
@@ -154,7 +151,7 @@ class ThemeManager(QObject):
154
151
  self.windows.append(hwnd)
155
152
  print(f"Window handle set: {hwnd}")
156
153
 
157
- def _handle_system_theme(self, system_theme):
154
+ def _handle_system_theme(self):
158
155
  if self.current_theme == "Auto":
159
156
  self._update_window_theme()
160
157
  self.themeChanged.emit(self._actual_theme())
@@ -190,7 +187,7 @@ class ThemeManager(QObject):
190
187
  elif is_win10() and effect_type == BackdropEffect.Acrylic.value:
191
188
  self._apply_win10_effect(effect_type, hwnd)
192
189
 
193
- self.config["backdrop_effect"] = effect_type
190
+ RinConfig["backdrop_effect"] = effect_type
194
191
  print(
195
192
  f"Applied \"{effect_type.strip().capitalize()}\" effect with "
196
193
  f"{platform.system() + '11' if is_win11() else '10'}"
@@ -202,7 +199,7 @@ class ThemeManager(QObject):
202
199
  应用 Windows 10 背景效果
203
200
  :param effect_type: str, 背景效果类型(acrylic, tabbed(actually blur)
204
201
  """
205
- backdrop_color = self.config["win10_feat"]["backdrop_dark" if self.is_dark_theme() else "backdrop_light"]
202
+ backdrop_color = RinConfig["win10_feat"]["backdrop_dark" if self.is_dark_theme() else "backdrop_light"]
206
203
 
207
204
  accent = ACCENT_POLICY()
208
205
  accent.AccentState = ACCENT_STATES[effect_type]
@@ -257,8 +254,8 @@ class ThemeManager(QObject):
257
254
  ctypes.byref(ctypes.c_int(self.theme_dict[actual_theme])),
258
255
  ctypes.sizeof(ctypes.c_int)
259
256
  )
260
- elif is_win10() and self.config["backdrop_effect"] == BackdropEffect.Acrylic.value:
261
- self._apply_win10_effect(self.config["backdrop_effect"], hwnd)
257
+ elif is_win10() and RinConfig["backdrop_effect"] == BackdropEffect.Acrylic.value:
258
+ self._apply_win10_effect(RinConfig["backdrop_effect"], hwnd)
262
259
  else:
263
260
  print(f"Cannot apply backdrop on {platform.system()}")
264
261
 
@@ -281,7 +278,7 @@ class ThemeManager(QObject):
281
278
  if self.current_theme != theme:
282
279
  print(f"Switching to '{theme}' theme")
283
280
  self.current_theme = theme
284
- self.config["theme"]["current_theme"] = theme
281
+ RinConfig["theme"]["current_theme"] = theme
285
282
  self._update_window_theme()
286
283
  self.themeChanged.emit(self._actual_theme())
287
284
 
@@ -301,18 +298,18 @@ class ThemeManager(QObject):
301
298
  @Slot(result=str)
302
299
  def get_backdrop_effect(self):
303
300
  """获取当前背景效果"""
304
- return self.config["backdrop_effect"]
301
+ return RinConfig["backdrop_effect"]
302
+
303
+ @Slot(str)
304
+ def set_theme_color(self, color):
305
+ """设置当前主题颜色"""
306
+ RinConfig["theme_color"] = color
307
+ RinConfig.save_config()
305
308
 
306
309
  @Slot(result=str)
307
310
  def get_theme_color(self):
308
311
  """获取当前主题颜色"""
309
- return self.config["theme_color"]
310
-
311
- @Slot(result=str)
312
- def set_theme_color(self, color):
313
- """设置当前主题颜色"""
314
- self.config["theme_color"] = color
315
- self.config.save_config()
312
+ return RinConfig["theme_color"]
316
313
 
317
314
  @Slot(QObject, result=int)
318
315
  def getWindowId(self, window):
@@ -0,0 +1,25 @@
1
+ from PySide6.QtCore import QTranslator, QLocale
2
+ from .config import RINUI_PATH
3
+ import os
4
+
5
+
6
+ class RinUITranslator(QTranslator):
7
+ """
8
+ RinUI i18n translator.
9
+ :param locale: QLocale, optional, default is system locale
10
+ """
11
+ def __init__(self, locale: QLocale = QLocale.system().name(), parent=None): # follow system
12
+ super().__init__(parent)
13
+ self.load(locale or QLocale())
14
+
15
+ def load(self, locale: QLocale) -> bool:
16
+ """
17
+ Load translation file for the given locale.
18
+ :param locale: QLocale, the locale to load (eg = QLocale(QLocale.Chinese, QLocale.China), QLocale("zh_CN"))
19
+ :return: bool
20
+ """
21
+ print(f"🌏 Current locale: {locale.name()}")
22
+ path = os.path.join(RINUI_PATH, "RinUI", "languages", f"{locale.name()}.qm")
23
+ if not os.path.exists(path):
24
+ raise FileNotFoundError(f"Cannot find translation file: {path}")
25
+ return super().load(path)
@@ -0,0 +1 @@
1
+ <�d��!�`���
@@ -0,0 +1,201 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE TS>
3
+ <TS version="2.1">
4
+ <context>
5
+ <name>CtrlBtn</name>
6
+ <message>
7
+ <location filename="../windows/CtrlBtn.qml" line="19"/>
8
+ <source>Maximize</source>
9
+ <translation type="unfinished"></translation>
10
+ </message>
11
+ <message>
12
+ <location filename="../windows/CtrlBtn.qml" line="19"/>
13
+ <source>Minimize</source>
14
+ <translation type="unfinished"></translation>
15
+ </message>
16
+ <message>
17
+ <location filename="../windows/CtrlBtn.qml" line="19"/>
18
+ <source>Close</source>
19
+ <translation type="unfinished"></translation>
20
+ </message>
21
+ <message>
22
+ <location filename="../windows/CtrlBtn.qml" line="19"/>
23
+ <source>Unknown</source>
24
+ <translation type="unfinished"></translation>
25
+ </message>
26
+ </context>
27
+ <context>
28
+ <name>DatePicker</name>
29
+ <message>
30
+ <location filename="../components/DateAndTime/DatePicker.qml" line="98"/>
31
+ <source>year</source>
32
+ <translation type="unfinished"></translation>
33
+ </message>
34
+ <message>
35
+ <location filename="../components/DateAndTime/DatePicker.qml" line="99"/>
36
+ <source>month</source>
37
+ <translation type="unfinished"></translation>
38
+ </message>
39
+ <message>
40
+ <location filename="../components/DateAndTime/DatePicker.qml" line="100"/>
41
+ <source>day</source>
42
+ <translation type="unfinished"></translation>
43
+ </message>
44
+ </context>
45
+ <context>
46
+ <name>ErrorPage</name>
47
+ <message>
48
+ <location filename="../components/Navigation/ErrorPage.qml" line="21"/>
49
+ <source>Sorry, something went wrong!</source>
50
+ <translation type="unfinished"></translation>
51
+ </message>
52
+ <message>
53
+ <location filename="../components/Navigation/ErrorPage.qml" line="30"/>
54
+ <source> load failed!
55
+
56
+ Because of </source>
57
+ <translation type="unfinished"></translation>
58
+ </message>
59
+ <message>
60
+ <location filename="../components/Navigation/ErrorPage.qml" line="30"/>
61
+ <source>
62
+ Please try again later.</source>
63
+ <translation type="unfinished"></translation>
64
+ </message>
65
+ <message>
66
+ <location filename="../components/Navigation/ErrorPage.qml" line="41"/>
67
+ <source>Retry</source>
68
+ <translation type="unfinished"></translation>
69
+ </message>
70
+ </context>
71
+ <context>
72
+ <name>FluentWindow</name>
73
+ <message>
74
+ <location filename="../windows/FluentWindow.qml" line="11"/>
75
+ <source>Fluent Window</source>
76
+ <translation type="unfinished"></translation>
77
+ </message>
78
+ </context>
79
+ <context>
80
+ <name>FluentWindowBase</name>
81
+ <message>
82
+ <location filename="../windows/FluentWindowBase.qml" line="11"/>
83
+ <source>Fluent Window Base</source>
84
+ <translation type="unfinished"></translation>
85
+ </message>
86
+ </context>
87
+ <context>
88
+ <name>InfoBar</name>
89
+ <message>
90
+ <location filename="../components/StatusAndInfo/InfoBar.qml" line="171"/>
91
+ <source>Close</source>
92
+ <translation type="unfinished"></translation>
93
+ </message>
94
+ </context>
95
+ <context>
96
+ <name>NavigationBar</name>
97
+ <message>
98
+ <location filename="../components/Navigation/NavigationBar.qml" line="98"/>
99
+ <source>Back</source>
100
+ <translation type="unfinished"></translation>
101
+ </message>
102
+ <message>
103
+ <location filename="../components/Navigation/NavigationBar.qml" line="137"/>
104
+ <source>Open Navigation</source>
105
+ <translation type="unfinished"></translation>
106
+ </message>
107
+ <message>
108
+ <location filename="../components/Navigation/NavigationBar.qml" line="137"/>
109
+ <source>Close Navigation</source>
110
+ <translation type="unfinished"></translation>
111
+ </message>
112
+ </context>
113
+ <context>
114
+ <name>PickerView</name>
115
+ <message>
116
+ <location filename="../components/DateAndTime/PickerView.qml" line="26"/>
117
+ <source>AM</source>
118
+ <translation type="unfinished"></translation>
119
+ </message>
120
+ <message>
121
+ <location filename="../components/DateAndTime/PickerView.qml" line="26"/>
122
+ <source>PM</source>
123
+ <translation type="unfinished"></translation>
124
+ </message>
125
+ </context>
126
+ <context>
127
+ <name>Switch</name>
128
+ <message>
129
+ <location filename="../components/BasicInput/Switch.qml" line="15"/>
130
+ <source>On</source>
131
+ <translation type="unfinished"></translation>
132
+ </message>
133
+ <message>
134
+ <location filename="../components/BasicInput/Switch.qml" line="16"/>
135
+ <source>Off</source>
136
+ <translation type="unfinished"></translation>
137
+ </message>
138
+ </context>
139
+ <context>
140
+ <name>TextInputMenu</name>
141
+ <message>
142
+ <location filename="../components/MenusAndToolbars/TextInputMenu.qml" line="13"/>
143
+ <source>Cut</source>
144
+ <translation type="unfinished"></translation>
145
+ </message>
146
+ <message>
147
+ <location filename="../components/MenusAndToolbars/TextInputMenu.qml" line="20"/>
148
+ <source>Copy</source>
149
+ <translation type="unfinished"></translation>
150
+ </message>
151
+ <message>
152
+ <location filename="../components/MenusAndToolbars/TextInputMenu.qml" line="27"/>
153
+ <source>Paste</source>
154
+ <translation type="unfinished"></translation>
155
+ </message>
156
+ <message>
157
+ <location filename="../components/MenusAndToolbars/TextInputMenu.qml" line="34"/>
158
+ <source>Select All</source>
159
+ <translation type="unfinished"></translation>
160
+ </message>
161
+ </context>
162
+ <context>
163
+ <name>TimePicker</name>
164
+ <message>
165
+ <location filename="../components/DateAndTime/TimePicker.qml" line="10"/>
166
+ <source>AM</source>
167
+ <translation type="unfinished"></translation>
168
+ </message>
169
+ <message>
170
+ <location filename="../components/DateAndTime/TimePicker.qml" line="11"/>
171
+ <source>PM</source>
172
+ <translation type="unfinished"></translation>
173
+ </message>
174
+ <message>
175
+ <location filename="../components/DateAndTime/TimePicker.qml" line="12"/>
176
+ <source>hour</source>
177
+ <translation type="unfinished"></translation>
178
+ </message>
179
+ <message>
180
+ <location filename="../components/DateAndTime/TimePicker.qml" line="13"/>
181
+ <source>minute</source>
182
+ <translation type="unfinished"></translation>
183
+ </message>
184
+ </context>
185
+ <context>
186
+ <name>TitleBar</name>
187
+ <message>
188
+ <location filename="../windows/TitleBar.qml" line="133"/>
189
+ <source>Fluent TitleBar</source>
190
+ <translation type="unfinished"></translation>
191
+ </message>
192
+ </context>
193
+ <context>
194
+ <name>Toast</name>
195
+ <message>
196
+ <location filename="../components/StatusAndInfo/Toast.qml" line="156"/>
197
+ <source>Close</source>
198
+ <translation type="unfinished"></translation>
199
+ </message>
200
+ </context>
201
+ </TS>
Binary file