mindroot 9.10.0__py3-none-any.whl → 9.12.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.

Potentially problematic release.


This version of mindroot might be problematic. Click here for more details.

Files changed (418) hide show
  1. mindroot/__init__.py +1 -0
  2. mindroot/coreplugins/__init__.py +2 -0
  3. mindroot/coreplugins/home/templates/home.jinja2 +1 -0
  4. mindroot/docs/Makefile +20 -0
  5. mindroot/docs/_build/doctrees/chat_with_assistant.doctree +0 -0
  6. mindroot/docs/_build/doctrees/developer_documentation.doctree +0 -0
  7. mindroot/docs/_build/doctrees/environment.pickle +0 -0
  8. mindroot/docs/_build/doctrees/getting_started.doctree +0 -0
  9. mindroot/docs/_build/doctrees/index.doctree +0 -0
  10. mindroot/docs/_build/doctrees/install_plugins_with_tools.doctree +0 -0
  11. mindroot/docs/_build/doctrees/installation.doctree +0 -0
  12. mindroot/docs/_build/doctrees/llm_api_key.doctree +0 -0
  13. mindroot/docs/_build/doctrees/llm_plugin_installation.doctree +0 -0
  14. mindroot/docs/_build/doctrees/programming_task.doctree +0 -0
  15. mindroot/docs/_build/doctrees/source/ahp.doctree +0 -0
  16. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.admin.doctree +0 -0
  17. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.api_keys.doctree +0 -0
  18. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat.doctree +0 -0
  19. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat_avatar.doctree +0 -0
  20. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.check_list.doctree +0 -0
  21. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.credits.doctree +0 -0
  22. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.doctree +0 -0
  23. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.email.doctree +0 -0
  24. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.env_manager.doctree +0 -0
  25. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.events.doctree +0 -0
  26. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.doctree +0 -0
  27. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.handlers.doctree +0 -0
  28. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.jwt_auth.doctree +0 -0
  29. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.l8n.doctree +0 -0
  30. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.mcp_.doctree +0 -0
  31. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.persona.doctree +0 -0
  32. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.startup.doctree +0 -0
  33. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.subscriptions.doctree +0 -0
  34. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.usage.doctree +0 -0
  35. mindroot/docs/_build/doctrees/source/mindroot.coreplugins.user_service.doctree +0 -0
  36. mindroot/docs/_build/doctrees/source/mindroot.doctree +0 -0
  37. mindroot/docs/_build/doctrees/source/mindroot.lib.auth.doctree +0 -0
  38. mindroot/docs/_build/doctrees/source/mindroot.lib.doctree +0 -0
  39. mindroot/docs/_build/doctrees/source/mindroot.lib.json_str_block.doctree +0 -0
  40. mindroot/docs/_build/doctrees/source/mindroot.lib.plugins.doctree +0 -0
  41. mindroot/docs/_build/doctrees/source/mindroot.lib.providers.backup.doctree +0 -0
  42. mindroot/docs/_build/doctrees/source/mindroot.lib.providers.doctree +0 -0
  43. mindroot/docs/_build/doctrees/source/mindroot.registry.doctree +0 -0
  44. mindroot/docs/_build/doctrees/source/modules.doctree +0 -0
  45. mindroot/docs/_build/doctrees/source/mr_agent_expert_instr.doctree +0 -0
  46. mindroot/docs/_build/doctrees/starting_mindroot.doctree +0 -0
  47. mindroot/docs/_build/doctrees/user_documentation.doctree +0 -0
  48. mindroot/docs/_build/html/.buildinfo +4 -0
  49. mindroot/docs/_build/html/.buildinfo.bak +4 -0
  50. mindroot/docs/_build/html/_images/envvar.png +0 -0
  51. mindroot/docs/_build/html/_images/files.png +0 -0
  52. mindroot/docs/_build/html/_images/installopenrouter.png +0 -0
  53. mindroot/docs/_build/html/_images/mood.png +0 -0
  54. mindroot/docs/_build/html/_images/moon.png +0 -0
  55. mindroot/docs/_build/html/_images/openrouter.png +0 -0
  56. mindroot/docs/_build/html/_images/restart.png +0 -0
  57. mindroot/docs/_build/html/_modules/index.html +425 -0
  58. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_importer.html +292 -0
  59. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_router.html +620 -0
  60. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/asset_manager.html +289 -0
  61. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/command_router.html +518 -0
  62. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_catalog_routes.html +275 -0
  63. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_publish_routes.html +581 -0
  64. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_registry_routes.html +623 -0
  65. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_routes.html +347 -0
  66. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mod.html +163 -0
  67. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/oauth_callback_router.html +188 -0
  68. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_handler.html +195 -0
  69. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_router.html +428 -0
  70. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_manager.html +610 -0
  71. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_router.html +146 -0
  72. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_routes.html +230 -0
  73. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/registry_settings_routes.html +253 -0
  74. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/router.html +267 -0
  75. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/server_router.html +271 -0
  76. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/service_models.html +195 -0
  77. mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/settings_router.html +403 -0
  78. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/api_key_manager.html +215 -0
  79. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/mod.html +127 -0
  80. mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/router.html +170 -0
  81. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/commands.html +565 -0
  82. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/mod.html +118 -0
  83. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/models.html +130 -0
  84. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/router.html +571 -0
  85. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/services.html +645 -0
  86. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_manager.html +258 -0
  87. mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_routes.html +409 -0
  88. mindroot/docs/_build/html/_modules/mindroot/coreplugins/check_list/mod.html +460 -0
  89. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/conversion.html +232 -0
  90. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/ledger.html +283 -0
  91. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/mod.html +355 -0
  92. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/models.html +269 -0
  93. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/router.html +306 -0
  94. mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/storage.html +257 -0
  95. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/email_provider.html +159 -0
  96. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/imap_handler.html +343 -0
  97. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/mod.html +210 -0
  98. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/services.html +172 -0
  99. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/smtp_handler.html +188 -0
  100. mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/test_email_service.html +179 -0
  101. mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/mod.html +409 -0
  102. mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/router.html +147 -0
  103. mindroot/docs/_build/html/_modules/mindroot/coreplugins/events/router.html +201 -0
  104. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/agent_ops.html +195 -0
  105. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/index_ops.html +214 -0
  106. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/plugin_ops.html +263 -0
  107. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/publish.html +225 -0
  108. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/mod.html +120 -0
  109. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/models.html +148 -0
  110. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/router.html +184 -0
  111. mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/utils.html +166 -0
  112. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/middleware.html +400 -0
  113. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/mod.html +153 -0
  114. mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/router.html +134 -0
  115. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/language_detection.html +296 -0
  116. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/middleware.html +258 -0
  117. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/mod.html +393 -0
  118. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_enhanced.html +408 -0
  119. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html +379 -0
  120. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_middleware.html +394 -0
  121. mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/utils.html +348 -0
  122. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_commands.html +456 -0
  123. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_manager.html +409 -0
  124. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/dynamic_commands.html +267 -0
  125. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mcp_manager.html +1186 -0
  126. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mod.html +510 -0
  127. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/oauth_storage.html +260 -0
  128. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/server_installer.html +195 -0
  129. mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/testmcpclient.html +217 -0
  130. mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/init_persona.html +117 -0
  131. mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/mod.html +276 -0
  132. mindroot/docs/_build/html/_modules/mindroot/coreplugins/startup/mod.html +122 -0
  133. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/credit_integration.html +163 -0
  134. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/mod.html +1089 -0
  135. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/models.html +261 -0
  136. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/router.html +502 -0
  137. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/storage.html +413 -0
  138. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/stripe_integration.html +178 -0
  139. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/subscription_manager.html +289 -0
  140. mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/webhook_handler.html +327 -0
  141. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/handlers.html +157 -0
  142. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/mod.html +253 -0
  143. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/models.html +141 -0
  144. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/reporting.html +226 -0
  145. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/router.html +228 -0
  146. mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/storage.html +264 -0
  147. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/admin_init.html +234 -0
  148. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/email_service.html +204 -0
  149. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/mod.html +260 -0
  150. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/models.html +148 -0
  151. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/password_reset_service.html +336 -0
  152. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/role_service.html +183 -0
  153. mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/router.html +202 -0
  154. mindroot/docs/_build/html/_modules/mindroot/lib/auth/api_key.html +129 -0
  155. mindroot/docs/_build/html/_modules/mindroot/lib/auth/auth.html +203 -0
  156. mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog.html +259 -0
  157. mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog2.html +500 -0
  158. mindroot/docs/_build/html/_modules/mindroot/lib/butemplates.html +415 -0
  159. mindroot/docs/_build/html/_modules/mindroot/lib/chatcontext.html +401 -0
  160. mindroot/docs/_build/html/_modules/mindroot/lib/chatlog.html +619 -0
  161. mindroot/docs/_build/html/_modules/mindroot/lib/chatlog_optimized.html +655 -0
  162. mindroot/docs/_build/html/_modules/mindroot/lib/json_escape.html +138 -0
  163. mindroot/docs/_build/html/_modules/mindroot/lib/json_str_block/json_str_block.html +213 -0
  164. mindroot/docs/_build/html/_modules/mindroot/lib/parent_templates.html +181 -0
  165. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/installation.html +481 -0
  166. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/l8n_static_handler.html +347 -0
  167. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader.html +403 -0
  168. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader_with_l8n.html +391 -0
  169. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/manifest.html +450 -0
  170. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/mapping.html +127 -0
  171. mindroot/docs/_build/html/_modules/mindroot/lib/plugins/paths.html +215 -0
  172. mindroot/docs/_build/html/_modules/mindroot/lib/plugins_install.html +171 -0
  173. mindroot/docs/_build/html/_modules/mindroot/lib/providers/commands.html +125 -0
  174. mindroot/docs/_build/html/_modules/mindroot/lib/providers/hooks.html +117 -0
  175. mindroot/docs/_build/html/_modules/mindroot/lib/providers/missing.html +169 -0
  176. mindroot/docs/_build/html/_modules/mindroot/lib/providers/model_preferences_v2.html +291 -0
  177. mindroot/docs/_build/html/_modules/mindroot/lib/providers/services.html +122 -0
  178. mindroot/docs/_build/html/_modules/mindroot/lib/providers.html +465 -0
  179. mindroot/docs/_build/html/_modules/mindroot/lib/route_decorators.html +175 -0
  180. mindroot/docs/_build/html/_modules/mindroot/lib/session_files.html +142 -0
  181. mindroot/docs/_build/html/_modules/mindroot/lib/streamcmd.html +246 -0
  182. mindroot/docs/_build/html/_modules/mindroot/lib/templates.html +677 -0
  183. mindroot/docs/_build/html/_modules/mindroot/lib/token_counter.html +326 -0
  184. mindroot/docs/_build/html/_modules/mindroot/migrate.html +153 -0
  185. mindroot/docs/_build/html/_modules/mindroot/registry/component_manager.html +140 -0
  186. mindroot/docs/_build/html/_modules/mindroot/registry/data_access.html +302 -0
  187. mindroot/docs/_build/html/_modules/mindroot/server.html +317 -0
  188. mindroot/docs/_build/html/_modules/mindroot/server_missing_normal_args.html +322 -0
  189. mindroot/docs/_build/html/_modules/mindroot/server_prev.html +298 -0
  190. mindroot/docs/_build/html/_sources/chat_with_assistant.rst.txt +14 -0
  191. mindroot/docs/_build/html/_sources/developer_documentation.rst.txt +26 -0
  192. mindroot/docs/_build/html/_sources/getting_started.rst.txt +139 -0
  193. mindroot/docs/_build/html/_sources/index.rst.txt +38 -0
  194. mindroot/docs/_build/html/_sources/install_plugins_with_tools.rst.txt +25 -0
  195. mindroot/docs/_build/html/_sources/installation.rst.txt +21 -0
  196. mindroot/docs/_build/html/_sources/llm_api_key.rst.txt +22 -0
  197. mindroot/docs/_build/html/_sources/llm_plugin_installation.rst.txt +27 -0
  198. mindroot/docs/_build/html/_sources/programming_task.rst.txt +10 -0
  199. mindroot/docs/_build/html/_sources/source/ahp.rst.txt +7 -0
  200. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.admin.rst.txt +189 -0
  201. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.api_keys.rst.txt +45 -0
  202. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.chat.rst.txt +93 -0
  203. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.chat_avatar.rst.txt +10 -0
  204. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.check_list.rst.txt +21 -0
  205. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.credits.rst.txt +61 -0
  206. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.email.rst.txt +77 -0
  207. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.env_manager.rst.txt +29 -0
  208. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.events.rst.txt +29 -0
  209. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.index.handlers.rst.txt +45 -0
  210. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.index.rst.txt +53 -0
  211. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.jwt_auth.rst.txt +45 -0
  212. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.l8n.rst.txt +109 -0
  213. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.mcp_.rst.txt +93 -0
  214. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.persona.rst.txt +29 -0
  215. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.rst.txt +35 -0
  216. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.startup.rst.txt +21 -0
  217. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.subscriptions.rst.txt +85 -0
  218. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.usage.rst.txt +61 -0
  219. mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.user_service.rst.txt +69 -0
  220. mindroot/docs/_build/html/_sources/source/mindroot.lib.auth.rst.txt +29 -0
  221. mindroot/docs/_build/html/_sources/source/mindroot.lib.json_str_block.rst.txt +21 -0
  222. mindroot/docs/_build/html/_sources/source/mindroot.lib.plugins.rst.txt +69 -0
  223. mindroot/docs/_build/html/_sources/source/mindroot.lib.providers.backup.rst.txt +10 -0
  224. mindroot/docs/_build/html/_sources/source/mindroot.lib.providers.rst.txt +61 -0
  225. mindroot/docs/_build/html/_sources/source/mindroot.lib.rst.txt +152 -0
  226. mindroot/docs/_build/html/_sources/source/mindroot.registry.rst.txt +29 -0
  227. mindroot/docs/_build/html/_sources/source/mindroot.rst.txt +54 -0
  228. mindroot/docs/_build/html/_sources/source/modules.rst.txt +7 -0
  229. mindroot/docs/_build/html/_sources/source/mr_agent_expert_instr.rst.txt +7 -0
  230. mindroot/docs/_build/html/_sources/starting_mindroot.rst.txt +12 -0
  231. mindroot/docs/_build/html/_sources/user_documentation.rst.txt +16 -0
  232. mindroot/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +123 -0
  233. mindroot/docs/_build/html/_static/basic.css +906 -0
  234. mindroot/docs/_build/html/_static/css/badge_only.css +1 -0
  235. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  236. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  237. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  238. mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  239. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  240. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  241. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  242. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  243. mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  244. mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  245. mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  246. mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
  247. mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  248. mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  249. mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  250. mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
  251. mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  252. mindroot/docs/_build/html/_static/css/theme.css +4 -0
  253. mindroot/docs/_build/html/_static/custom.css +19 -0
  254. mindroot/docs/_build/html/_static/debug.css +69 -0
  255. mindroot/docs/_build/html/_static/doctools.js +149 -0
  256. mindroot/docs/_build/html/_static/documentation_options.js +13 -0
  257. mindroot/docs/_build/html/_static/file.png +0 -0
  258. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
  259. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
  260. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
  261. mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
  262. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  263. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  264. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  265. mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  266. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
  267. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
  268. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
  269. mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
  270. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
  271. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
  272. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
  273. mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
  274. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  275. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  276. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  277. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  278. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  279. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  280. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  281. mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  282. mindroot/docs/_build/html/_static/jquery.js +2 -0
  283. mindroot/docs/_build/html/_static/js/badge_only.js +1 -0
  284. mindroot/docs/_build/html/_static/js/theme.js +1 -0
  285. mindroot/docs/_build/html/_static/js/versions.js +228 -0
  286. mindroot/docs/_build/html/_static/language_data.js +192 -0
  287. mindroot/docs/_build/html/_static/minus.png +0 -0
  288. mindroot/docs/_build/html/_static/plus.png +0 -0
  289. mindroot/docs/_build/html/_static/pygments.css +232 -0
  290. mindroot/docs/_build/html/_static/scripts/furo-extensions.js +0 -0
  291. mindroot/docs/_build/html/_static/scripts/furo.js +3 -0
  292. mindroot/docs/_build/html/_static/scripts/furo.js.LICENSE.txt +7 -0
  293. mindroot/docs/_build/html/_static/scripts/furo.js.map +1 -0
  294. mindroot/docs/_build/html/_static/searchtools.js +635 -0
  295. mindroot/docs/_build/html/_static/skeleton.css +296 -0
  296. mindroot/docs/_build/html/_static/sphinx_highlight.js +154 -0
  297. mindroot/docs/_build/html/_static/styles/furo-extensions.css +2 -0
  298. mindroot/docs/_build/html/_static/styles/furo-extensions.css.map +1 -0
  299. mindroot/docs/_build/html/_static/styles/furo.css +2 -0
  300. mindroot/docs/_build/html/_static/styles/furo.css.map +1 -0
  301. mindroot/docs/_build/html/chat_with_assistant.html +329 -0
  302. mindroot/docs/_build/html/developer_documentation.html +338 -0
  303. mindroot/docs/_build/html/genindex.html +4690 -0
  304. mindroot/docs/_build/html/getting_started.html +423 -0
  305. mindroot/docs/_build/html/index.html +357 -0
  306. mindroot/docs/_build/html/install_plugins_with_tools.html +336 -0
  307. mindroot/docs/_build/html/installation.html +330 -0
  308. mindroot/docs/_build/html/llm_api_key.html +337 -0
  309. mindroot/docs/_build/html/llm_plugin_installation.html +338 -0
  310. mindroot/docs/_build/html/objects.inv +0 -0
  311. mindroot/docs/_build/html/programming_task.html +326 -0
  312. mindroot/docs/_build/html/py-modindex.html +1307 -0
  313. mindroot/docs/_build/html/search.html +307 -0
  314. mindroot/docs/_build/html/searchindex.js +1 -0
  315. mindroot/docs/_build/html/source/ahp.html +302 -0
  316. mindroot/docs/_build/html/source/mindroot.coreplugins.admin.html +2212 -0
  317. mindroot/docs/_build/html/source/mindroot.coreplugins.api_keys.html +532 -0
  318. mindroot/docs/_build/html/source/mindroot.coreplugins.chat.html +1185 -0
  319. mindroot/docs/_build/html/source/mindroot.coreplugins.chat_avatar.html +311 -0
  320. mindroot/docs/_build/html/source/mindroot.coreplugins.check_list.html +441 -0
  321. mindroot/docs/_build/html/source/mindroot.coreplugins.credits.html +879 -0
  322. mindroot/docs/_build/html/source/mindroot.coreplugins.email.html +554 -0
  323. mindroot/docs/_build/html/source/mindroot.coreplugins.env_manager.html +447 -0
  324. mindroot/docs/_build/html/source/mindroot.coreplugins.events.html +338 -0
  325. mindroot/docs/_build/html/source/mindroot.coreplugins.html +1785 -0
  326. mindroot/docs/_build/html/source/mindroot.coreplugins.index.handlers.html +481 -0
  327. mindroot/docs/_build/html/source/mindroot.coreplugins.index.html +696 -0
  328. mindroot/docs/_build/html/source/mindroot.coreplugins.jwt_auth.html +432 -0
  329. mindroot/docs/_build/html/source/mindroot.coreplugins.l8n.html +933 -0
  330. mindroot/docs/_build/html/source/mindroot.coreplugins.mcp_.html +1271 -0
  331. mindroot/docs/_build/html/source/mindroot.coreplugins.persona.html +386 -0
  332. mindroot/docs/_build/html/source/mindroot.coreplugins.startup.html +327 -0
  333. mindroot/docs/_build/html/source/mindroot.coreplugins.subscriptions.html +1631 -0
  334. mindroot/docs/_build/html/source/mindroot.coreplugins.usage.html +677 -0
  335. mindroot/docs/_build/html/source/mindroot.coreplugins.user_service.html +681 -0
  336. mindroot/docs/_build/html/source/mindroot.html +811 -0
  337. mindroot/docs/_build/html/source/mindroot.lib.auth.html +407 -0
  338. mindroot/docs/_build/html/source/mindroot.lib.html +2027 -0
  339. mindroot/docs/_build/html/source/mindroot.lib.json_str_block.html +344 -0
  340. mindroot/docs/_build/html/source/mindroot.lib.plugins.html +1050 -0
  341. mindroot/docs/_build/html/source/mindroot.lib.providers.backup.html +324 -0
  342. mindroot/docs/_build/html/source/mindroot.lib.providers.html +572 -0
  343. mindroot/docs/_build/html/source/mindroot.registry.html +501 -0
  344. mindroot/docs/_build/html/source/modules.html +377 -0
  345. mindroot/docs/_build/html/source/mr_agent_expert_instr.html +302 -0
  346. mindroot/docs/_build/html/starting_mindroot.html +325 -0
  347. mindroot/docs/_build/html/user_documentation.html +333 -0
  348. mindroot/docs/_static/custom.css +19 -0
  349. mindroot/docs/chat_with_assistant.rst +14 -0
  350. mindroot/docs/conf.py +54 -0
  351. mindroot/docs/data/agents/local/Assistant/agent.json +27 -0
  352. mindroot/docs/data/agents/local/SysAdmin/agent.json +33 -0
  353. mindroot/docs/data/equivalent_flags.json +1 -0
  354. mindroot/docs/data/mcp/servers.json +9 -0
  355. mindroot/docs/data/models.json +57 -0
  356. mindroot/docs/data/plugin_manifest.json +95 -0
  357. mindroot/docs/data/preferred_models.json +12 -0
  358. mindroot/docs/data/providers.json +62 -0
  359. mindroot/docs/developer_documentation.rst +26 -0
  360. mindroot/docs/envvar.png +0 -0
  361. mindroot/docs/files.png +0 -0
  362. mindroot/docs/getting_started.rst +139 -0
  363. mindroot/docs/index.rst +38 -0
  364. mindroot/docs/install_plugins_with_tools.rst +25 -0
  365. mindroot/docs/installation.rst +21 -0
  366. mindroot/docs/installopenrouter.png +0 -0
  367. mindroot/docs/llm_api_key.rst +22 -0
  368. mindroot/docs/llm_plugin_installation.rst +27 -0
  369. mindroot/docs/make.bat +35 -0
  370. mindroot/docs/mood.png +0 -0
  371. mindroot/docs/moon.png +0 -0
  372. mindroot/docs/openrouter.png +0 -0
  373. mindroot/docs/personas/local/Assistant/avatar.png +0 -0
  374. mindroot/docs/personas/local/Assistant/faceref.png +0 -0
  375. mindroot/docs/personas/local/Assistant/persona.json +7 -0
  376. mindroot/docs/programming_task.rst +10 -0
  377. mindroot/docs/restart.png +0 -0
  378. mindroot/docs/source/ahp.rst +7 -0
  379. mindroot/docs/source/mindroot.coreplugins.admin.rst +189 -0
  380. mindroot/docs/source/mindroot.coreplugins.api_keys.rst +45 -0
  381. mindroot/docs/source/mindroot.coreplugins.chat.rst +93 -0
  382. mindroot/docs/source/mindroot.coreplugins.chat_avatar.rst +10 -0
  383. mindroot/docs/source/mindroot.coreplugins.check_list.rst +21 -0
  384. mindroot/docs/source/mindroot.coreplugins.credits.rst +61 -0
  385. mindroot/docs/source/mindroot.coreplugins.email.rst +77 -0
  386. mindroot/docs/source/mindroot.coreplugins.env_manager.rst +29 -0
  387. mindroot/docs/source/mindroot.coreplugins.events.rst +29 -0
  388. mindroot/docs/source/mindroot.coreplugins.index.handlers.rst +45 -0
  389. mindroot/docs/source/mindroot.coreplugins.index.rst +53 -0
  390. mindroot/docs/source/mindroot.coreplugins.jwt_auth.rst +45 -0
  391. mindroot/docs/source/mindroot.coreplugins.l8n.rst +109 -0
  392. mindroot/docs/source/mindroot.coreplugins.mcp_.rst +93 -0
  393. mindroot/docs/source/mindroot.coreplugins.persona.rst +29 -0
  394. mindroot/docs/source/mindroot.coreplugins.rst +35 -0
  395. mindroot/docs/source/mindroot.coreplugins.startup.rst +21 -0
  396. mindroot/docs/source/mindroot.coreplugins.subscriptions.rst +85 -0
  397. mindroot/docs/source/mindroot.coreplugins.usage.rst +61 -0
  398. mindroot/docs/source/mindroot.coreplugins.user_service.rst +69 -0
  399. mindroot/docs/source/mindroot.lib.auth.rst +29 -0
  400. mindroot/docs/source/mindroot.lib.json_str_block.rst +21 -0
  401. mindroot/docs/source/mindroot.lib.plugins.rst +69 -0
  402. mindroot/docs/source/mindroot.lib.providers.backup.rst +10 -0
  403. mindroot/docs/source/mindroot.lib.providers.rst +61 -0
  404. mindroot/docs/source/mindroot.lib.rst +152 -0
  405. mindroot/docs/source/mindroot.registry.rst +29 -0
  406. mindroot/docs/source/mindroot.rst +54 -0
  407. mindroot/docs/source/modules.rst +7 -0
  408. mindroot/docs/source/mr_agent_expert_instr.rst +7 -0
  409. mindroot/docs/starting_mindroot.rst +12 -0
  410. mindroot/docs/user_documentation.rst +16 -0
  411. mindroot/lib/plugins/default_plugin_manifest.json +1 -1
  412. mindroot/server.py +10 -1
  413. {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/METADATA +1 -1
  414. {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/RECORD +418 -10
  415. {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/WHEEL +0 -0
  416. {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/entry_points.txt +0 -0
  417. {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/licenses/LICENSE +0 -0
  418. {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,933 @@
1
+ <!doctype html>
2
+ <html class="no-js" lang="en" data-content_root="../">
3
+ <head><meta charset="utf-8"/>
4
+ <meta name="viewport" content="width=device-width,initial-scale=1"/>
5
+ <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" />
7
+
8
+ <!-- Generated with Sphinx 8.2.3 and Furo 2025.07.19 -->
9
+ <title>mindroot.coreplugins.l8n package - MindRoot 9.10.0 documentation</title>
10
+ <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d111a655" />
11
+ <link rel="stylesheet" type="text/css" href="../_static/styles/furo.css?v=25af2a20" />
12
+ <link rel="stylesheet" type="text/css" href="../_static/styles/furo-extensions.css?v=8dab3a3b" />
13
+ <link rel="stylesheet" type="text/css" href="../_static/custom.css?v=f4b9d74b" />
14
+
15
+
16
+
17
+
18
+ <style>
19
+ body {
20
+ --color-code-background: #f2f2f2;
21
+ --color-code-foreground: #1e1e1e;
22
+ --color-brand-primary: #007acc;
23
+ --color-brand-content: #007acc;
24
+
25
+ }
26
+ @media not print {
27
+ body[data-theme="dark"] {
28
+ --color-code-background: #2b2b2b;
29
+ --color-code-foreground: #f8f8f2;
30
+ --color-brand-primary: #ff7b72;
31
+ --color-brand-content: #ff7b72;
32
+
33
+ }
34
+ @media (prefers-color-scheme: dark) {
35
+ body:not([data-theme="light"]) {
36
+ --color-code-background: #2b2b2b;
37
+ --color-code-foreground: #f8f8f2;
38
+ --color-brand-primary: #ff7b72;
39
+ --color-brand-content: #ff7b72;
40
+
41
+ }
42
+ }
43
+ }
44
+ </style></head>
45
+ <body>
46
+
47
+ <script>
48
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
49
+ </script>
50
+
51
+
52
+ <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
53
+ <symbol id="svg-toc" viewBox="0 0 24 24">
54
+ <title>Contents</title>
55
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
56
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
57
+ </svg>
58
+ </symbol>
59
+ <symbol id="svg-menu" viewBox="0 0 24 24">
60
+ <title>Menu</title>
61
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
62
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
63
+ <line x1="3" y1="12" x2="21" y2="12"></line>
64
+ <line x1="3" y1="6" x2="21" y2="6"></line>
65
+ <line x1="3" y1="18" x2="21" y2="18"></line>
66
+ </svg>
67
+ </symbol>
68
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
69
+ <title>Expand</title>
70
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
71
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
72
+ <polyline points="9 18 15 12 9 6"></polyline>
73
+ </svg>
74
+ </symbol>
75
+ <symbol id="svg-sun" viewBox="0 0 24 24">
76
+ <title>Light mode</title>
77
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
78
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
79
+ <circle cx="12" cy="12" r="5"></circle>
80
+ <line x1="12" y1="1" x2="12" y2="3"></line>
81
+ <line x1="12" y1="21" x2="12" y2="23"></line>
82
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
83
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
84
+ <line x1="1" y1="12" x2="3" y2="12"></line>
85
+ <line x1="21" y1="12" x2="23" y2="12"></line>
86
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
87
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
88
+ </svg>
89
+ </symbol>
90
+ <symbol id="svg-moon" viewBox="0 0 24 24">
91
+ <title>Dark mode</title>
92
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
93
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
94
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
95
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
96
+ </svg>
97
+ </symbol>
98
+ <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
99
+ <title>Auto light/dark, in light mode</title>
100
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
101
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
102
+ class="icon-custom-derived-from-feather-sun-and-tabler-moon">
103
+ <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
104
+ <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
105
+ <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
106
+ <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
107
+ <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
108
+ <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
109
+ <line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
110
+ <line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
111
+ <line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
112
+ <circle cx="14.5" cy="9.55" r="3.6"/>
113
+ </svg>
114
+ </symbol>
115
+ <symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
116
+ <title>Auto light/dark, in dark mode</title>
117
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
118
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
119
+ class="icon-custom-derived-from-feather-sun-and-tabler-moon">
120
+ <path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
121
+ <line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
122
+ <line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
123
+ <line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
124
+ <line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
125
+ <line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
126
+ <line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
127
+ <line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
128
+ <line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
129
+ <circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
130
+ </svg>
131
+ </symbol>
132
+ <symbol id="svg-pencil" viewBox="0 0 24 24">
133
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
134
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
135
+ <path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
136
+ <path d="M13.5 6.5l4 4" />
137
+ <path d="M20 21l2 -2l-2 -2" />
138
+ <path d="M17 17l-2 2l2 2" />
139
+ </svg>
140
+ </symbol>
141
+ <symbol id="svg-eye" viewBox="0 0 24 24">
142
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
143
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
144
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
145
+ <path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
146
+ <path
147
+ d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
148
+ <path d="M20 21l2 -2l-2 -2" />
149
+ <path d="M17 17l-2 2l2 2" />
150
+ </svg>
151
+ </symbol>
152
+ </svg>
153
+
154
+ <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
155
+ <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
156
+ <label class="overlay sidebar-overlay" for="__navigation">
157
+ <div class="visually-hidden">Hide navigation sidebar</div>
158
+ </label>
159
+ <label class="overlay toc-overlay" for="__toc">
160
+ <div class="visually-hidden">Hide table of contents sidebar</div>
161
+ </label>
162
+
163
+ <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
164
+
165
+
166
+
167
+ <div class="page">
168
+ <header class="mobile-header">
169
+ <div class="header-left">
170
+ <label class="nav-overlay-icon" for="__navigation">
171
+ <div class="visually-hidden">Toggle site navigation sidebar</div>
172
+ <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
173
+ </label>
174
+ </div>
175
+ <div class="header-center">
176
+ <a href="../index.html"><div class="brand">MindRoot 9.10.0 documentation</div></a>
177
+ </div>
178
+ <div class="header-right">
179
+ <div class="theme-toggle-container theme-toggle-header">
180
+ <button class="theme-toggle">
181
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
182
+ <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
183
+ <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
184
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
185
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
186
+ </button>
187
+ </div>
188
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
189
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
190
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
191
+ </label>
192
+ </div>
193
+ </header>
194
+ <aside class="sidebar-drawer">
195
+ <div class="sidebar-container">
196
+
197
+ <div class="sidebar-sticky"><a class="sidebar-brand" href="../index.html">
198
+
199
+
200
+ </a><form class="sidebar-search-container" method="get" action="../search.html" role="search">
201
+ <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
202
+ <input type="hidden" name="check_keywords" value="yes">
203
+ <input type="hidden" name="area" value="default">
204
+ </form>
205
+ <div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
206
+ <p class="caption" role="heading"><span class="caption-text">User Documentation:</span></p>
207
+ <ul>
208
+ <li class="toctree-l1 has-children"><a class="reference internal" href="../user_documentation.html">User Documentation</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle navigation of User Documentation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
209
+ <li class="toctree-l2"><a class="reference internal" href="../installation.html">Installation</a></li>
210
+ <li class="toctree-l2"><a class="reference internal" href="../starting_mindroot.html">Starting MindRoot</a></li>
211
+ <li class="toctree-l2"><a class="reference internal" href="../llm_plugin_installation.html">LLM Plugin Installation</a></li>
212
+ <li class="toctree-l2"><a class="reference internal" href="../llm_api_key.html">LLM API Key</a></li>
213
+ <li class="toctree-l2"><a class="reference internal" href="../chat_with_assistant.html">Chat with Assistant</a></li>
214
+ <li class="toctree-l2"><a class="reference internal" href="../install_plugins_with_tools.html">Install Plugins with Tools</a></li>
215
+ <li class="toctree-l2"><a class="reference internal" href="../programming_task.html">Give Assistant a Programming Task</a></li>
216
+ </ul>
217
+ </li>
218
+ </ul>
219
+ <p class="caption" role="heading"><span class="caption-text">Developer Documentation:</span></p>
220
+ <ul>
221
+ <li class="toctree-l1"><a class="reference internal" href="../developer_documentation.html">Developer Documentation</a></li>
222
+ </ul>
223
+
224
+ </div>
225
+ </div>
226
+
227
+ </div>
228
+
229
+ </div>
230
+ </aside>
231
+ <div class="main">
232
+ <div class="content">
233
+ <div class="article-container">
234
+ <a href="#" class="back-to-top muted-link">
235
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
236
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
237
+ </svg>
238
+ <span>Back to top</span>
239
+ </a>
240
+ <div class="content-icon-container">
241
+ <div class="view-this-page">
242
+ <a class="muted-link" href="../_sources/source/mindroot.coreplugins.l8n.rst.txt" title="View this page">
243
+ <svg><use href="#svg-eye"></use></svg>
244
+ <span class="visually-hidden">View this page</span>
245
+ </a>
246
+ </div>
247
+ <div class="theme-toggle-container theme-toggle-content">
248
+ <button class="theme-toggle">
249
+ <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
250
+ <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
251
+ <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
252
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
253
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
254
+ </button>
255
+ </div>
256
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
257
+ <div class="visually-hidden">Toggle table of contents sidebar</div>
258
+ <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
259
+ </label>
260
+ </div>
261
+ <article role="main" id="furo-main-content">
262
+ <section id="mindroot-coreplugins-l8n-package">
263
+ <h1>mindroot.coreplugins.l8n package<a class="headerlink" href="#mindroot-coreplugins-l8n-package" title="Link to this heading">¶</a></h1>
264
+ <section id="submodules">
265
+ <h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
266
+ </section>
267
+ <section id="module-mindroot.coreplugins.l8n.debug_loader">
268
+ <span id="mindroot-coreplugins-l8n-debug-loader-module"></span><h2>mindroot.coreplugins.l8n.debug_loader module<a class="headerlink" href="#module-mindroot.coreplugins.l8n.debug_loader" title="Link to this heading">¶</a></h2>
269
+ <p>Debug script to simulate the plugin loader behavior.</p>
270
+ </section>
271
+ <section id="module-mindroot.coreplugins.l8n.debug_middleware">
272
+ <span id="mindroot-coreplugins-l8n-debug-middleware-module"></span><h2>mindroot.coreplugins.l8n.debug_middleware module<a class="headerlink" href="#module-mindroot.coreplugins.l8n.debug_middleware" title="Link to this heading">¶</a></h2>
273
+ <p>Debug script to test middleware import and functionality.</p>
274
+ </section>
275
+ <section id="module-mindroot.coreplugins.l8n.l8n_constants">
276
+ <span id="mindroot-coreplugins-l8n-l8n-constants-module"></span><h2>mindroot.coreplugins.l8n.l8n_constants module<a class="headerlink" href="#module-mindroot.coreplugins.l8n.l8n_constants" title="Link to this heading">¶</a></h2>
277
+ </section>
278
+ <section id="module-mindroot.coreplugins.l8n.language_detection">
279
+ <span id="mindroot-coreplugins-l8n-language-detection-module"></span><h2>mindroot.coreplugins.l8n.language_detection module<a class="headerlink" href="#module-mindroot.coreplugins.l8n.language_detection" title="Link to this heading">¶</a></h2>
280
+ <dl class="py function">
281
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.language_detection.get_current_language_from_request">
282
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.language_detection.</span></span><span class="sig-name descname"><span class="pre">get_current_language_from_request</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/language_detection.html#get_current_language_from_request"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.language_detection.get_current_language_from_request" title="Link to this definition">¶</a></dt>
283
+ <dd><p>Get the current language from various request sources.</p>
284
+ <p>This function checks multiple sources in order of priority:
285
+ 1. Environment variable MINDROOT_LANGUAGE
286
+ 2. FastAPI request context (if available)
287
+ 3. HTTP Accept-Language header
288
+ 4. URL parameters (?lang=es)
289
+ 5. Cookie values
290
+ 6. User preferences from database/session</p>
291
+ <dl class="field-list simple">
292
+ <dt class="field-odd">Returns<span class="colon">:</span></dt>
293
+ <dd class="field-odd"><p>Language code (e.g., ‘en’, ‘es’, ‘fr’)</p>
294
+ </dd>
295
+ </dl>
296
+ </dd></dl>
297
+
298
+ <dl class="py function">
299
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.language_detection.get_fallback_language">
300
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.language_detection.</span></span><span class="sig-name descname"><span class="pre">get_fallback_language</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">language</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/language_detection.html#get_fallback_language"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.language_detection.get_fallback_language" title="Link to this definition">¶</a></dt>
301
+ <dd><p>Get a fallback language if the requested language is not supported.</p>
302
+ <dl class="field-list simple">
303
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
304
+ <dd class="field-odd"><p><strong>language</strong> – Requested language code</p>
305
+ </dd>
306
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
307
+ <dd class="field-even"><p>Fallback language code</p>
308
+ </dd>
309
+ </dl>
310
+ </dd></dl>
311
+
312
+ <dl class="py function">
313
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.language_detection.get_supported_languages">
314
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.language_detection.</span></span><span class="sig-name descname"><span class="pre">get_supported_languages</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">list</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/language_detection.html#get_supported_languages"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.language_detection.get_supported_languages" title="Link to this definition">¶</a></dt>
315
+ <dd><p>Get the list of supported languages.</p>
316
+ <dl class="field-list simple">
317
+ <dt class="field-odd">Returns<span class="colon">:</span></dt>
318
+ <dd class="field-odd"><p>List of supported language codes</p>
319
+ </dd>
320
+ </dl>
321
+ </dd></dl>
322
+
323
+ <dl class="py function">
324
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.language_detection.is_language_supported">
325
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.language_detection.</span></span><span class="sig-name descname"><span class="pre">is_language_supported</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">language</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/language_detection.html#is_language_supported"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.language_detection.is_language_supported" title="Link to this definition">¶</a></dt>
326
+ <dd><p>Check if a language is supported.</p>
327
+ <dl class="field-list simple">
328
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
329
+ <dd class="field-odd"><p><strong>language</strong> – Language code to check</p>
330
+ </dd>
331
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
332
+ <dd class="field-even"><p>True if language is supported, False otherwise</p>
333
+ </dd>
334
+ </dl>
335
+ </dd></dl>
336
+
337
+ <dl class="py function">
338
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.language_detection.set_language_for_request">
339
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.language_detection.</span></span><span class="sig-name descname"><span class="pre">set_language_for_request</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">language</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/language_detection.html#set_language_for_request"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.language_detection.set_language_for_request" title="Link to this definition">¶</a></dt>
340
+ <dd><p>Set the language for the current request context.</p>
341
+ <p>This function would be called by middleware or route handlers
342
+ to set the language for the current request.</p>
343
+ <dl class="field-list simple">
344
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
345
+ <dd class="field-odd"><p><strong>language</strong> – Language code to set</p>
346
+ </dd>
347
+ </dl>
348
+ </dd></dl>
349
+
350
+ </section>
351
+ <section id="module-mindroot.coreplugins.l8n.middleware">
352
+ <span id="mindroot-coreplugins-l8n-middleware-module"></span><h2>mindroot.coreplugins.l8n.middleware module<a class="headerlink" href="#module-mindroot.coreplugins.l8n.middleware" title="Link to this heading">¶</a></h2>
353
+ <dl class="py function">
354
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.middleware.detect_language_from_request">
355
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.middleware.</span></span><span class="sig-name descname"><span class="pre">detect_language_from_request</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Request</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/middleware.html#detect_language_from_request"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.middleware.detect_language_from_request" title="Link to this definition">¶</a></dt>
356
+ <dd><p>Detect the preferred language from a FastAPI request.</p>
357
+ <p>Checks multiple sources in order of priority:
358
+ 1. URL parameter (?lang=es)
359
+ 2. Cookie value (mindroot_language)
360
+ 3. Accept-Language header
361
+ 4. Environment variable
362
+ 5. Default to ‘en’</p>
363
+ <dl class="field-list simple">
364
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
365
+ <dd class="field-odd"><p><strong>request</strong> – FastAPI Request object</p>
366
+ </dd>
367
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
368
+ <dd class="field-even"><p>Detected language code</p>
369
+ </dd>
370
+ </dl>
371
+ </dd></dl>
372
+
373
+ <dl class="py function">
374
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.middleware.get_request_language">
375
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.middleware.</span></span><span class="sig-name descname"><span class="pre">get_request_language</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/middleware.html#get_request_language"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.middleware.get_request_language" title="Link to this definition">¶</a></dt>
376
+ <dd><p>Get the language that was detected for the current request.</p>
377
+ <p>This function is called by the monkey patch system to get the
378
+ language for template translation.</p>
379
+ <dl class="field-list simple">
380
+ <dt class="field-odd">Returns<span class="colon">:</span></dt>
381
+ <dd class="field-odd"><p>Language code for the current request</p>
382
+ </dd>
383
+ </dl>
384
+ </dd></dl>
385
+
386
+ <dl class="py function">
387
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.middleware.middleware">
388
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.middleware.</span></span><span class="sig-name descname"><span class="pre">middleware</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Request</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">call_next</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/middleware.html#middleware"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.middleware.middleware" title="Link to this definition">¶</a></dt>
389
+ <dd><p>L8n middleware for language detection and setting.</p>
390
+ <p>This middleware runs early in the request pipeline to:
391
+ 1. Detect the preferred language for the request
392
+ 2. Store it globally for use by the template system
393
+ 3. Set it in the request state for other components</p>
394
+ <dl class="field-list simple">
395
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
396
+ <dd class="field-odd"><ul class="simple">
397
+ <li><p><strong>request</strong> – FastAPI Request object</p></li>
398
+ <li><p><strong>call_next</strong> – Next middleware/handler in the chain</p></li>
399
+ </ul>
400
+ </dd>
401
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
402
+ <dd class="field-even"><p>Response from the next handler</p>
403
+ </dd>
404
+ </dl>
405
+ </dd></dl>
406
+
407
+ </section>
408
+ <section id="module-mindroot.coreplugins.l8n.mod">
409
+ <span id="mindroot-coreplugins-l8n-mod-module"></span><h2>mindroot.coreplugins.l8n.mod module<a class="headerlink" href="#module-mindroot.coreplugins.l8n.mod" title="Link to this heading">¶</a></h2>
410
+ <dl class="py function">
411
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.mod.append_localized_file">
412
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.mod.</span></span><span class="sig-name descname"><span class="pre">append_localized_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">original_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">content</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/mod.html#append_localized_file"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.mod.append_localized_file" title="Link to this definition">¶</a></dt>
413
+ <dd><p>Append content to an existing localized file.</p>
414
+ <p>Use this for large files that need to be built incrementally.
415
+ Follow the same placeholder format rules as write_localized_file.</p>
416
+ <dl class="field-list simple">
417
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
418
+ <dd class="field-odd"><ul class="simple">
419
+ <li><p><strong>original_path</strong> – Absolute path to the original file</p></li>
420
+ <li><p><strong>content</strong> – Content to append with __TRANSLATE_key__ placeholders</p></li>
421
+ <li><p><strong>context</strong> – Command context (optional)</p></li>
422
+ </ul>
423
+ </dd>
424
+ </dl>
425
+ <p class="rubric">Example</p>
426
+ <p># First write the beginning
427
+ await write_localized_file(</p>
428
+ <blockquote>
429
+ <div><p>“/path/to/large_template.jinja2”,
430
+ “&lt;html&gt;&lt;head&gt;&lt;title&gt;__TRANSLATE_page_title__&lt;/title&gt;&lt;/head&gt;”</p>
431
+ </div></blockquote>
432
+ <p>)</p>
433
+ <p># Then append more sections
434
+ await append_localized_file(</p>
435
+ <blockquote>
436
+ <div><p>“/path/to/large_template.jinja2”,
437
+ “&lt;body&gt;&lt;h1&gt;__TRANSLATE_main_heading__&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;”</p>
438
+ </div></blockquote>
439
+ <p>)</p>
440
+ </dd></dl>
441
+
442
+ <dl class="py function">
443
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.mod.get_translations">
444
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.mod.</span></span><span class="sig-name descname"><span class="pre">get_translations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">original_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">language</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/mod.html#get_translations"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.mod.get_translations" title="Link to this definition">¶</a></dt>
445
+ <dd><p>Get translations for a specific plugin and language.</p>
446
+ <dl class="field-list simple">
447
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
448
+ <dd class="field-odd"><ul class="simple">
449
+ <li><p><strong>original_path</strong> – Absolute path to a file in the plugin (optional)
450
+ If not provided, returns all cached translations</p></li>
451
+ <li><p><strong>language</strong> – Language code to get translations for (optional)</p></li>
452
+ <li><p><strong>context</strong> – Command context (optional)</p></li>
453
+ </ul>
454
+ </dd>
455
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
456
+ <dd class="field-even"><p>Dictionary of translations</p>
457
+ </dd>
458
+ </dl>
459
+ <p class="rubric">Examples</p>
460
+ <p># Get all translations for a plugin
461
+ translations = await get_translations(</p>
462
+ <blockquote>
463
+ <div><p>“/files/mindroot/src/mindroot/coreplugins/chat/templates/chat.jinja2”</p>
464
+ </div></blockquote>
465
+ <p>)</p>
466
+ <p># Get Spanish translations for a plugin
467
+ spanish = await get_translations(</p>
468
+ <blockquote>
469
+ <div><p>“/files/mindroot/src/mindroot/coreplugins/chat/templates/chat.jinja2”,
470
+ ‘es’</p>
471
+ </div></blockquote>
472
+ <p>)</p>
473
+ <p># Get all cached translations
474
+ all_cached = await get_translations()</p>
475
+ </dd></dl>
476
+
477
+ <dl class="py function">
478
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.mod.list_localized_files">
479
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.mod.</span></span><span class="sig-name descname"><span class="pre">list_localized_files</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/mod.html#list_localized_files"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.mod.list_localized_files" title="Link to this definition">¶</a></dt>
480
+ <dd><p>List all localized files that have been created.</p>
481
+ <dl class="field-list simple">
482
+ <dt class="field-odd">Returns<span class="colon">:</span></dt>
483
+ <dd class="field-odd"><p>List of paths to localized files</p>
484
+ </dd>
485
+ </dl>
486
+ </dd></dl>
487
+
488
+ <dl class="py function">
489
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.mod.save_plugin_translations">
490
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.mod.</span></span><span class="sig-name descname"><span class="pre">save_plugin_translations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">plugin_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/mod.html#save_plugin_translations"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.mod.save_plugin_translations" title="Link to this definition">¶</a></dt>
491
+ <dd><p>Save translations for a specific plugin to disk.</p>
492
+ </dd></dl>
493
+
494
+ <dl class="py function">
495
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.mod.set_translations">
496
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.mod.</span></span><span class="sig-name descname"><span class="pre">set_translations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">original_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">language</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/mod.html#set_translations"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.mod.set_translations" title="Link to this definition">¶</a></dt>
497
+ <dd><p>Set translations for a specific language and plugin.</p>
498
+ <p>This command stores the translation mappings that will be used to replace
499
+ __TRANSLATE_key__ placeholders in localized files. Translations are stored
500
+ per plugin based on the provided file path.</p>
501
+ <dl class="field-list simple">
502
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
503
+ <dd class="field-odd"><ul class="simple">
504
+ <li><p><strong>original_path</strong> – Absolute path to a file in the plugin (used to identify the plugin)</p></li>
505
+ <li><p><strong>language</strong> – Language code (e.g., ‘en’, ‘es’, ‘fr’, ‘de’)</p></li>
506
+ <li><p><strong>translations</strong> – Dictionary mapping translation keys to translated text</p></li>
507
+ <li><p><strong>context</strong> – Command context (optional)</p></li>
508
+ </ul>
509
+ </dd>
510
+ </dl>
511
+ <p class="rubric">Examples</p>
512
+ <dl>
513
+ <dt>await set_translations(</dt><dd><p>“/files/mindroot/src/mindroot/coreplugins/chat/templates/chat.jinja2”,
514
+ ‘es’,
515
+ {</p>
516
+ <blockquote>
517
+ <div><p>‘chat_title’: ‘Interfaz de Chat’,
518
+ ‘buttons_send’: ‘Enviar Mensaje’,
519
+ ‘nav_home’: ‘Inicio’,
520
+ ‘error_connection_failed’: ‘Error de conexión’</p>
521
+ </div></blockquote>
522
+ <p>}</p>
523
+ </dd>
524
+ </dl>
525
+ <p>)</p>
526
+ <dl>
527
+ <dt>await set_translations(</dt><dd><p>“/some/path/src/my_plugin/templates/dashboard.jinja2”,
528
+ ‘fr’,
529
+ {</p>
530
+ <blockquote>
531
+ <div><p>‘dashboard_welcome’: ‘Bienvenue au Tableau de Bord’,
532
+ ‘buttons_save’: ‘Enregistrer’,
533
+ ‘nav_home’: ‘Accueil’</p>
534
+ </div></blockquote>
535
+ <p>}</p>
536
+ </dd>
537
+ </dl>
538
+ <p>)</p>
539
+ </dd></dl>
540
+
541
+ <dl class="py function">
542
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.mod.write_localized_file">
543
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.mod.</span></span><span class="sig-name descname"><span class="pre">write_localized_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">original_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">content</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/mod.html#write_localized_file"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.mod.write_localized_file" title="Link to this definition">¶</a></dt>
544
+ <dd><p>Write a localized version of a file with static placeholders.</p>
545
+ <p>This command creates a localized version of a template or source file
546
+ with __TRANSLATE_key__ placeholders that will be replaced with actual
547
+ translations when the file is loaded.</p>
548
+ <p>PLACEHOLDER FORMAT RULES:
549
+ - Always use the exact format: __TRANSLATE_key_name__
550
+ - Must start with __TRANSLATE_ and end with __
551
+ - Use lowercase letters, numbers, and underscores only for the key name
552
+ - Use descriptive, hierarchical key names like section_element or buttons_save
553
+ - NO spaces, hyphens, or special characters in key names</p>
554
+ <dl class="field-list simple">
555
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
556
+ <dd class="field-odd"><ul class="simple">
557
+ <li><p><strong>original_path</strong> – Absolute path to the original file</p></li>
558
+ <li><p><strong>content</strong> – File content with __TRANSLATE_key__ placeholders</p></li>
559
+ <li><p><strong>context</strong> – Command context (optional)</p></li>
560
+ </ul>
561
+ </dd>
562
+ </dl>
563
+ <p class="rubric">Examples</p>
564
+ <dl class="simple">
565
+ <dt>await write_localized_file(</dt><dd><p>“/files/mindroot/src/mindroot/coreplugins/chat/templates/chat.jinja2”,
566
+ “&lt;h1&gt;__TRANSLATE_chat_title__&lt;/h1&gt;&lt;button&gt;__TRANSLATE_buttons_send__&lt;/button&gt;”</p>
567
+ </dd>
568
+ </dl>
569
+ <p>)</p>
570
+ <dl class="simple">
571
+ <dt>await write_localized_file(</dt><dd><p>“/some/path/src/my_plugin/templates/dashboard.jinja2”,
572
+ “&lt;div&gt;__TRANSLATE_dashboard_welcome__&lt;/div&gt;”</p>
573
+ </dd>
574
+ </dl>
575
+ <p>)</p>
576
+ </dd></dl>
577
+
578
+ </section>
579
+ <section id="mindroot-coreplugins-l8n-monkey-patch-to-delete-module">
580
+ <h2>mindroot.coreplugins.l8n.monkey_patch_to_delete module<a class="headerlink" href="#mindroot-coreplugins-l8n-monkey-patch-to-delete-module" title="Link to this heading">¶</a></h2>
581
+ </section>
582
+ <section id="module-mindroot.coreplugins.l8n.test_enhanced">
583
+ <span id="mindroot-coreplugins-l8n-test-enhanced-module"></span><h2>mindroot.coreplugins.l8n.test_enhanced module<a class="headerlink" href="#module-mindroot.coreplugins.l8n.test_enhanced" title="Link to this heading">¶</a></h2>
584
+ <p>Enhanced test script for the l8n localization plugin with language detection.</p>
585
+ <dl class="py function">
586
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_enhanced.main">
587
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_enhanced.</span></span><span class="sig-name descname"><span class="pre">main</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_enhanced.html#main"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_enhanced.main" title="Link to this definition">¶</a></dt>
588
+ <dd><p>Run all enhanced tests.</p>
589
+ </dd></dl>
590
+
591
+ <dl class="py function">
592
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_enhanced.test_file_integration">
593
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_enhanced.</span></span><span class="sig-name descname"><span class="pre">test_file_integration</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_enhanced.html#test_file_integration"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_enhanced.test_file_integration" title="Link to this definition">¶</a></dt>
594
+ <dd><p>Test creating localized files and using language detection.</p>
595
+ </dd></dl>
596
+
597
+ <dl class="py function">
598
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_enhanced.test_integrated_translation">
599
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_enhanced.</span></span><span class="sig-name descname"><span class="pre">test_integrated_translation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_enhanced.html#test_integrated_translation"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_enhanced.test_integrated_translation" title="Link to this definition">¶</a></dt>
600
+ <dd><p>Test the integrated translation system with language detection.</p>
601
+ </dd></dl>
602
+
603
+ <dl class="py function">
604
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_enhanced.test_language_detection">
605
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_enhanced.</span></span><span class="sig-name descname"><span class="pre">test_language_detection</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_enhanced.html#test_language_detection"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_enhanced.test_language_detection" title="Link to this definition">¶</a></dt>
606
+ <dd><p>Test the enhanced language detection functionality.</p>
607
+ </dd></dl>
608
+
609
+ </section>
610
+ <section id="mindroot-coreplugins-l8n-test-l8n-module">
611
+ <h2>mindroot.coreplugins.l8n.test_l8n module<a class="headerlink" href="#mindroot-coreplugins-l8n-test-l8n-module" title="Link to this heading">¶</a></h2>
612
+ </section>
613
+ <section id="module-mindroot.coreplugins.l8n.test_l8n_standalone">
614
+ <span id="mindroot-coreplugins-l8n-test-l8n-standalone-module"></span><h2>mindroot.coreplugins.l8n.test_l8n_standalone module<a class="headerlink" href="#module-mindroot.coreplugins.l8n.test_l8n_standalone" title="Link to this heading">¶</a></h2>
615
+ <p>Standalone test script for the l8n localization plugin.</p>
616
+ <p>This script tests the core functionality without MindRoot dependencies.</p>
617
+ <dl class="py function">
618
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_l8n_standalone.append_localized_file">
619
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_l8n_standalone.</span></span><span class="sig-name descname"><span class="pre">append_localized_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">original_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">content</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html#append_localized_file"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_l8n_standalone.append_localized_file" title="Link to this definition">¶</a></dt>
620
+ <dd><p>Append content to an existing localized file.</p>
621
+ </dd></dl>
622
+
623
+ <dl class="py function">
624
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_l8n_standalone.command">
625
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_l8n_standalone.</span></span><span class="sig-name descname"><span class="pre">command</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html#command"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_l8n_standalone.command" title="Link to this definition">¶</a></dt>
626
+ <dd></dd></dl>
627
+
628
+ <dl class="py function">
629
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_l8n_standalone.extract_plugin_root">
630
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_l8n_standalone.</span></span><span class="sig-name descname"><span class="pre">extract_plugin_root</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">absolute_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html#extract_plugin_root"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_l8n_standalone.extract_plugin_root" title="Link to this definition">¶</a></dt>
631
+ <dd><p>Extract the plugin root from an absolute path.</p>
632
+ </dd></dl>
633
+
634
+ <dl class="py function">
635
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_l8n_standalone.get_localized_file_path">
636
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_l8n_standalone.</span></span><span class="sig-name descname"><span class="pre">get_localized_file_path</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">original_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Path</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html#get_localized_file_path"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_l8n_standalone.get_localized_file_path" title="Link to this definition">¶</a></dt>
637
+ <dd><p>Convert an original file path to its localized version path.</p>
638
+ </dd></dl>
639
+
640
+ <dl class="py function">
641
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_l8n_standalone.get_translations">
642
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_l8n_standalone.</span></span><span class="sig-name descname"><span class="pre">get_translations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">language</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html#get_translations"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_l8n_standalone.get_translations" title="Link to this definition">¶</a></dt>
643
+ <dd><p>Get translations for a specific language or all languages.</p>
644
+ </dd></dl>
645
+
646
+ <dl class="py function">
647
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_l8n_standalone.list_localized_files">
648
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_l8n_standalone.</span></span><span class="sig-name descname"><span class="pre">list_localized_files</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html#list_localized_files"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_l8n_standalone.list_localized_files" title="Link to this definition">¶</a></dt>
649
+ <dd><p>List all localized files that have been created.</p>
650
+ </dd></dl>
651
+
652
+ <dl class="py function">
653
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_l8n_standalone.replace_placeholders">
654
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_l8n_standalone.</span></span><span class="sig-name descname"><span class="pre">replace_placeholders</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">content</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">language</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html#replace_placeholders"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_l8n_standalone.replace_placeholders" title="Link to this definition">¶</a></dt>
655
+ <dd><p>Replace __TRANSLATE_key__ placeholders with actual translations.</p>
656
+ </dd></dl>
657
+
658
+ <dl class="py function">
659
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_l8n_standalone.set_translations">
660
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_l8n_standalone.</span></span><span class="sig-name descname"><span class="pre">set_translations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">language</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">translations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html#set_translations"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_l8n_standalone.set_translations" title="Link to this definition">¶</a></dt>
661
+ <dd><p>Set translations for a specific language.</p>
662
+ </dd></dl>
663
+
664
+ <dl class="py function">
665
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_l8n_standalone.test_basic_functionality">
666
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_l8n_standalone.</span></span><span class="sig-name descname"><span class="pre">test_basic_functionality</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html#test_basic_functionality"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_l8n_standalone.test_basic_functionality" title="Link to this definition">¶</a></dt>
667
+ <dd><p>Test the basic l8n functionality.</p>
668
+ </dd></dl>
669
+
670
+ <dl class="py function">
671
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_l8n_standalone.write_localized_file">
672
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_l8n_standalone.</span></span><span class="sig-name descname"><span class="pre">write_localized_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">original_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">content</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html#write_localized_file"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_l8n_standalone.write_localized_file" title="Link to this definition">¶</a></dt>
673
+ <dd><p>Write a localized version of a file with static placeholders.</p>
674
+ </dd></dl>
675
+
676
+ </section>
677
+ <section id="module-mindroot.coreplugins.l8n.test_middleware">
678
+ <span id="mindroot-coreplugins-l8n-test-middleware-module"></span><h2>mindroot.coreplugins.l8n.test_middleware module<a class="headerlink" href="#module-mindroot.coreplugins.l8n.test_middleware" title="Link to this heading">¶</a></h2>
679
+ <p>Test script for the l8n middleware functionality.</p>
680
+ <p>This script simulates FastAPI request objects to test the middleware.</p>
681
+ <dl class="py class">
682
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_middleware.MockRequest">
683
+ <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_middleware.</span></span><span class="sig-name descname"><span class="pre">MockRequest</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'/'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">query_params</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cookies</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">headers</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_middleware.html#MockRequest"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_middleware.MockRequest" title="Link to this definition">¶</a></dt>
684
+ <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
685
+ </dd></dl>
686
+
687
+ <dl class="py class">
688
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_middleware.MockResponse">
689
+ <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_middleware.</span></span><span class="sig-name descname"><span class="pre">MockResponse</span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_middleware.html#MockResponse"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_middleware.MockResponse" title="Link to this definition">¶</a></dt>
690
+ <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
691
+ <dl class="py method">
692
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_middleware.MockResponse.set_cookie">
693
+ <span class="sig-name descname"><span class="pre">set_cookie</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">key</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_age</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">httponly</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">samesite</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_middleware.html#MockResponse.set_cookie"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_middleware.MockResponse.set_cookie" title="Link to this definition">¶</a></dt>
694
+ <dd></dd></dl>
695
+
696
+ </dd></dl>
697
+
698
+ <dl class="py function">
699
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_middleware.main">
700
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_middleware.</span></span><span class="sig-name descname"><span class="pre">main</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_middleware.html#main"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_middleware.main" title="Link to this definition">¶</a></dt>
701
+ <dd><p>Run all middleware tests.</p>
702
+ </dd></dl>
703
+
704
+ <dl class="py function">
705
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_middleware.mock_call_next">
706
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_middleware.</span></span><span class="sig-name descname"><span class="pre">mock_call_next</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_middleware.html#mock_call_next"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_middleware.mock_call_next" title="Link to this definition">¶</a></dt>
707
+ <dd><p>Mock the next handler in the middleware chain.</p>
708
+ </dd></dl>
709
+
710
+ <dl class="py function">
711
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_middleware.test_integration_with_templates">
712
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_middleware.</span></span><span class="sig-name descname"><span class="pre">test_integration_with_templates</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_middleware.html#test_integration_with_templates"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_middleware.test_integration_with_templates" title="Link to this definition">¶</a></dt>
713
+ <dd><p>Test integration with the template system.</p>
714
+ </dd></dl>
715
+
716
+ <dl class="py function">
717
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_middleware.test_language_detection">
718
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_middleware.</span></span><span class="sig-name descname"><span class="pre">test_language_detection</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_middleware.html#test_language_detection"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_middleware.test_language_detection" title="Link to this definition">¶</a></dt>
719
+ <dd><p>Test language detection from various request sources.</p>
720
+ </dd></dl>
721
+
722
+ <dl class="py function">
723
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.test_middleware.test_middleware_functionality">
724
+ <em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.test_middleware.</span></span><span class="sig-name descname"><span class="pre">test_middleware_functionality</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/test_middleware.html#test_middleware_functionality"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.test_middleware.test_middleware_functionality" title="Link to this definition">¶</a></dt>
725
+ <dd><p>Test the complete middleware functionality.</p>
726
+ </dd></dl>
727
+
728
+ </section>
729
+ <section id="module-mindroot.coreplugins.l8n.utils">
730
+ <span id="mindroot-coreplugins-l8n-utils-module"></span><h2>mindroot.coreplugins.l8n.utils module<a class="headerlink" href="#module-mindroot.coreplugins.l8n.utils" title="Link to this heading">¶</a></h2>
731
+ <dl class="py function">
732
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.utils.extract_plugin_root">
733
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.utils.</span></span><span class="sig-name descname"><span class="pre">extract_plugin_root</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">absolute_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/utils.html#extract_plugin_root"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.utils.extract_plugin_root" title="Link to this definition">¶</a></dt>
734
+ <dd><p>Extract the plugin root from an absolute path.</p>
735
+ <p>For core plugins: everything after ‘coreplugins/’
736
+ For external plugins: everything after ‘src/[plugin_name]/’</p>
737
+ <p>Examples:
738
+ - /files/mindroot/src/mindroot/coreplugins/chat/templates/chat.jinja2 -&gt; chat/templates/chat.jinja2
739
+ - /some/path/src/my_plugin/templates/page.jinja2 -&gt; my_plugin/templates/page.jinja2</p>
740
+ </dd></dl>
741
+
742
+ <dl class="py function">
743
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.utils.extract_translation_keys">
744
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.utils.</span></span><span class="sig-name descname"><span class="pre">extract_translation_keys</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">content</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">set</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/utils.html#extract_translation_keys"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.utils.extract_translation_keys" title="Link to this definition">¶</a></dt>
745
+ <dd><p>Extract all __TRANSLATE_key__ placeholders from content.</p>
746
+ <dl class="field-list simple">
747
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
748
+ <dd class="field-odd"><p><strong>content</strong> – Content to scan for translation keys</p>
749
+ </dd>
750
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
751
+ <dd class="field-even"><p>Set of translation keys found in the content</p>
752
+ </dd>
753
+ </dl>
754
+ </dd></dl>
755
+
756
+ <dl class="py function">
757
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.utils.get_localized_file_path">
758
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.utils.</span></span><span class="sig-name descname"><span class="pre">get_localized_file_path</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">original_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Path</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/utils.html#get_localized_file_path"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.utils.get_localized_file_path" title="Link to this definition">¶</a></dt>
759
+ <dd><p>Convert an original file path to its localized version path.</p>
760
+ <p>Examples:
761
+ - chat/templates/chat.jinja2 -&gt; localized_files/coreplugins/chat/templates/chat.i18n.jinja2
762
+ - my_plugin/templates/page.jinja2 -&gt; localized_files/external_plugins/my_plugin/templates/page.i18n.jinja2</p>
763
+ </dd></dl>
764
+
765
+ <dl class="py function">
766
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.utils.get_plugin_translations_path">
767
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.utils.</span></span><span class="sig-name descname"><span class="pre">get_plugin_translations_path</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">original_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Path</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/utils.html#get_plugin_translations_path"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.utils.get_plugin_translations_path" title="Link to this definition">¶</a></dt>
768
+ <dd><p>Get the path where translations should be stored for a given file.</p>
769
+ <p>Example:
770
+ /files/mindroot/src/mindroot/coreplugins/check_list/inject/admin.jinja2
771
+ -&gt; translations/coreplugins/check_list/translations.json</p>
772
+ </dd></dl>
773
+
774
+ <dl class="py function">
775
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.utils.load_plugin_translations">
776
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.utils.</span></span><span class="sig-name descname"><span class="pre">load_plugin_translations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">plugin_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/utils.html#load_plugin_translations"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.utils.load_plugin_translations" title="Link to this definition">¶</a></dt>
777
+ <dd><p>Load translations for a specific plugin from disk.</p>
778
+ </dd></dl>
779
+
780
+ <dl class="py function">
781
+ <dt class="sig sig-object py" id="mindroot.coreplugins.l8n.utils.replace_placeholders">
782
+ <span class="sig-prename descclassname"><span class="pre">mindroot.coreplugins.l8n.utils.</span></span><span class="sig-name descname"><span class="pre">replace_placeholders</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">content</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">language</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">plugin_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="reference internal" href="../_modules/mindroot/coreplugins/l8n/utils.html#replace_placeholders"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mindroot.coreplugins.l8n.utils.replace_placeholders" title="Link to this definition">¶</a></dt>
783
+ <dd><p>Replace __TRANSLATE_key__ placeholders with actual translations.</p>
784
+ <p>This function now validates that ALL required translations are available
785
+ for the specified language. If any translations are missing, it logs
786
+ a strong warning and returns None to indicate fallback is needed.</p>
787
+ <dl class="field-list simple">
788
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
789
+ <dd class="field-odd"><ul class="simple">
790
+ <li><p><strong>content</strong> – Template content with placeholders</p></li>
791
+ <li><p><strong>language</strong> – Language code for translations</p></li>
792
+ <li><p><strong>plugin_path</strong> – Path to the localized file (used to determine which plugin’s translations to use)</p></li>
793
+ </ul>
794
+ </dd>
795
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
796
+ <dd class="field-even"><p>Content with placeholders replaced by translations, or None if translations are incomplete</p>
797
+ </dd>
798
+ </dl>
799
+ </dd></dl>
800
+
801
+ </section>
802
+ <section id="module-mindroot.coreplugins.l8n">
803
+ <span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-mindroot.coreplugins.l8n" title="Link to this heading">¶</a></h2>
804
+ </section>
805
+ </section>
806
+
807
+ </article>
808
+ </div>
809
+ <footer>
810
+
811
+ <div class="related-pages">
812
+
813
+
814
+ </div>
815
+ <div class="bottom-of-page">
816
+ <div class="left-details">
817
+ <div class="copyright">
818
+ Copyright &#169; 2025, Jason Livesay
819
+ </div>
820
+ Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
821
+
822
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
823
+
824
+ </div>
825
+ <div class="right-details">
826
+
827
+ </div>
828
+ </div>
829
+
830
+ </footer>
831
+ </div>
832
+ <aside class="toc-drawer">
833
+
834
+
835
+ <div class="toc-sticky toc-scroll">
836
+ <div class="toc-title-container">
837
+ <span class="toc-title">
838
+ On this page
839
+ </span>
840
+ </div>
841
+ <div class="toc-tree-container">
842
+ <div class="toc-tree">
843
+ <ul>
844
+ <li><a class="reference internal" href="#">mindroot.coreplugins.l8n package</a><ul>
845
+ <li><a class="reference internal" href="#submodules">Submodules</a></li>
846
+ <li><a class="reference internal" href="#module-mindroot.coreplugins.l8n.debug_loader">mindroot.coreplugins.l8n.debug_loader module</a></li>
847
+ <li><a class="reference internal" href="#module-mindroot.coreplugins.l8n.debug_middleware">mindroot.coreplugins.l8n.debug_middleware module</a></li>
848
+ <li><a class="reference internal" href="#module-mindroot.coreplugins.l8n.l8n_constants">mindroot.coreplugins.l8n.l8n_constants module</a></li>
849
+ <li><a class="reference internal" href="#module-mindroot.coreplugins.l8n.language_detection">mindroot.coreplugins.l8n.language_detection module</a><ul>
850
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.language_detection.get_current_language_from_request"><code class="docutils literal notranslate"><span class="pre">get_current_language_from_request()</span></code></a></li>
851
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.language_detection.get_fallback_language"><code class="docutils literal notranslate"><span class="pre">get_fallback_language()</span></code></a></li>
852
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.language_detection.get_supported_languages"><code class="docutils literal notranslate"><span class="pre">get_supported_languages()</span></code></a></li>
853
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.language_detection.is_language_supported"><code class="docutils literal notranslate"><span class="pre">is_language_supported()</span></code></a></li>
854
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.language_detection.set_language_for_request"><code class="docutils literal notranslate"><span class="pre">set_language_for_request()</span></code></a></li>
855
+ </ul>
856
+ </li>
857
+ <li><a class="reference internal" href="#module-mindroot.coreplugins.l8n.middleware">mindroot.coreplugins.l8n.middleware module</a><ul>
858
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.middleware.detect_language_from_request"><code class="docutils literal notranslate"><span class="pre">detect_language_from_request()</span></code></a></li>
859
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.middleware.get_request_language"><code class="docutils literal notranslate"><span class="pre">get_request_language()</span></code></a></li>
860
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.middleware.middleware"><code class="docutils literal notranslate"><span class="pre">middleware()</span></code></a></li>
861
+ </ul>
862
+ </li>
863
+ <li><a class="reference internal" href="#module-mindroot.coreplugins.l8n.mod">mindroot.coreplugins.l8n.mod module</a><ul>
864
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.mod.append_localized_file"><code class="docutils literal notranslate"><span class="pre">append_localized_file()</span></code></a></li>
865
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.mod.get_translations"><code class="docutils literal notranslate"><span class="pre">get_translations()</span></code></a></li>
866
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.mod.list_localized_files"><code class="docutils literal notranslate"><span class="pre">list_localized_files()</span></code></a></li>
867
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.mod.save_plugin_translations"><code class="docutils literal notranslate"><span class="pre">save_plugin_translations()</span></code></a></li>
868
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.mod.set_translations"><code class="docutils literal notranslate"><span class="pre">set_translations()</span></code></a></li>
869
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.mod.write_localized_file"><code class="docutils literal notranslate"><span class="pre">write_localized_file()</span></code></a></li>
870
+ </ul>
871
+ </li>
872
+ <li><a class="reference internal" href="#mindroot-coreplugins-l8n-monkey-patch-to-delete-module">mindroot.coreplugins.l8n.monkey_patch_to_delete module</a></li>
873
+ <li><a class="reference internal" href="#module-mindroot.coreplugins.l8n.test_enhanced">mindroot.coreplugins.l8n.test_enhanced module</a><ul>
874
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_enhanced.main"><code class="docutils literal notranslate"><span class="pre">main()</span></code></a></li>
875
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_enhanced.test_file_integration"><code class="docutils literal notranslate"><span class="pre">test_file_integration()</span></code></a></li>
876
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_enhanced.test_integrated_translation"><code class="docutils literal notranslate"><span class="pre">test_integrated_translation()</span></code></a></li>
877
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_enhanced.test_language_detection"><code class="docutils literal notranslate"><span class="pre">test_language_detection()</span></code></a></li>
878
+ </ul>
879
+ </li>
880
+ <li><a class="reference internal" href="#mindroot-coreplugins-l8n-test-l8n-module">mindroot.coreplugins.l8n.test_l8n module</a></li>
881
+ <li><a class="reference internal" href="#module-mindroot.coreplugins.l8n.test_l8n_standalone">mindroot.coreplugins.l8n.test_l8n_standalone module</a><ul>
882
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_l8n_standalone.append_localized_file"><code class="docutils literal notranslate"><span class="pre">append_localized_file()</span></code></a></li>
883
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_l8n_standalone.command"><code class="docutils literal notranslate"><span class="pre">command()</span></code></a></li>
884
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_l8n_standalone.extract_plugin_root"><code class="docutils literal notranslate"><span class="pre">extract_plugin_root()</span></code></a></li>
885
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_l8n_standalone.get_localized_file_path"><code class="docutils literal notranslate"><span class="pre">get_localized_file_path()</span></code></a></li>
886
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_l8n_standalone.get_translations"><code class="docutils literal notranslate"><span class="pre">get_translations()</span></code></a></li>
887
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_l8n_standalone.list_localized_files"><code class="docutils literal notranslate"><span class="pre">list_localized_files()</span></code></a></li>
888
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_l8n_standalone.replace_placeholders"><code class="docutils literal notranslate"><span class="pre">replace_placeholders()</span></code></a></li>
889
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_l8n_standalone.set_translations"><code class="docutils literal notranslate"><span class="pre">set_translations()</span></code></a></li>
890
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_l8n_standalone.test_basic_functionality"><code class="docutils literal notranslate"><span class="pre">test_basic_functionality()</span></code></a></li>
891
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_l8n_standalone.write_localized_file"><code class="docutils literal notranslate"><span class="pre">write_localized_file()</span></code></a></li>
892
+ </ul>
893
+ </li>
894
+ <li><a class="reference internal" href="#module-mindroot.coreplugins.l8n.test_middleware">mindroot.coreplugins.l8n.test_middleware module</a><ul>
895
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_middleware.MockRequest"><code class="docutils literal notranslate"><span class="pre">MockRequest</span></code></a></li>
896
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_middleware.MockResponse"><code class="docutils literal notranslate"><span class="pre">MockResponse</span></code></a><ul>
897
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_middleware.MockResponse.set_cookie"><code class="docutils literal notranslate"><span class="pre">MockResponse.set_cookie()</span></code></a></li>
898
+ </ul>
899
+ </li>
900
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_middleware.main"><code class="docutils literal notranslate"><span class="pre">main()</span></code></a></li>
901
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_middleware.mock_call_next"><code class="docutils literal notranslate"><span class="pre">mock_call_next()</span></code></a></li>
902
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_middleware.test_integration_with_templates"><code class="docutils literal notranslate"><span class="pre">test_integration_with_templates()</span></code></a></li>
903
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_middleware.test_language_detection"><code class="docutils literal notranslate"><span class="pre">test_language_detection()</span></code></a></li>
904
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.test_middleware.test_middleware_functionality"><code class="docutils literal notranslate"><span class="pre">test_middleware_functionality()</span></code></a></li>
905
+ </ul>
906
+ </li>
907
+ <li><a class="reference internal" href="#module-mindroot.coreplugins.l8n.utils">mindroot.coreplugins.l8n.utils module</a><ul>
908
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.utils.extract_plugin_root"><code class="docutils literal notranslate"><span class="pre">extract_plugin_root()</span></code></a></li>
909
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.utils.extract_translation_keys"><code class="docutils literal notranslate"><span class="pre">extract_translation_keys()</span></code></a></li>
910
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.utils.get_localized_file_path"><code class="docutils literal notranslate"><span class="pre">get_localized_file_path()</span></code></a></li>
911
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.utils.get_plugin_translations_path"><code class="docutils literal notranslate"><span class="pre">get_plugin_translations_path()</span></code></a></li>
912
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.utils.load_plugin_translations"><code class="docutils literal notranslate"><span class="pre">load_plugin_translations()</span></code></a></li>
913
+ <li><a class="reference internal" href="#mindroot.coreplugins.l8n.utils.replace_placeholders"><code class="docutils literal notranslate"><span class="pre">replace_placeholders()</span></code></a></li>
914
+ </ul>
915
+ </li>
916
+ <li><a class="reference internal" href="#module-mindroot.coreplugins.l8n">Module contents</a></li>
917
+ </ul>
918
+ </li>
919
+ </ul>
920
+
921
+ </div>
922
+ </div>
923
+ </div>
924
+
925
+
926
+ </aside>
927
+ </div>
928
+ </div><script src="../_static/documentation_options.js?v=3c16008f"></script>
929
+ <script src="../_static/doctools.js?v=9bcbadda"></script>
930
+ <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
931
+ <script src="../_static/scripts/furo.js?v=46bd48cc"></script>
932
+ </body>
933
+ </html>