@tachybase/module-web 1.6.25 → 1.6.27

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.
@@ -1,6 +1,6 @@
1
1
  module.exports = {
2
2
  "react": "18.3.1",
3
- "@tachybase/client": "1.6.25",
3
+ "@tachybase/client": "1.6.27",
4
4
  "react-router-dom": "6.28.1",
5
5
  "@ant-design/icons": "6.1.0",
6
6
  "antd": "5.22.5",
@@ -85,6 +85,7 @@ module.exports = {
85
85
  "Allow to manage plugins": "Allow to manage plugins",
86
86
  "Allow uploading multiple files": "Allow uploading multiple files",
87
87
  "Allows configuration of the whole system, including UI, collections, permissions, etc.": "Allows configuration of the whole system, including UI, collections, permissions, etc.",
88
+ "Allows selected tenants to read records that do not have a tenant marker.": "Allows selected tenants to read records that do not have a tenant marker.",
88
89
  "Allows to configure interface": "Allows to configure interface",
89
90
  "Allows to configure plugins": "Allows to configure plugins",
90
91
  "Allows to install, activate, disable plugins": "Allows to install, activate, disable plugins",
@@ -186,6 +187,7 @@ module.exports = {
186
187
  "Connect data blocks": "Connect data blocks",
187
188
  "Connect to database view": "Connect to database view",
188
189
  "Constant value": "Constant value",
190
+ "Controls whether records are isolated by the current tenant.": "Controls whether records are isolated by the current tenant.",
189
191
  "Convert reference to duplicate": "Convert reference to duplicate",
190
192
  "Core Version": "Core Version",
191
193
  Create: "Create",
@@ -462,6 +464,7 @@ module.exports = {
462
464
  "Last week": "Last week",
463
465
  "Last year": "Last year",
464
466
  "Leave it blank, unless you need a custom intermediate table": "Leave it blank, unless you need a custom intermediate table",
467
+ "Legacy data visible to tenants": "Legacy data visible to tenants",
465
468
  Length: "Length",
466
469
  License: "License",
467
470
  Lime: "Lime",
@@ -721,6 +724,7 @@ module.exports = {
721
724
  Setting: "Setting",
722
725
  "Setting Down Title": "Setting Down Title",
723
726
  Settings: "Settings",
727
+ "Shared collection": "Shared collection",
724
728
  "Show Data": "Show Data",
725
729
  "Show lunar": "Show lunar",
726
730
  "Show scroll area": "Show scroll area",
@@ -789,6 +793,9 @@ module.exports = {
789
793
  "Template mode": "Template mode",
790
794
  "Template name": "Template name",
791
795
  Templates: "Templates",
796
+ "Tenancy mode": "Tenancy mode",
797
+ "Tenant inherited": "Tenant inherited",
798
+ "Tenant scoped": "Tenant scoped",
792
799
  "Test Data": "Test Data",
793
800
  "Text fields": "Text fields",
794
801
  "The current operation was not successful. You can wait a moment or contact technical support.": "The operation failed. Please wait a moment or contact technical support",
@@ -911,6 +918,8 @@ module.exports = {
911
918
  "\u2260": "\u2260",
912
919
  "\u2264": "\u2264",
913
920
  "\u2265": "\u2265",
921
+ "\u26A0 Tenant isolation warning: SQL collections do not support tenant isolation. The SQL statement is executed as-is with no automatic tenantId filtering. If tenant-scoped data access is needed, manually include tenantId conditions in your SQL, or use a general collection with proper tenancy configuration.": "\u26A0 Tenant isolation warning: SQL collections do not support tenant isolation. The SQL statement is executed as-is with no automatic tenantId filtering. If tenant-scoped data access is needed, manually include tenantId conditions in your SQL, or use a general collection with proper tenancy configuration.",
922
+ "\u26A0 Tenant isolation warning: View collections do not support tenant isolation. Queries are executed as raw SQL with no automatic tenantId filtering. If tenant-level data isolation is required, implement row-level security policies (e.g. PostgreSQL RLS) on the underlying database view.": "\u26A0 Tenant isolation warning: View collections do not support tenant isolation. Queries are executed as raw SQL with no automatic tenantId filtering. If tenant-level data isolation is required, implement row-level security policies (e.g. PostgreSQL RLS) on the underlying database view.",
914
923
  "12 hour": "12 hour",
915
924
  "24 hour": "24 hour"
916
925
  };
@@ -79,6 +79,7 @@ module.exports = {
79
79
  "Allow to manage plugins": "Permitir gestionar plugins",
80
80
  "Allow uploading multiple files": "Permitir la carga de varios archivos",
81
81
  "Allows configuration of the whole system, including UI, collections, permissions, etc.": "Permite configurar todo el sistema, incluyendo UI, colecciones, permisos, etc.",
82
+ "Allows selected tenants to read records that do not have a tenant marker.": "Permite que los tenants seleccionados lean registros que no tienen una marca de tenant.",
82
83
  "Allows to configure interface": "Permite configurar la interfaz",
83
84
  "Allows to configure plugins": "Permite configurar plugins",
84
85
  "Allows to install, activate, disable plugins": "Permitir instalar, activar, desactivar plugins",
@@ -164,6 +165,7 @@ module.exports = {
164
165
  "Connect data blocks": "Conectar bloques de datos",
165
166
  "Connect to database view": "Conectarse a la vista de la base de datos",
166
167
  "Constant value": "Valor constante",
168
+ "Controls whether records are isolated by the current tenant.": "Controla si los registros se a\xEDslan por el tenant actual.",
167
169
  "Convert reference to duplicate": "Convertir referencia a duplicado",
168
170
  "Core Version": "Versi\xF3n del n\xFAcleo",
169
171
  "Create an account": "Crear una cuenta",
@@ -389,6 +391,7 @@ module.exports = {
389
391
  "Last week": "Semana pasada",
390
392
  "Last year": "A\xF1o pasado",
391
393
  "Leave it blank, unless you need a custom intermediate table": "D\xE9jelo en blanco, a menos que necesite una tabla intermedia personalizada",
394
+ "Legacy data visible to tenants": "Datos heredados visibles para tenants",
392
395
  Length: "Longitud",
393
396
  License: "Licencia",
394
397
  Lime: "Lima",
@@ -600,6 +603,7 @@ module.exports = {
600
603
  "Set default value": "Establecer valor por defecto",
601
604
  "Set the data scope": "Establecer el \xE1mbito de los datos",
602
605
  "Set validation rules": "Establecer reglas de validaci\xF3n",
606
+ "Shared collection": "Colecci\xF3n compartida",
603
607
  "Show lunar": "Mostrar lunar",
604
608
  "Show time": "Mostrar hora",
605
609
  "Sign in": "Iniciar sesi\xF3n",
@@ -653,6 +657,9 @@ module.exports = {
653
657
  "Target position": "Posici\xF3n de destino",
654
658
  "Template name": "Nombre de plantilla",
655
659
  Templates: "Plantillas",
660
+ "Tenancy mode": "Modo de tenancy",
661
+ "Tenant inherited": "Tenant actual y descendientes",
662
+ "Tenant scoped": "Solo tenant actual",
656
663
  "Tencent COS": "Tencent COS",
657
664
  "The deletion was successful.": "Eliminaci\xF3n correcta",
658
665
  "The field value cannot be greater than ": "El valor del campo no puede ser mayor que ",
@@ -755,6 +762,8 @@ module.exports = {
755
762
  "\u2260": "\u2260",
756
763
  "\u2264": "\u2264",
757
764
  "\u2265": "\u2265",
765
+ "\u26A0 Tenant isolation warning: SQL collections do not support tenant isolation. The SQL statement is executed as-is with no automatic tenantId filtering. If tenant-scoped data access is needed, manually include tenantId conditions in your SQL, or use a general collection with proper tenancy configuration.": "\u26A0 Advertencia de aislamiento de tenants: las colecciones SQL no admiten aislamiento de tenants. La sentencia SQL se ejecuta tal cual, sin filtrado autom\xE1tico por tenantId. Si necesita acceder a datos aislados por tenant, incluya manualmente condiciones tenantId en el SQL o use una colecci\xF3n general con la configuraci\xF3n de tenancy adecuada.",
766
+ "\u26A0 Tenant isolation warning: View collections do not support tenant isolation. Queries are executed as raw SQL with no automatic tenantId filtering. If tenant-level data isolation is required, implement row-level security policies (e.g. PostgreSQL RLS) on the underlying database view.": "\u26A0 Advertencia de aislamiento de tenants: las colecciones de vista no admiten aislamiento de tenants. Las consultas se ejecutan como SQL sin procesar, sin filtrado autom\xE1tico por tenantId. Si se requiere aislamiento de datos por tenant, implemente pol\xEDticas de seguridad a nivel de fila (por ejemplo, PostgreSQL RLS) en la vista de base de datos subyacente.",
758
767
  "12 hour": "12 horas",
759
768
  "24 hour": "24 horas"
760
769
  };
@@ -82,6 +82,7 @@ module.exports = {
82
82
  "Allow to manage plugins": "Autoriser la gestion des plugins",
83
83
  "Allow uploading multiple files": "Autoriser le t\xE9l\xE9chargement de plusieurs fichiers",
84
84
  "Allows configuration of the whole system, including UI, collections, permissions, etc.": "Permet de configurer l'ensemble du syst\xE8me, y compris l'interface utilisateur, les collections, les permissions, etc.",
85
+ "Allows selected tenants to read records that do not have a tenant marker.": "Permet aux tenants s\xE9lectionn\xE9s de lire les enregistrements qui ne poss\xE8dent pas de marqueur de tenant.",
85
86
  "Allows to configure interface": "Permet de configurer l'interface",
86
87
  "Allows to configure plugins": "Permet de configurer des plugins",
87
88
  "Allows to install, activate, disable plugins": "Permet d'installer, d'activer, de d\xE9sactiver des plugins",
@@ -167,6 +168,7 @@ module.exports = {
167
168
  "Connect data blocks": "Connecter les blocs de donn\xE9es",
168
169
  "Connect to database view": "Connexion \xE0 la vue de la base de donn\xE9es",
169
170
  "Constant value": "Valeur constante",
171
+ "Controls whether records are isolated by the current tenant.": "Contr\xF4le si les enregistrements sont isol\xE9s par le tenant actuel.",
170
172
  "Convert reference to duplicate": "Convertir la r\xE9f\xE9rence en doublon",
171
173
  "Core Version": "Version du noyau",
172
174
  Create: "Cr\xE9er",
@@ -403,6 +405,7 @@ module.exports = {
403
405
  "Last week": "La semaine derni\xE8re",
404
406
  "Last year": "L'ann\xE9e derni\xE8re",
405
407
  "Leave it blank, unless you need a custom intermediate table": "Laissez-le vide, sauf si vous avez besoin d'une table interm\xE9diaire personnalis\xE9e",
408
+ "Legacy data visible to tenants": "Donn\xE9es h\xE9rit\xE9es visibles par les tenants",
406
409
  Length: "Longueur",
407
410
  License: "Licence",
408
411
  Lime: "Citron vert",
@@ -622,6 +625,7 @@ module.exports = {
622
625
  "Set the count of columns displayed in a row": "D\xE9finir le nombre de colonnes affich\xE9es par ligne",
623
626
  "Set the data scope": "D\xE9finir la port\xE9e des donn\xE9es",
624
627
  "Set validation rules": "D\xE9finir les r\xE8gles de validation",
628
+ "Shared collection": "Collection partag\xE9e",
625
629
  "Show lunar": "Afficher le calendrier lunaire",
626
630
  "Show time": "Afficher l'heure",
627
631
  "Sign in": "Se connecter",
@@ -673,6 +677,9 @@ module.exports = {
673
677
  "Target position": "Position cible",
674
678
  "Template name": "Nom du mod\xE8le",
675
679
  Templates: "Mod\xE8les",
680
+ "Tenancy mode": "Mode de tenancy",
681
+ "Tenant inherited": "Tenant actuel et descendants",
682
+ "Tenant scoped": "Tenant actuel uniquement",
676
683
  "The deletion was successful.": "La suppression a r\xE9ussi.",
677
684
  "The field has been deleted": "Le champ a \xE9t\xE9 supprim\xE9",
678
685
  "The field value cannot be greater than ": "La valeur du champ ne peut pas \xEAtre sup\xE9rieure \xE0 ",
@@ -775,6 +782,8 @@ module.exports = {
775
782
  "\u2260": "\u2260",
776
783
  "\u2264": "\u2264",
777
784
  "\u2265": "\u2265",
785
+ "\u26A0 Tenant isolation warning: SQL collections do not support tenant isolation. The SQL statement is executed as-is with no automatic tenantId filtering. If tenant-scoped data access is needed, manually include tenantId conditions in your SQL, or use a general collection with proper tenancy configuration.": "\u26A0 Avertissement d'isolation des tenants : les collections SQL ne prennent pas en charge l'isolation des tenants. L'instruction SQL est ex\xE9cut\xE9e telle quelle, sans filtrage automatique par tenantId. Si vous devez acc\xE9der \xE0 des donn\xE9es isol\xE9es par tenant, ajoutez manuellement des conditions tenantId dans votre SQL ou utilisez une collection standard avec une configuration de tenancy appropri\xE9e.",
786
+ "\u26A0 Tenant isolation warning: View collections do not support tenant isolation. Queries are executed as raw SQL with no automatic tenantId filtering. If tenant-level data isolation is required, implement row-level security policies (e.g. PostgreSQL RLS) on the underlying database view.": "\u26A0 Avertissement d'isolation des tenants : les collections de vues ne prennent pas en charge l'isolation des tenants. Les requ\xEAtes sont ex\xE9cut\xE9es comme du SQL brut, sans filtrage automatique par tenantId. Si une isolation des donn\xE9es par tenant est n\xE9cessaire, impl\xE9mentez des politiques de s\xE9curit\xE9 au niveau des lignes (par exemple PostgreSQL RLS) sur la vue de base de donn\xE9es sous-jacente.",
778
787
  "12 hour": "12 heures",
779
788
  "24 hour": "24 heures"
780
789
  };
@@ -75,6 +75,7 @@ module.exports = {
75
75
  "Allow to desgin pages": "\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u69CB\u6210\u306E\u8A31\u53EF",
76
76
  "Allow to manage plugins": "\u7BA1\u7406\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8A31\u53EF",
77
77
  "Allows configuration of the whole system, including UI, collections, permissions, etc.": "UI\u8A2D\u5B9A\u3001\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u8A2D\u5B9A\u3001\u6A29\u9650\u8A2D\u5B9A\u3001\u30B7\u30B9\u30C6\u30E0\u8A2D\u5B9A\u7B49\u3001\u30B7\u30B9\u30C6\u30E0\u5168\u4F53\u306E\u8A2D\u5B9A\u3092\u8A31\u53EF\u3059\u308B",
78
+ "Allows selected tenants to read records that do not have a tenant marker.": "\u9078\u629E\u3057\u305F\u30C6\u30CA\u30F3\u30C8\u304C\u30C6\u30CA\u30F3\u30C8\u30DE\u30FC\u30AB\u30FC\u306E\u306A\u3044\u30EC\u30B3\u30FC\u30C9\u3092\u8AAD\u307F\u53D6\u308C\u308B\u3088\u3046\u306B\u3057\u307E\u3059\u3002",
78
79
  "Any succeeded or failed": "\u3044\u305A\u308C\u304B\u304C\u6210\u529F\u3082\u3057\u304F\u306F\u5931\u6557",
79
80
  "App Version": "\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u7248",
80
81
  "Are you sure to delete this plugin": "\u672C\u5F53\u306B\u3053\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u7121\u52B9\u306B\u3057\u307E\u3059\u304B\uFF1F",
@@ -152,6 +153,7 @@ module.exports = {
152
153
  "Connect to database view": "\u30D3\u30E5\u30FC\u306B\u63A5\u7D9A",
153
154
  "Constant value": "\u5B9A\u6570\u5024",
154
155
  "Continue after any branch succeeded, or exit after any branch failed": "\u3044\u305A\u308C\u304B\u306E\u5206\u5C90\u3067\u6210\u529F\u3057\u7D9A\u884C\u3059\u308B\u304B\u3001\u5206\u5C90\u304C\u5931\u6557\u3057\u305F\u5F8C\u7D42\u4E86\u3057\u307E\u3059",
156
+ "Controls whether records are isolated by the current tenant.": "\u73FE\u5728\u306E\u30C6\u30CA\u30F3\u30C8\u3067\u30EC\u30B3\u30FC\u30C9\u3092\u5206\u96E2\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002",
155
157
  "Convert reference to duplicate": "\u53C2\u7167\u3092\u8907\u88FD\u306B\u5909\u63DB",
156
158
  "Core Version": "\u30B3\u30A2\u7248",
157
159
  Create: "\u65B0\u898F\u306E\u307F",
@@ -368,6 +370,7 @@ module.exports = {
368
370
  "Last week": "\u5148\u9031",
369
371
  "Last year": "\u53BB\u5E74",
370
372
  "Leave it blank, unless you need a custom intermediate table": "\u30AB\u30B9\u30BF\u30E0\u4E2D\u9593\u30C6\u30FC\u30D6\u30EB\u304C\u5FC5\u8981\u3067\u306A\u3044\u9650\u308A\u3001\u30C7\u30D5\u30A9\u30EB\u30C8\u3067\u7A7A\u767D\u306E\u307E\u307E\u306B\u3057\u307E\u3059",
373
+ "Legacy data visible to tenants": "\u30C6\u30CA\u30F3\u30C8\u306B\u8868\u793A\u3059\u308B\u30EC\u30AC\u30B7\u30FC\u30C7\u30FC\u30BF",
371
374
  License: "\u30E9\u30A4\u30BB\u30F3\u30B9",
372
375
  Lime: "\u30E9\u30A4\u30E0",
373
376
  "Line chart": "\u6298\u308C\u7DDA\u30B0\u30E9\u30D5",
@@ -558,6 +561,7 @@ module.exports = {
558
561
  "Set default value": "\u30C7\u30D5\u30A9\u30EB\u30C8\u5024\u3092\u8A2D\u5B9A",
559
562
  "Set the data scope": "\u30C7\u30FC\u30BF\u7BC4\u56F2\u306E\u8A2D\u5B9A",
560
563
  "Set validation rules": "\u30D0\u30EA\u30C7\u30FC\u30B7\u30E7\u30F3\u30EB\u30FC\u30EB\u306E\u8A2D\u5B9A",
564
+ "Shared collection": "\u5171\u6709\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3",
561
565
  "Show time": "\u6642\u523B\u3092\u8868\u793A",
562
566
  "Sign in": "\u30B5\u30A4\u30F3\u30A4\u30F3",
563
567
  "Sign out": "\u30B5\u30A4\u30F3\u30A2\u30A6\u30C8",
@@ -603,6 +607,9 @@ module.exports = {
603
607
  "Template Data": "\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30C7\u30FC\u30BF",
604
608
  "Template name": "\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u540D",
605
609
  Templates: "\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8",
610
+ "Tenancy mode": "\u30C6\u30CA\u30F3\u30C8\u5206\u96E2\u30E2\u30FC\u30C9",
611
+ "Tenant inherited": "\u73FE\u5728\u306E\u30C6\u30CA\u30F3\u30C8\u3068\u5B50\u5B6B\u30C6\u30CA\u30F3\u30C8",
612
+ "Tenant scoped": "\u73FE\u5728\u306E\u30C6\u30CA\u30F3\u30C8\u306E\u307F",
606
613
  "The deletion was successful.": "\u524A\u9664\u306B\u6210\u529F\u3057\u307E\u3057\u305F\u3002",
607
614
  "The field has been deleted": "\u30D5\u30A3\u30FC\u30EB\u30C9\u304C\u524A\u9664\u3055\u308C\u307E\u3057\u305F",
608
615
  'The {{type}} "{{name}}" may have been deleted. Please remove this {{blockType}}.': '{{type}} "{{name}}" \u306F\u524A\u9664\u3055\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u3053\u306E {{blockType}} \u3092\u524A\u9664\u3057\u3066\u304F\u3060\u3055\u3044\u3002',
@@ -693,6 +700,8 @@ module.exports = {
693
700
  "\u2260": "\u2260",
694
701
  "\u2264": "\u2264",
695
702
  "\u2265": "\u2265",
703
+ "\u26A0 Tenant isolation warning: SQL collections do not support tenant isolation. The SQL statement is executed as-is with no automatic tenantId filtering. If tenant-scoped data access is needed, manually include tenantId conditions in your SQL, or use a general collection with proper tenancy configuration.": "\u26A0 \u30C6\u30CA\u30F3\u30C8\u5206\u96E2\u306E\u8B66\u544A: SQL \u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u306F\u30C6\u30CA\u30F3\u30C8\u5206\u96E2\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093\u3002SQL \u6587\u306F\u305D\u306E\u307E\u307E\u5B9F\u884C\u3055\u308C\u3001tenantId \u30D5\u30A3\u30EB\u30BF\u30FC\u306F\u81EA\u52D5\u7684\u306B\u8FFD\u52A0\u3055\u308C\u307E\u305B\u3093\u3002\u30C6\u30CA\u30F3\u30C8\u30B9\u30B3\u30FC\u30D7\u306E\u30C7\u30FC\u30BF\u306B\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u5834\u5408\u306F\u3001SQL \u306B tenantId \u6761\u4EF6\u3092\u624B\u52D5\u3067\u8FFD\u52A0\u3059\u308B\u304B\u3001\u9069\u5207\u306A tenancy \u8A2D\u5B9A\u3092\u6301\u3064\u901A\u5E38\u306E\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
704
+ "\u26A0 Tenant isolation warning: View collections do not support tenant isolation. Queries are executed as raw SQL with no automatic tenantId filtering. If tenant-level data isolation is required, implement row-level security policies (e.g. PostgreSQL RLS) on the underlying database view.": "\u26A0 \u30C6\u30CA\u30F3\u30C8\u5206\u96E2\u306E\u8B66\u544A: \u30D3\u30E5\u30FC\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u306F\u30C6\u30CA\u30F3\u30C8\u5206\u96E2\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u30AF\u30A8\u30EA\u306F\u751F\u306E SQL \u3068\u3057\u3066\u5B9F\u884C\u3055\u308C\u3001tenantId \u30D5\u30A3\u30EB\u30BF\u30FC\u306F\u81EA\u52D5\u7684\u306B\u8FFD\u52A0\u3055\u308C\u307E\u305B\u3093\u3002\u30C6\u30CA\u30F3\u30C8\u5358\u4F4D\u306E\u30C7\u30FC\u30BF\u5206\u96E2\u304C\u5FC5\u8981\u306A\u5834\u5408\u306F\u3001\u57FA\u306B\u306A\u308B\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u30D3\u30E5\u30FC\u3067\u884C\u30EC\u30D9\u30EB\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u30DD\u30EA\u30B7\u30FC\uFF08\u4F8B: PostgreSQL RLS\uFF09\u3092\u5B9F\u88C5\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
696
705
  "12 hour": "12 \u6642\u9593\u5236",
697
706
  "24 hour": "24 \u6642\u9593\u5236"
698
707
  };
@@ -84,6 +84,7 @@ module.exports = {
84
84
  "Allow to design pages": "\uD398\uC774\uC9C0 \uB514\uC790\uC778 \uD5C8\uC6A9",
85
85
  "Allow to manage plugins": "\uD50C\uB7EC\uADF8\uC778 \uAD00\uB9AC \uD5C8\uC6A9",
86
86
  "Allows configuration of the whole system, including UI, collections, permissions, etc.": "\uC804\uCCB4 \uC2DC\uC2A4\uD15C\uC744 \uAD6C\uC131\uD558\uB294 \uAC83\uC744 \uD5C8\uC6A9\uD569\uB2C8\uB2E4. UI, \uB370\uC774\uD130 \uD14C\uC774\uBE14, \uAD8C\uD55C \uB4F1\uC744 \uD3EC\uD568\uD569\uB2C8\uB2E4.",
87
+ "Allows selected tenants to read records that do not have a tenant marker.": "\uC120\uD0DD\uD55C \uD14C\uB10C\uD2B8\uAC00 \uD14C\uB10C\uD2B8 \uD45C\uC2DC\uAC00 \uC5C6\uB294 \uB808\uCF54\uB4DC\uB97C \uC77D\uC744 \uC218 \uC788\uB3C4\uB85D \uD5C8\uC6A9\uD569\uB2C8\uB2E4.",
87
88
  "Allows to clear cache, reboot application": "\uCE90\uC2DC \uC9C0\uC6B0\uAE30, \uC560\uD50C\uB9AC\uCF00\uC774\uC158 \uC7AC\uC2DC\uC791 \uD5C8\uC6A9",
88
89
  "Allows to configure interface": "\uC778\uD130\uD398\uC774\uC2A4 \uAD6C\uC131\uC744 \uD5C8\uC6A9\uD569\uB2C8\uB2E4",
89
90
  "Allows to configure plugins": "\uD50C\uB7EC\uADF8\uC778 \uAD6C\uC131\uC744 \uD5C8\uC6A9\uD569\uB2C8\uB2E4",
@@ -188,6 +189,7 @@ module.exports = {
188
189
  "Connect to database view": "\uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uBDF0\uC5D0 \uC5F0\uACB0",
189
190
  Constant: "\uC0C1\uC218",
190
191
  "Constant value": "\uC0C1\uC218 \uAC12",
192
+ "Controls whether records are isolated by the current tenant.": "\uB808\uCF54\uB4DC\uAC00 \uD604\uC7AC \uD14C\uB10C\uD2B8\uBCC4\uB85C \uACA9\uB9AC\uB418\uB294\uC9C0 \uC81C\uC5B4\uD569\uB2C8\uB2E4.",
191
193
  "Convert reference to duplicate": "\uCC38\uC870\uB97C \uBCF5\uC81C\uB85C \uBCC0\uD658",
192
194
  "Copy into the form and continue to fill in": "\uD3FC\uC5D0 \uBCF5\uC0AC\uD558\uACE0 \uACC4\uC18D \uCC44\uC6B0\uAE30",
193
195
  "Core Version": "\uD575\uC2EC \uBC84\uC804",
@@ -456,6 +458,7 @@ module.exports = {
456
458
  "Last week": "\uC9C0\uB09C \uC8FC",
457
459
  "Last year": "\uC791\uB144",
458
460
  "Leave it blank, unless you need a custom intermediate table": "\uC0AC\uC6A9\uC790 \uC815\uC758 \uC911\uAC04 \uD14C\uC774\uBE14\uC774 \uD544\uC694\uD558\uC9C0 \uC54A\uC740 \uACBD\uC6B0 \uBE44\uC6CC \uB450\uC138\uC694",
461
+ "Legacy data visible to tenants": "\uD14C\uB10C\uD2B8\uC5D0 \uD45C\uC2DC\uD560 \uB808\uAC70\uC2DC \uB370\uC774\uD130",
459
462
  Length: "\uAE38\uC774",
460
463
  License: "\uB77C\uC774\uC120\uC2A4",
461
464
  Lime: "\uB77C\uC784",
@@ -715,6 +718,7 @@ module.exports = {
715
718
  "Set validation rules": "\uC720\uD6A8\uC131 \uAC80\uC0AC \uADDC\uCE59 \uC124\uC815",
716
719
  Setting: "\uC124\uC815",
717
720
  Settings: "\uC124\uC815",
721
+ "Shared collection": "\uACF5\uC720 \uCEEC\uB809\uC158",
718
722
  "Show lunar": "\uC74C\uB825 \uD45C\uC2DC",
719
723
  "Show time": "\uC2DC\uAC04 \uD45C\uC2DC",
720
724
  "Sign in": "\uB85C\uADF8\uC778",
@@ -779,6 +783,9 @@ module.exports = {
779
783
  "Template mode": "\uD15C\uD50C\uB9BF \uBAA8\uB4DC",
780
784
  "Template name": "\uD15C\uD50C\uB9BF \uC774\uB984",
781
785
  Templates: "\uD15C\uD50C\uB9BF",
786
+ "Tenancy mode": "\uD14C\uB10C\uC2DC \uBAA8\uB4DC",
787
+ "Tenant inherited": "\uD604\uC7AC \uD14C\uB10C\uD2B8 \uBC0F \uD558\uC704 \uD14C\uB10C\uD2B8",
788
+ "Tenant scoped": "\uD604\uC7AC \uD14C\uB10C\uD2B8\uB9CC",
782
789
  "The application is reloading, please do not close the page.": "\uC560\uD50C\uB9AC\uCF00\uC774\uC158\uC774 \uB2E4\uC2DC \uB85C\uB4DC\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4. \uD398\uC774\uC9C0\uB97C \uB2EB\uC9C0 \uB9C8\uC2ED\uC2DC\uC624.",
783
790
  "The deletion was successful.": "\uC0AD\uC81C\uAC00 \uC131\uACF5\uD588\uC2B5\uB2C8\uB2E4.",
784
791
  "The field has been deleted": "\uD544\uB4DC\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
@@ -890,6 +897,8 @@ module.exports = {
890
897
  "\u2260": "\u2260",
891
898
  "\u2264": "\u2264",
892
899
  "\u2265": "\u2265",
900
+ "\u26A0 Tenant isolation warning: SQL collections do not support tenant isolation. The SQL statement is executed as-is with no automatic tenantId filtering. If tenant-scoped data access is needed, manually include tenantId conditions in your SQL, or use a general collection with proper tenancy configuration.": "\u26A0 \uD14C\uB10C\uD2B8 \uACA9\uB9AC \uACBD\uACE0: SQL \uCEEC\uB809\uC158\uC740 \uD14C\uB10C\uD2B8 \uACA9\uB9AC\uB97C \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. SQL \uBB38\uC740 \uADF8\uB300\uB85C \uC2E4\uD589\uB418\uBA70 tenantId \uD544\uD130\uAC00 \uC790\uB3D9\uC73C\uB85C \uCD94\uAC00\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uD14C\uB10C\uD2B8 \uBC94\uC704 \uB370\uC774\uD130\uC5D0 \uC811\uADFC\uD574\uC57C \uD558\uB294 \uACBD\uC6B0 SQL\uC5D0 tenantId \uC870\uAC74\uC744 \uC9C1\uC811 \uCD94\uAC00\uD558\uAC70\uB098 \uC801\uC808\uD55C tenancy \uC124\uC815\uC774 \uC788\uB294 \uC77C\uBC18 \uCEEC\uB809\uC158\uC744 \uC0AC\uC6A9\uD558\uC138\uC694.",
901
+ "\u26A0 Tenant isolation warning: View collections do not support tenant isolation. Queries are executed as raw SQL with no automatic tenantId filtering. If tenant-level data isolation is required, implement row-level security policies (e.g. PostgreSQL RLS) on the underlying database view.": "\u26A0 \uD14C\uB10C\uD2B8 \uACA9\uB9AC \uACBD\uACE0: \uBDF0 \uCEEC\uB809\uC158\uC740 \uD14C\uB10C\uD2B8 \uACA9\uB9AC\uB97C \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uCFFC\uB9AC\uB294 \uC6D0\uC2DC SQL\uB85C \uC2E4\uD589\uB418\uBA70 tenantId \uD544\uD130\uAC00 \uC790\uB3D9\uC73C\uB85C \uCD94\uAC00\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uD14C\uB10C\uD2B8 \uC218\uC900 \uB370\uC774\uD130 \uACA9\uB9AC\uAC00 \uD544\uC694\uD55C \uACBD\uC6B0 \uAE30\uBCF8 \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uBDF0\uC5D0 \uD589 \uC218\uC900 \uBCF4\uC548 \uC815\uCC45(\uC608: PostgreSQL RLS)\uC744 \uAD6C\uD604\uD558\uC138\uC694.",
893
902
  "12 hour": "12 \uC2DC\uAC04",
894
903
  "24 hour": "24 \uC2DC\uAC04"
895
904
  };
@@ -77,6 +77,7 @@ module.exports = {
77
77
  "Allow to manage plugins": "Permitir gerenciar plugins",
78
78
  "Allow uploading multiple files": "Permitir upload de v\xE1rios arquivos",
79
79
  "Allows configuration of the whole system, including UI, collections, permissions, etc.": "Permite a configura\xE7\xE3o de todo o sistema, incluindo UI, cole\xE7\xF5es, permiss\xF5es, etc.",
80
+ "Allows selected tenants to read records that do not have a tenant marker.": "Permite que os tenants selecionados leiam registros que n\xE3o t\xEAm uma marca de tenant.",
80
81
  "Allows to configure interface": "Permite configurar a interface",
81
82
  "Allows to configure plugins": "Permite configurar plugins",
82
83
  "Allows to install, activate, disable plugins": "Permite instalar, ativar, desativar plugins",
@@ -172,6 +173,7 @@ module.exports = {
172
173
  "Configure permissions": "Configurar permiss\xF5es",
173
174
  "Confirm password": "Confirmar senha",
174
175
  "Connect data blocks": "Conectar blocos de dados",
176
+ "Controls whether records are isolated by the current tenant.": "Controla se os registros s\xE3o isolados pelo tenant atual.",
175
177
  "Convert reference to duplicate": "Converter refer\xEAncia em duplicado",
176
178
  "Cor de fundo do bot\xE3o": "Cor de fundo do bot\xE3o",
177
179
  "Core Version": "Vers\xE3o do n\xFAcleo",
@@ -385,6 +387,7 @@ module.exports = {
385
387
  "Last updated at": "\xDAltima atualiza\xE7\xE3o em",
386
388
  "Last updated by": "\xDAltima atualiza\xE7\xE3o por",
387
389
  "Leave it blank, unless you need a custom intermediate table": "Deixe em branco, a menos que precise de uma tabela intermedi\xE1ria personalizada",
390
+ "Legacy data visible to tenants": "Dados legados vis\xEDveis para tenants",
388
391
  Length: "Comprimento",
389
392
  License: "Licen\xE7a",
390
393
  Lime: "Lima",
@@ -579,6 +582,7 @@ module.exports = {
579
582
  "Set default value": "Definir valor padr\xE3o",
580
583
  "Set the data scope": "Definir o escopo de dados",
581
584
  "Set validation rules": "Definir regras de valida\xE7\xE3o",
585
+ "Shared collection": "Cole\xE7\xE3o compartilhada",
582
586
  "Show lunar": "Mostrar calend\xE1rio lunar",
583
587
  "Show time": "Exibir hora",
584
588
  "Sign in": "Entrar",
@@ -632,6 +636,9 @@ module.exports = {
632
636
  "Template Data": "Dados do modelo",
633
637
  "Template name": "Nome do modelo",
634
638
  Templates: "Modelos",
639
+ "Tenancy mode": "Modo de tenancy",
640
+ "Tenant inherited": "Tenant atual e descendentes",
641
+ "Tenant scoped": "Apenas tenant atual",
635
642
  "Tencent COS": "Tencent COS",
636
643
  "The deletion was successful.": "A exclus\xE3o foi bem sucedida.",
637
644
  "The field has been deleted": "O campo foi exclu\xEDdo",
@@ -734,6 +741,8 @@ module.exports = {
734
741
  "\u2260": "\u2260",
735
742
  "\u2264": "\u2264",
736
743
  "\u2265": "\u2265",
744
+ "\u26A0 Tenant isolation warning: SQL collections do not support tenant isolation. The SQL statement is executed as-is with no automatic tenantId filtering. If tenant-scoped data access is needed, manually include tenantId conditions in your SQL, or use a general collection with proper tenancy configuration.": "\u26A0 Aviso de isolamento de tenants: cole\xE7\xF5es SQL n\xE3o oferecem suporte a isolamento de tenants. A instru\xE7\xE3o SQL \xE9 executada como est\xE1, sem filtro tenantId autom\xE1tico. Se for necess\xE1rio acessar dados isolados por tenant, inclua manualmente condi\xE7\xF5es tenantId no SQL ou use uma cole\xE7\xE3o geral com a configura\xE7\xE3o de tenancy adequada.",
745
+ "\u26A0 Tenant isolation warning: View collections do not support tenant isolation. Queries are executed as raw SQL with no automatic tenantId filtering. If tenant-level data isolation is required, implement row-level security policies (e.g. PostgreSQL RLS) on the underlying database view.": "\u26A0 Aviso de isolamento de tenants: cole\xE7\xF5es de visualiza\xE7\xE3o n\xE3o oferecem suporte a isolamento de tenants. As consultas s\xE3o executadas como SQL bruto, sem filtro tenantId autom\xE1tico. Se for necess\xE1rio isolamento de dados por tenant, implemente pol\xEDticas de seguran\xE7a em n\xEDvel de linha (por exemplo, PostgreSQL RLS) na visualiza\xE7\xE3o de banco de dados subjacente.",
737
746
  "12 hour": "12 horas",
738
747
  "24 hour": "24 horas"
739
748
  };
@@ -60,6 +60,7 @@ module.exports = {
60
60
  "Allow multiple": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u0432\u044B\u0431\u043E\u0440",
61
61
  "Allow sign up": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044E",
62
62
  "Allows configuration of the whole system, including UI, collections, permissions, etc.": "\u041F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u043D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044C \u0432\u0441\u044E \u0441\u0438\u0441\u0442\u0435\u043C\u0443, \u0432\u043A\u043B\u044E\u0447\u0430\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438, \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u044F \u0438 \u0442. \u0434.",
63
+ "Allows selected tenants to read records that do not have a tenant marker.": "\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u043C \u0442\u0435\u043D\u0430\u043D\u0442\u0430\u043C \u0447\u0438\u0442\u0430\u0442\u044C \u0437\u0430\u043F\u0438\u0441\u0438 \u0431\u0435\u0437 \u043C\u0435\u0442\u043A\u0438 \u0442\u0435\u043D\u0430\u043D\u0442\u0430.",
63
64
  "App Version": "\u0412\u0435\u0440\u0441\u0438\u044F \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F",
64
65
  "Are you sure to delete this plugin?": "\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u043F\u043B\u0430\u0433\u0438\u043D?",
65
66
  "Are you sure you don't want to save?": "\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u043D\u0435 \u0445\u043E\u0442\u0438\u0442\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C?",
@@ -122,6 +123,7 @@ module.exports = {
122
123
  "Confirm password": "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C \u043F\u0430\u0440\u043E\u043B\u044C",
123
124
  "Connect data blocks": "\u0421\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0431\u043B\u043E\u043A\u0438 \u0434\u0430\u043D\u043D\u044B\u0445",
124
125
  "Constant value": "\u041F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435",
126
+ "Controls whether records are isolated by the current tenant.": "\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u0438\u0437\u043E\u043B\u0438\u0440\u0443\u044E\u0442\u0441\u044F \u043B\u0438 \u0437\u0430\u043F\u0438\u0441\u0438 \u043F\u043E \u0442\u0435\u043A\u0443\u0449\u0435\u043C\u0443 \u0442\u0435\u043D\u0430\u043D\u0442\u0443.",
125
127
  "Convert reference to duplicate": "\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443 \u0432 \u0434\u0443\u0431\u043B\u0438\u043A\u0430\u0442",
126
128
  "Core Version": "\u0412\u0435\u0440\u0441\u0438\u044F \u044F\u0434\u0440\u0430",
127
129
  "Create an account": "\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u0430\u043A\u043A\u0430\u0443\u043D\u0442",
@@ -294,6 +296,7 @@ module.exports = {
294
296
  "Last week": "\u041F\u0440\u043E\u0448\u043B\u0430\u044F \u043D\u0435\u0434\u0435\u043B\u044F",
295
297
  "Last year": "\u041F\u0440\u043E\u0448\u043B\u044B\u0439 \u0433\u043E\u0434",
296
298
  "Leave it blank, unless you need a custom intermediate table": "\u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u044D\u0442\u043E \u043F\u043E\u043B\u0435 \u043F\u0443\u0441\u0442\u044B\u043C, \u0435\u0441\u043B\u0438 \u0432\u0430\u043C \u043D\u0435 \u043D\u0443\u0436\u043D\u0430 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0430\u044F \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u0447\u043D\u0430\u044F \u0442\u0430\u0431\u043B\u0438\u0446\u0430.",
299
+ "Legacy data visible to tenants": "\u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0435, \u0432\u0438\u0434\u0438\u043C\u044B\u0435 \u0442\u0435\u043D\u0430\u043D\u0442\u0430\u043C",
297
300
  License: "\u041B\u0438\u0446\u0435\u043D\u0437\u0438\u044F",
298
301
  Lime: "\u041B\u0430\u0439\u043C",
299
302
  "Line chart": "\u041B\u0438\u043D\u0435\u0439\u043D\u0430\u044F",
@@ -454,6 +457,7 @@ module.exports = {
454
457
  "Set data loading mode": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0440\u0435\u0436\u0438\u043C \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438 \u0434\u0430\u043D\u043D\u044B\u0445",
455
458
  "Set default sorting rules": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E",
456
459
  "Set the data scope": "\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043E\u0431\u043B\u0430\u0441\u0442\u044C \u0434\u0430\u043D\u043D\u044B\u0445",
460
+ "Shared collection": "\u041E\u0431\u0449\u0430\u044F \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u044F",
457
461
  "Show time": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0432\u0440\u0435\u043C\u044F",
458
462
  "Sign in": "\u0412\u043E\u0439\u0442\u0438",
459
463
  "Sign out": "\u0412\u044B\u0439\u0442\u0438",
@@ -489,6 +493,9 @@ module.exports = {
489
493
  "Template Data": "\u0428\u0430\u0431\u043B\u043E\u043D \u0434\u0430\u043D\u043D\u044B\u0445",
490
494
  "Template name": "\u0418\u043C\u044F \u0428\u0430\u0431\u043B\u043E\u043D\u0430",
491
495
  Templates: "\u0428\u0430\u0431\u043B\u043E\u043D\u044B",
496
+ "Tenancy mode": "\u0420\u0435\u0436\u0438\u043C tenancy",
497
+ "Tenant inherited": "\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u0442\u0435\u043D\u0430\u043D\u0442 \u0438 \u043F\u043E\u0442\u043E\u043C\u043A\u0438",
498
+ "Tenant scoped": "\u0422\u043E\u043B\u044C\u043A\u043E \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u0442\u0435\u043D\u0430\u043D\u0442",
492
499
  "The deletion was successful.": "\u0423\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u0448\u043B\u043E \u0443\u0441\u043F\u0435\u0448\u043D\u043E.",
493
500
  "The field has been deleted": "\u041F\u043E\u043B\u0435 \u0431\u044B\u043B\u043E \u0443\u0434\u0430\u043B\u0435\u043D\u043E",
494
501
  'The {{type}} "{{name}}" may have been deleted. Please remove this {{blockType}}.': '{{type}} "{{name}}" \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0431\u044B\u043B \u0443\u0434\u0430\u043B\u0435\u043D. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0443\u0434\u0430\u043B\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 {{blockType}}.',
@@ -569,6 +576,8 @@ module.exports = {
569
576
  "\u2260": "\u2260",
570
577
  "\u2264": "\u2264",
571
578
  "\u2265": "\u2265",
579
+ "\u26A0 Tenant isolation warning: SQL collections do not support tenant isolation. The SQL statement is executed as-is with no automatic tenantId filtering. If tenant-scoped data access is needed, manually include tenantId conditions in your SQL, or use a general collection with proper tenancy configuration.": "\u26A0 \u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0438\u0437\u043E\u043B\u044F\u0446\u0438\u0438 \u0442\u0435\u043D\u0430\u043D\u0442\u043E\u0432: SQL-\u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044E\u0442 \u0438\u0437\u043E\u043B\u044F\u0446\u0438\u044E \u0442\u0435\u043D\u0430\u043D\u0442\u043E\u0432. SQL-\u0437\u0430\u043F\u0440\u043E\u0441 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u0435\u0441\u0442\u044C, \u0431\u0435\u0437 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0444\u0438\u043B\u044C\u0442\u0440\u0430 tenantId. \u0415\u0441\u043B\u0438 \u043D\u0443\u0436\u0435\u043D \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u0434\u0430\u043D\u043D\u044B\u043C \u0432 \u0440\u0430\u043C\u043A\u0430\u0445 \u0442\u0435\u043D\u0430\u043D\u0442\u0430, \u0432\u0440\u0443\u0447\u043D\u0443\u044E \u0434\u043E\u0431\u0430\u0432\u044C\u0442\u0435 \u0443\u0441\u043B\u043E\u0432\u0438\u044F tenantId \u0432 SQL \u0438\u043B\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043E\u0431\u044B\u0447\u043D\u0443\u044E \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u044E \u0441 \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0439 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u043E\u0439 tenancy.",
580
+ "\u26A0 Tenant isolation warning: View collections do not support tenant isolation. Queries are executed as raw SQL with no automatic tenantId filtering. If tenant-level data isolation is required, implement row-level security policies (e.g. PostgreSQL RLS) on the underlying database view.": "\u26A0 \u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0438\u0437\u043E\u043B\u044F\u0446\u0438\u0438 \u0442\u0435\u043D\u0430\u043D\u0442\u043E\u0432: \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0439 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044E\u0442 \u0438\u0437\u043E\u043B\u044F\u0446\u0438\u044E \u0442\u0435\u043D\u0430\u043D\u0442\u043E\u0432. \u0417\u0430\u043F\u0440\u043E\u0441\u044B \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u044E\u0442\u0441\u044F \u043A\u0430\u043A \u0441\u044B\u0440\u043E\u0439 SQL, \u0431\u0435\u0437 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0444\u0438\u043B\u044C\u0442\u0440\u0430 tenantId. \u0415\u0441\u043B\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0438\u0437\u043E\u043B\u044F\u0446\u0438\u044F \u0434\u0430\u043D\u043D\u044B\u0445 \u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 \u0442\u0435\u043D\u0430\u043D\u0442\u0430, \u0440\u0435\u0430\u043B\u0438\u0437\u0443\u0439\u0442\u0435 \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0438 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 \u0441\u0442\u0440\u043E\u043A (\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, PostgreSQL RLS) \u0432 \u0431\u0430\u0437\u043E\u0432\u043E\u043C \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0438 \u0431\u0430\u0437\u044B \u0434\u0430\u043D\u043D\u044B\u0445.",
572
581
  "12 hour": "12 \u0447\u0430\u0441",
573
582
  "24 hour": "24 \u0447\u0430\u0441"
574
583
  };
@@ -59,6 +59,7 @@ module.exports = {
59
59
  "Allow multiple": "Birden \xE7ok izin ver",
60
60
  "Allow sign up": "Kay\u0131t olmaya izin ver",
61
61
  "Allows configuration of the whole system, including UI, collections, permissions, etc.": "UI, koleksiyonlar, izinler vb. dahil olmak \xFCzere t\xFCm sistemin yap\u0131land\u0131r\u0131lmas\u0131na izin verir.",
62
+ "Allows selected tenants to read records that do not have a tenant marker.": "Se\xE7ilen tenantlar\u0131n tenant i\u015Fareti olmayan kay\u0131tlar\u0131 okumas\u0131na izin verir.",
62
63
  "App Version": "Uygulama S\xFCr\xFCm\xFC",
63
64
  "Are you sure to delete this plugin?": "Bu eklentiyi silmek istedi\u011Finizden emin misiniz?",
64
65
  "Are you sure you don't want to save?": "kaydetmek istemedi\u011Finizden emin misiniz??",
@@ -120,6 +121,7 @@ module.exports = {
120
121
  "Confirm password": "\u015Eifre do\u011Frulama",
121
122
  "Connect data blocks": "Veri bloklar\u0131n\u0131 ba\u011Fla",
122
123
  "Constant value": "Sabit de\u011Fer",
124
+ "Controls whether records are isolated by the current tenant.": "Kay\u0131tlar\u0131n ge\xE7erli tenant'a g\xF6re izole edilip edilmeyece\u011Fini kontrol eder.",
123
125
  "Convert reference to duplicate": "Referans\u0131 kopyaya d\xF6n\xFC\u015Ft\xFCr",
124
126
  "Core Version": "\xC7ekirdek S\xFCr\xFCm\xFC",
125
127
  "Create an account": "Hesap olu\u015Ftur",
@@ -293,6 +295,7 @@ module.exports = {
293
295
  "Last week": "Ge\xE7en Hafta",
294
296
  "Last year": "Ge\xE7en Y\u0131l",
295
297
  "Leave it blank, unless you need a custom intermediate table": "\xD6zel bir ara tabloya ihtiyac\u0131n\u0131z yoksa bo\u015F b\u0131rak\u0131n",
298
+ "Legacy data visible to tenants": "Tenantlara g\xF6r\xFCn\xFCr eski veriler",
296
299
  License: "Lisans",
297
300
  Lime: "Limon sar\u0131s\u0131",
298
301
  "Line chart": "\xC7izgi grafik",
@@ -450,6 +453,7 @@ module.exports = {
450
453
  "Set data loading mode": "Veri y\xFCkleme modunu ayarla",
451
454
  "Set default sorting rules": "Varsay\u0131lan s\u0131ralama kurallar\u0131n\u0131 ayarla",
452
455
  "Set the data scope": "Veri kapsam\u0131n\u0131 ayarla",
456
+ "Shared collection": "Payla\u015F\u0131lan koleksiyon",
453
457
  "Show time": "Zaman\u0131 g\xF6ster",
454
458
  "Sign in": "Giri\u015F yap",
455
459
  "Sign out": "\xC7\u0131k\u0131\u015F yap",
@@ -485,6 +489,9 @@ module.exports = {
485
489
  "Template Data": "\u015Eablon Verisi",
486
490
  "Template name": "\u015Eablon ad\u0131",
487
491
  Templates: "\u015Eablonlar",
492
+ "Tenancy mode": "Tenancy modu",
493
+ "Tenant inherited": "Ge\xE7erli tenant ve alt tenantlar",
494
+ "Tenant scoped": "Yaln\u0131zca ge\xE7erli tenant",
488
495
  "The deletion was successful.": "Silme ba\u015Far\u0131l\u0131.",
489
496
  "The field has been deleted": "Alan silindi",
490
497
  'The {{type}} "{{name}}" may have been deleted. Please remove this {{blockType}}.': `{{type}} "{{name}}" silinmi\u015F olabilir. L\xFCtfen bu {{blockType}}'yi kald\u0131r\u0131n.`,
@@ -566,6 +573,8 @@ module.exports = {
566
573
  "\u2260": "\u2260",
567
574
  "\u2264": "\u2264",
568
575
  "\u2265": "\u2265",
576
+ "\u26A0 Tenant isolation warning: SQL collections do not support tenant isolation. The SQL statement is executed as-is with no automatic tenantId filtering. If tenant-scoped data access is needed, manually include tenantId conditions in your SQL, or use a general collection with proper tenancy configuration.": "\u26A0 Tenant izolasyonu uyar\u0131s\u0131: SQL koleksiyonlar\u0131 tenant izolasyonunu desteklemez. SQL ifadesi oldu\u011Fu gibi \xE7al\u0131\u015Ft\u0131r\u0131l\u0131r ve tenantId filtresi otomatik olarak eklenmez. Tenant kapsam\u0131ndaki verilere eri\u015Fmeniz gerekiyorsa SQL i\xE7inde tenantId ko\u015Fullar\u0131n\u0131 elle ekleyin veya uygun tenancy yap\u0131land\u0131rmas\u0131na sahip genel bir koleksiyon kullan\u0131n.",
577
+ "\u26A0 Tenant isolation warning: View collections do not support tenant isolation. Queries are executed as raw SQL with no automatic tenantId filtering. If tenant-level data isolation is required, implement row-level security policies (e.g. PostgreSQL RLS) on the underlying database view.": "\u26A0 Tenant izolasyonu uyar\u0131s\u0131: G\xF6r\xFCn\xFCm koleksiyonlar\u0131 tenant izolasyonunu desteklemez. Sorgular ham SQL olarak \xE7al\u0131\u015Ft\u0131r\u0131l\u0131r ve tenantId filtresi otomatik olarak eklenmez. Tenant d\xFCzeyinde veri izolasyonu gerekiyorsa alttaki veritaban\u0131 g\xF6r\xFCn\xFCm\xFCnde sat\u0131r d\xFCzeyi g\xFCvenlik ilkeleri (\xF6r. PostgreSQL RLS) uygulay\u0131n.",
569
578
  "12 hour": "12 saat",
570
579
  "24 hour": "24 saat"
571
580
  };
@@ -80,6 +80,7 @@ module.exports = {
80
80
  "Allow to manage plugins": "\u0414\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u043A\u0435\u0440\u0443\u0432\u0430\u0442\u0438 \u043F\u043B\u0430\u0433\u0456\u043D\u0430\u043C\u0438",
81
81
  "Allow uploading multiple files": "\u0414\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u0438 \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F \u043A\u0456\u043B\u044C\u043A\u043E\u0445 \u0444\u0430\u0439\u043B\u0456\u0432",
82
82
  "Allows configuration of the whole system, including UI, collections, permissions, etc.": "\u0414\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0432\u0441\u0456\u0454\u0457 \u0441\u0438\u0441\u0442\u0435\u043C\u0438, \u0432\u043A\u043B\u044E\u0447\u0430\u044E\u0447\u0438 \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043A\u043E\u043B\u0435\u043A\u0446\u0456\u0457, \u0434\u043E\u0437\u0432\u043E\u043B\u0438 \u0442\u043E\u0449\u043E.",
83
+ "Allows selected tenants to read records that do not have a tenant marker.": "\u0414\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u0432\u0438\u0431\u0440\u0430\u043D\u0438\u043C \u0442\u0435\u043D\u0430\u043D\u0442\u0430\u043C \u0447\u0438\u0442\u0430\u0442\u0438 \u0437\u0430\u043F\u0438\u0441\u0438 \u0431\u0435\u0437 \u043F\u043E\u0437\u043D\u0430\u0447\u043A\u0438 \u0442\u0435\u043D\u0430\u043D\u0442\u0430.",
83
84
  "Allows to configure interface": "\u0414\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u043D\u0430\u043B\u0430\u0448\u0442\u043E\u0432\u0443\u0432\u0430\u0442\u0438 \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441",
84
85
  "Allows to configure plugins": "\u0414\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u043D\u0430\u043B\u0430\u0448\u0442\u043E\u0432\u0443\u0432\u0430\u0442\u0438 \u043F\u043B\u0430\u0433\u0456\u043D\u0438",
85
86
  "Allows to install, activate, disable plugins": "\u0414\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u044E\u0432\u0430\u0442\u0438, \u0430\u043A\u0442\u0438\u0432\u0443\u0432\u0430\u0442\u0438 \u0442\u0430 \u0432\u0438\u043C\u0438\u043A\u0430\u0442\u0438 \u043F\u043B\u0430\u0433\u0456\u043D\u0438",
@@ -168,6 +169,7 @@ module.exports = {
168
169
  "Connect data blocks": "\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438 \u0431\u043B\u043E\u043A\u0438 \u0434\u0430\u043D\u0438\u0445",
169
170
  "Connect to database view": "\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438 \u0434\u043E \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443 \u0431\u0430\u0437\u0438 \u0434\u0430\u043D\u0438\u0445",
170
171
  "Constant value": "\u041A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F",
172
+ "Controls whether records are isolated by the current tenant.": "\u041A\u0435\u0440\u0443\u0454 \u0442\u0438\u043C, \u0447\u0438 \u0456\u0437\u043E\u043B\u044E\u044E\u0442\u044C\u0441\u044F \u0437\u0430\u043F\u0438\u0441\u0438 \u0437\u0430 \u043F\u043E\u0442\u043E\u0447\u043D\u0438\u043C \u0442\u0435\u043D\u0430\u043D\u0442\u043E\u043C.",
171
173
  "Convert reference to duplicate": "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u043D\u0430 \u0434\u0443\u0431\u043B\u0456\u043A\u0430\u0442",
172
174
  "Core Version": "\u0412\u0435\u0440\u0441\u0456\u044F \u044F\u0434\u0440\u0430",
173
175
  "Create an account": "\u0421\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \u043E\u0431\u043B\u0456\u043A\u043E\u0432\u0438\u0439 \u0437\u0430\u043F\u0438\u0441",
@@ -399,6 +401,7 @@ module.exports = {
399
401
  "Last week": "\u041C\u0438\u043D\u0443\u043B\u0438\u0439 \u0442\u0438\u0436\u0434\u0435\u043D\u044C",
400
402
  "Last year": "\u041C\u0438\u043D\u0443\u043B\u0438\u0439 \u0440\u0456\u043A",
401
403
  "Leave it blank, unless you need a custom intermediate table": "\u0417\u0430\u043B\u0438\u0448\u0442\u0435 \u0439\u043E\u0433\u043E \u043F\u043E\u0440\u043E\u0436\u043D\u0456\u043C, \u044F\u043A\u0449\u043E \u0432\u0430\u043C \u043D\u0435 \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u0430 \u0432\u043B\u0430\u0441\u043D\u0430 \u043F\u0440\u043E\u043C\u0456\u0436\u043D\u0430 \u0442\u0430\u0431\u043B\u0438\u0446\u044F",
404
+ "Legacy data visible to tenants": "\u0417\u0430\u0441\u0442\u0430\u0440\u0456\u043B\u0456 \u0434\u0430\u043D\u0456, \u0432\u0438\u0434\u0438\u043C\u0456 \u0442\u0435\u043D\u0430\u043D\u0442\u0430\u043C",
402
405
  Length: "\u0414\u043E\u0432\u0436\u0438\u043D\u0430",
403
406
  License: "\u041B\u0456\u0446\u0435\u043D\u0437\u0456\u044F",
404
407
  Lime: "\u041B\u0430\u0439\u043C",
@@ -616,6 +619,7 @@ module.exports = {
616
619
  "Set the count of columns displayed in a row": "\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0441\u0442\u043E\u0432\u043F\u0446\u0456\u0432, \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0445 \u0443 \u0440\u044F\u0434\u043A\u0443",
617
620
  "Set the data scope": "\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u043E\u0431\u0441\u044F\u0433 \u0434\u0430\u043D\u0438\u0445",
618
621
  "Set validation rules": "\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u043F\u0435\u0440\u0435\u0432\u0456\u0440\u043A\u0438",
622
+ "Shared collection": "\u0421\u043F\u0456\u043B\u044C\u043D\u0430 \u043A\u043E\u043B\u0435\u043A\u0446\u0456\u044F",
619
623
  "Show lunar": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u043C\u0456\u0441\u044F\u0447\u043D\u0438\u0439 \u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440",
620
624
  "Show time": "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u0447\u0430\u0441",
621
625
  "Sign in": "\u0423\u0432\u0456\u0439\u0442\u0438",
@@ -672,6 +676,9 @@ module.exports = {
672
676
  "Template fields have been removed and need to be reconfigured": "\u041F\u043E\u043B\u044F \u0448\u0430\u0431\u043B\u043E\u043D\u0443 \u0431\u0443\u043B\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u0456 \u0456 \u043F\u043E\u0442\u0440\u0435\u0431\u0443\u044E\u0442\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E\u0457 \u043A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0457",
673
677
  "Template name": "\u041D\u0430\u0437\u0432\u0430 \u0448\u0430\u0431\u043B\u043E\u043D\u0443",
674
678
  Templates: "\u0428\u0430\u0431\u043B\u043E\u043D\u0438",
679
+ "Tenancy mode": "\u0420\u0435\u0436\u0438\u043C tenancy",
680
+ "Tenant inherited": "\u041F\u043E\u0442\u043E\u0447\u043D\u0438\u0439 \u0442\u0435\u043D\u0430\u043D\u0442 \u0456 \u043D\u0430\u0449\u0430\u0434\u043A\u0438",
681
+ "Tenant scoped": "\u041B\u0438\u0448\u0435 \u043F\u043E\u0442\u043E\u0447\u043D\u0438\u0439 \u0442\u0435\u043D\u0430\u043D\u0442",
675
682
  "Tencent COS": "Tencent COS",
676
683
  "The deletion was successful.": "\u0412\u0438\u0434\u0430\u043B\u0435\u043D\u043D\u044F \u043F\u0440\u043E\u0439\u0448\u043B\u043E \u0443\u0441\u043F\u0456\u0448\u043D\u043E.",
677
684
  "The field has been deleted": "\u041F\u043E\u043B\u0435 \u0431\u0443\u043B\u043E \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E",
@@ -775,6 +782,8 @@ module.exports = {
775
782
  "\u2260": "\u2260",
776
783
  "\u2264": "\u2264",
777
784
  "\u2265": "\u2265",
785
+ "\u26A0 Tenant isolation warning: SQL collections do not support tenant isolation. The SQL statement is executed as-is with no automatic tenantId filtering. If tenant-scoped data access is needed, manually include tenantId conditions in your SQL, or use a general collection with proper tenancy configuration.": "\u26A0 \u041F\u043E\u043F\u0435\u0440\u0435\u0434\u0436\u0435\u043D\u043D\u044F \u043F\u0440\u043E \u0456\u0437\u043E\u043B\u044F\u0446\u0456\u044E \u0442\u0435\u043D\u0430\u043D\u0442\u0456\u0432: SQL-\u043A\u043E\u043B\u0435\u043A\u0446\u0456\u0457 \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u044E\u0442\u044C \u0456\u0437\u043E\u043B\u044F\u0446\u0456\u044E \u0442\u0435\u043D\u0430\u043D\u0442\u0456\u0432. SQL-\u0456\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0456\u044F \u0432\u0438\u043A\u043E\u043D\u0443\u0454\u0442\u044C\u0441\u044F \u044F\u043A \u0454, \u0431\u0435\u0437 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E\u0433\u043E \u0444\u0456\u043B\u044C\u0442\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u0437\u0430 tenantId. \u042F\u043A\u0449\u043E \u043F\u043E\u0442\u0440\u0456\u0431\u0435\u043D \u0434\u043E\u0441\u0442\u0443\u043F \u0434\u043E \u0434\u0430\u043D\u0438\u0445 \u0443 \u043C\u0435\u0436\u0430\u0445 \u0442\u0435\u043D\u0430\u043D\u0442\u0430, \u0432\u0440\u0443\u0447\u043D\u0443 \u0434\u043E\u0434\u0430\u0439\u0442\u0435 \u0443\u043C\u043E\u0432\u0438 tenantId \u0434\u043E SQL \u0430\u0431\u043E \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u0437\u0432\u0438\u0447\u0430\u0439\u043D\u0443 \u043A\u043E\u043B\u0435\u043A\u0446\u0456\u044E \u0437 \u043D\u0430\u043B\u0435\u0436\u043D\u043E\u044E \u043A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0454\u044E tenancy.",
786
+ "\u26A0 Tenant isolation warning: View collections do not support tenant isolation. Queries are executed as raw SQL with no automatic tenantId filtering. If tenant-level data isolation is required, implement row-level security policies (e.g. PostgreSQL RLS) on the underlying database view.": "\u26A0 \u041F\u043E\u043F\u0435\u0440\u0435\u0434\u0436\u0435\u043D\u043D\u044F \u043F\u0440\u043E \u0456\u0437\u043E\u043B\u044F\u0446\u0456\u044E \u0442\u0435\u043D\u0430\u043D\u0442\u0456\u0432: \u043A\u043E\u043B\u0435\u043A\u0446\u0456\u0457 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u044C \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u044E\u0442\u044C \u0456\u0437\u043E\u043B\u044F\u0446\u0456\u044E \u0442\u0435\u043D\u0430\u043D\u0442\u0456\u0432. \u0417\u0430\u043F\u0438\u0442\u0438 \u0432\u0438\u043A\u043E\u043D\u0443\u044E\u0442\u044C\u0441\u044F \u044F\u043A \u0441\u0438\u0440\u0438\u0439 SQL, \u0431\u0435\u0437 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E\u0433\u043E \u0444\u0456\u043B\u044C\u0442\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u0437\u0430 tenantId. \u042F\u043A\u0449\u043E \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u0430 \u0456\u0437\u043E\u043B\u044F\u0446\u0456\u044F \u0434\u0430\u043D\u0438\u0445 \u043D\u0430 \u0440\u0456\u0432\u043D\u0456 \u0442\u0435\u043D\u0430\u043D\u0442\u0430, \u0440\u0435\u0430\u043B\u0456\u0437\u0443\u0439\u0442\u0435 \u043F\u043E\u043B\u0456\u0442\u0438\u043A\u0438 \u0431\u0435\u0437\u043F\u0435\u043A\u0438 \u043D\u0430 \u0440\u0456\u0432\u043D\u0456 \u0440\u044F\u0434\u043A\u0456\u0432 (\u043D\u0430\u043F\u0440\u0438\u043A\u043B\u0430\u0434, PostgreSQL RLS) \u0443 \u0431\u0430\u0437\u043E\u0432\u043E\u043C\u0443 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043D\u0456 \u0431\u0430\u0437\u0438 \u0434\u0430\u043D\u0438\u0445.",
778
787
  "12 hour": "12-\u0433\u043E\u0434\u0438\u043D\u043D\u0438\u0439",
779
788
  "24 hour": "24-\u0433\u043E\u0434\u0438\u043D\u043D\u0438\u0439"
780
789
  };
@@ -94,6 +94,7 @@ module.exports = {
94
94
  "Allow to desgin pages": "\u5141\u8BB8\u754C\u9762\u914D\u7F6E",
95
95
  "Allow to manage plugins": "\u5141\u8BB8\u7BA1\u7406\u63D2\u4EF6",
96
96
  "Allows configuration of the whole system, including UI, collections, permissions, etc.": "\u5141\u8BB8\u914D\u7F6E\u7CFB\u7EDF\uFF0C\u5305\u62EC\u754C\u9762\u914D\u7F6E\u3001\u6570\u636E\u8868\u914D\u7F6E\u3001\u6743\u9650\u914D\u7F6E\u3001\u7CFB\u7EDF\u914D\u7F6E\u7B49\u5168\u90E8\u914D\u7F6E\u9879",
97
+ "Allows selected tenants to read records that do not have a tenant marker.": "\u5141\u8BB8\u9009\u4E2D\u7684\u79DF\u6237\u8BFB\u53D6\u6CA1\u6709\u79DF\u6237\u6807\u8BB0\u7684\u65E7\u6570\u636E\u3002",
97
98
  "Allows to clear cache, reboot application": "\u5141\u8BB8\u6E05\u9664\u7F13\u5B58\uFF0C\u91CD\u542F\u5E94\u7528",
98
99
  "Allows to configure interface": "\u5141\u8BB8\u914D\u7F6E\u754C\u9762",
99
100
  "Allows to configure plugins": "\u5141\u8BB8\u914D\u7F6E\u63D2\u4EF6",
@@ -219,6 +220,7 @@ module.exports = {
219
220
  "Connect to database view": "\u8FDE\u63A5\u6570\u636E\u5E93\u89C6\u56FE",
220
221
  Constant: "\u5E38\u91CF",
221
222
  "Constant value": "\u9759\u6001\u503C",
223
+ "Controls whether records are isolated by the current tenant.": "\u63A7\u5236\u8BB0\u5F55\u662F\u5426\u6309\u5F53\u524D\u79DF\u6237\u9694\u79BB\u3002",
222
224
  "Convert reference to duplicate": "\u6A21\u677F\u5F15\u7528\u8F6C\u4E3A\u590D\u5236",
223
225
  "Converted to": "\u8F6C\u6362\u6210",
224
226
  "Copy QR code": "\u590D\u5236\u4E8C\u7EF4\u7801",
@@ -549,6 +551,7 @@ module.exports = {
549
551
  "Layout Direction": "\u5E03\u5C40\u65B9\u5411",
550
552
  "Leave it blank, unless you need a custom intermediate table": "\u9ED8\u8BA4\u7559\u7A7A\uFF0C\u9664\u975E\u4F60\u9700\u8981\u4E00\u4E2A\u81EA\u5B9A\u4E49\u7684\u4E2D\u95F4\u8868",
551
553
  Left: "\u5DE6\u5BF9\u9F50",
554
+ "Legacy data visible to tenants": "\u65E7\u6570\u636E\u53EF\u89C1\u79DF\u6237",
552
555
  Length: "\u957F\u5EA6",
553
556
  License: "\u8BB8\u53EF\u8BC1",
554
557
  Lime: "\u9752\u67E0",
@@ -859,6 +862,7 @@ module.exports = {
859
862
  "Setting Down Title": "\u8BBE\u7F6E\u6587\u4EF6\u540D\u79F0",
860
863
  Settings: "\u8BBE\u7F6E",
861
864
  Share: "\u5206\u4EAB",
865
+ "Shared collection": "\u5171\u4EAB\u6570\u636E\u8868",
862
866
  Sheet: "\u4E0A\u5F39\u6846",
863
867
  "Show Data": "\u663E\u793A\u6570\u636E",
864
868
  "Show lunar": "\u5C55\u793A\u519C\u5386",
@@ -945,6 +949,9 @@ module.exports = {
945
949
  "Template mode": "\u6A21\u677F\u6A21\u5F0F",
946
950
  "Template name": "\u6A21\u677F\u540D\u79F0",
947
951
  Templates: "\u6A21\u677F",
952
+ "Tenancy mode": "\u79DF\u6237\u9694\u79BB\u6A21\u5F0F",
953
+ "Tenant inherited": "\u5F53\u524D\u79DF\u6237\u53CA\u5B50\u5B59\u79DF\u6237",
954
+ "Tenant scoped": "\u4EC5\u5F53\u524D\u79DF\u6237",
948
955
  "Test Data": "\u6D4B\u8BD5\u6570\u636E",
949
956
  "Text fields": "\u6587\u672C\u5B57\u6BB5",
950
957
  "The Tachy Platform is dedicated to creating a user-friendly application development environment, aiming to lower development barriers, enhance efficiency, and provide enterprise users and developers with one-stop solutions.": "\u7075\u77F6\u5E73\u53F0\u81F4\u529B\u4E8E\u6253\u9020\u4E00\u4E2A\u7528\u6237\u53CB\u597D\u7684\u5E94\u7528\u7814\u53D1\u5E73\u53F0\uFF0C\u65E8\u5728\u964D\u4F4E\u5F00\u53D1\u95E8\u69DB\uFF0C\u63D0\u5347\u7814\u53D1\u6548\u7387\uFF0C\u4E3A\u4F01\u4E1A\u7528\u6237\u548C\u5F00\u53D1\u8005\u63D0\u4F9B\u4E00\u7AD9\u5F0F\u89E3\u51B3\u65B9\u6848\u3002",
@@ -1086,6 +1093,8 @@ module.exports = {
1086
1093
  "\u2260": "\u2260",
1087
1094
  "\u2264": "\u2264",
1088
1095
  "\u2265": "\u2265",
1096
+ "\u26A0 Tenant isolation warning: SQL collections do not support tenant isolation. The SQL statement is executed as-is with no automatic tenantId filtering. If tenant-scoped data access is needed, manually include tenantId conditions in your SQL, or use a general collection with proper tenancy configuration.": "\u26A0 \u79DF\u6237\u9694\u79BB\u8B66\u544A\uFF1ASQL \u6570\u636E\u8868\u4E0D\u652F\u6301\u79DF\u6237\u9694\u79BB\u3002\u8BE5 SQL \u8BED\u53E5\u5C06\u4EE5\u539F\u59CB\u5F62\u5F0F\u76F4\u63A5\u6267\u884C\uFF0C\u6846\u67B6\u4E0D\u4F1A\u81EA\u52A8\u6CE8\u5165 tenantId \u8FC7\u6EE4\u6761\u4EF6\u3002\u5982\u679C\u9700\u8981\u6309\u79DF\u6237\u9694\u79BB\u6570\u636E\uFF0C\u8BF7\u624B\u52A8\u5728 SQL \u4E2D\u6DFB\u52A0 tenantId \u6761\u4EF6\uFF0C\u6216\u6539\u7528\u666E\u901A\u6570\u636E\u8868\u5E76\u914D\u7F6E\u79DF\u6237\u9694\u79BB\u9009\u9879\u3002",
1097
+ "\u26A0 Tenant isolation warning: View collections do not support tenant isolation. Queries are executed as raw SQL with no automatic tenantId filtering. If tenant-level data isolation is required, implement row-level security policies (e.g. PostgreSQL RLS) on the underlying database view.": "\u26A0 \u79DF\u6237\u9694\u79BB\u8B66\u544A\uFF1A\u89C6\u56FE\u6570\u636E\u8868\u4E0D\u652F\u6301\u79DF\u6237\u9694\u79BB\u3002\u67E5\u8BE2\u5C06\u4EE5\u539F\u59CB SQL \u76F4\u63A5\u6267\u884C\uFF0C\u6846\u67B6\u4E0D\u4F1A\u81EA\u52A8\u6CE8\u5165 tenantId \u8FC7\u6EE4\u6761\u4EF6\u3002\u5982\u9700\u79DF\u6237\u7EA7\u6570\u636E\u9694\u79BB\uFF0C\u8BF7\u5728\u5E95\u5C42\u6570\u636E\u5E93\u89C6\u56FE\u4E2D\u5B9E\u73B0\u884C\u7EA7\u5B89\u5168\u7B56\u7565\uFF08\u5982 PostgreSQL RLS\uFF09\u3002",
1089
1098
  "12 hour": "12 \u5C0F\u65F6\u5236",
1090
1099
  "24 hour": "24 \u5C0F\u65F6\u5236"
1091
1100
  };
@@ -84,6 +84,7 @@ module.exports = {
84
84
  "Allow to desgin pages": "\u5141\u8A31\u4ECB\u9762\u8A2D\u5B9A",
85
85
  "Allow to manage plugins": "\u5141\u8A31\u7BA1\u7406\u63D2\u4EF6",
86
86
  "Allows configuration of the whole system, including UI, collections, permissions, etc.": "\u5141\u8A31\u8A2D\u5B9A\u7CFB\u7D71\uFF0C\u5305\u62EC\u4ECB\u9762\u8A2D\u5B9A\u3001\u8CC7\u6599\u8868\u8A2D\u5B9A\u3001\u6B0A\u9650\u8A2D\u5B9A\u3001\u7CFB\u7D71\u8A2D\u5B9A\u7B49\u5168\u90E8\u8A2D\u5B9A\u9805",
87
+ "Allows selected tenants to read records that do not have a tenant marker.": "\u5141\u8A31\u9078\u53D6\u7684\u79DF\u6236\u8B80\u53D6\u6C92\u6709\u79DF\u6236\u6A19\u8A18\u7684\u820A\u8CC7\u6599\u3002",
87
88
  "Allows to clear cache, reboot application": "\u5141\u8A31\u6E05\u9664\u5FEB\u53D6\uFF0C\u91CD\u555F App",
88
89
  "Allows to configure interface": "\u5141\u8A31\u8A2D\u5B9A\u4ECB\u9762",
89
90
  "Allows to configure plugins": "\u5141\u8A31\u8A2D\u5B9A\u63D2\u4EF6",
@@ -186,6 +187,7 @@ module.exports = {
186
187
  "Connect to database view": "\u9023\u7DDA\u8CC7\u6599\u5EAB\u6AA2\u8996",
187
188
  Constant: "\u5E38\u91CF",
188
189
  "Constant value": "\u975C\u614B\u503C",
190
+ "Controls whether records are isolated by the current tenant.": "\u63A7\u5236\u8A18\u9304\u662F\u5426\u4F9D\u76EE\u524D\u79DF\u6236\u9694\u96E2\u3002",
189
191
  "Convert reference to duplicate": "\u6A21\u677F\u5F15\u7528\u8F49\u70BA\u8907\u88FD",
190
192
  "Copy into the form and continue to fill in": "\u8907\u88FD\u5230\u8868\u55AE\u4E26\u7E7C\u7E8C\u586B\u5BEB",
191
193
  "Core Version": "\u6838\u5FC3\u7248\u672C",
@@ -441,6 +443,7 @@ module.exports = {
441
443
  "Last week": "\u4E0A\u9031",
442
444
  "Last year": "\u53BB\u5E74",
443
445
  "Leave it blank, unless you need a custom intermediate table": "\u9810\u8A2D\u7559\u7A7A\uFF0C\u9664\u975E\u4F60\u9700\u8981\u4E00\u500B\u81EA\u5B9A\u7FA9\u7684\u4E2D\u4ECB\u8868",
446
+ "Legacy data visible to tenants": "\u820A\u8CC7\u6599\u53EF\u898B\u79DF\u6236",
444
447
  Length: "\u9577\u5EA6",
445
448
  License: "\u8A31\u53EF\u8B49",
446
449
  Lime: "\u9752\u6AB8",
@@ -693,6 +696,7 @@ module.exports = {
693
696
  "Set validation rules": "\u8A2D\u5B9A\u9A57\u8B49\u898F\u5247",
694
697
  Setting: "\u8A2D\u5B9A",
695
698
  Settings: "\u8A2D\u5B9A",
699
+ "Shared collection": "\u5171\u4EAB\u8CC7\u6599\u8868",
696
700
  "Show lunar": "\u5C55\u793A\u8FB2\u66C6",
697
701
  "Show time": "\u986F\u793A\u6642\u9593",
698
702
  "Sign in": "\u767B\u5165",
@@ -756,6 +760,9 @@ module.exports = {
756
760
  "Template Data": "\u6A21\u677F\u8CC7\u6599",
757
761
  "Template name": "\u6A21\u677F\u540D\u7A31",
758
762
  Templates: "\u6A21\u677F",
763
+ "Tenancy mode": "\u79DF\u6236\u9694\u96E2\u6A21\u5F0F",
764
+ "Tenant inherited": "\u76EE\u524D\u79DF\u6236\u53CA\u5B50\u5B6B\u79DF\u6236",
765
+ "Tenant scoped": "\u50C5\u76EE\u524D\u79DF\u6236",
759
766
  "The application is reloading, please do not close the page.": "App \u6B63\u5728\u91CD\u65B0\u8F09\u5165\uFF0C\u8ACB\u52FF\u95DC\u9589\u9801\u9762\u3002",
760
767
  "The deletion was successful.": "\u522A\u9664\u6210\u529F",
761
768
  "The field has been deleted": "\u6B04\u4F4D\u5DF2\u522A\u9664",
@@ -862,6 +869,8 @@ module.exports = {
862
869
  "\u2260": "\u2260",
863
870
  "\u2264": "\u2264",
864
871
  "\u2265": "\u2265",
872
+ "\u26A0 Tenant isolation warning: SQL collections do not support tenant isolation. The SQL statement is executed as-is with no automatic tenantId filtering. If tenant-scoped data access is needed, manually include tenantId conditions in your SQL, or use a general collection with proper tenancy configuration.": "\u26A0 \u79DF\u6236\u9694\u96E2\u8B66\u544A\uFF1ASQL \u8CC7\u6599\u8868\u4E0D\u652F\u63F4\u79DF\u6236\u9694\u96E2\u3002\u8A72 SQL \u8A9E\u53E5\u6703\u4EE5\u539F\u59CB\u5F62\u5F0F\u76F4\u63A5\u57F7\u884C\uFF0C\u6846\u67B6\u4E0D\u6703\u81EA\u52D5\u6CE8\u5165 tenantId \u7BE9\u9078\u689D\u4EF6\u3002\u5982\u9700\u5B58\u53D6\u79DF\u6236\u9694\u96E2\u8CC7\u6599\uFF0C\u8ACB\u624B\u52D5\u5728 SQL \u4E2D\u52A0\u5165 tenantId \u689D\u4EF6\uFF0C\u6216\u6539\u7528\u4E00\u822C\u8CC7\u6599\u8868\u4E26\u8A2D\u5B9A\u79DF\u6236\u9694\u96E2\u9078\u9805\u3002",
873
+ "\u26A0 Tenant isolation warning: View collections do not support tenant isolation. Queries are executed as raw SQL with no automatic tenantId filtering. If tenant-level data isolation is required, implement row-level security policies (e.g. PostgreSQL RLS) on the underlying database view.": "\u26A0 \u79DF\u6236\u9694\u96E2\u8B66\u544A\uFF1A\u6AA2\u8996\u8CC7\u6599\u8868\u4E0D\u652F\u63F4\u79DF\u6236\u9694\u96E2\u3002\u67E5\u8A62\u6703\u4EE5\u539F\u59CB SQL \u76F4\u63A5\u57F7\u884C\uFF0C\u6846\u67B6\u4E0D\u6703\u81EA\u52D5\u6CE8\u5165 tenantId \u7BE9\u9078\u689D\u4EF6\u3002\u5982\u9700\u79DF\u6236\u7D1A\u8CC7\u6599\u9694\u96E2\uFF0C\u8ACB\u5728\u5E95\u5C64\u8CC7\u6599\u5EAB\u6AA2\u8996\u4E2D\u5BE6\u4F5C\u8CC7\u6599\u5217\u5C64\u7D1A\u5B89\u5168\u6027\u539F\u5247\uFF08\u4F8B\u5982 PostgreSQL RLS\uFF09\u3002",
865
874
  "12 hour": "12 \u5C0F\u6642\u5236",
866
875
  "24 hour": "24 \u5C0F\u6642\u5236"
867
876
  };
@@ -1 +1 @@
1
- {"name":"cronstrue","title":"cRonstrue","version":"3.2.0","description":"Convert cron expressions into human readable descriptions","author":"Brady Holt","license":"MIT","bugs":{"url":"https://github.com/bradymholt/cronstrue/issues"},"homepage":"https://github.com/bradymholt/cronstrue","keywords":["cron","cronjob","crontab","schedule","parser","cron expression","cron description","pretty cron","cron for humans","cron translated","cron english","cron schedule","cron english","cron schedule"],"main":"dist/cronstrue.js","bin":{"cronstrue":"bin/cli.js"},"typings":"dist/cronstrue.d.ts","files":["dist/","locales/","i18n.js","i18n.d.ts"],"repository":{"type":"git","url":"git+https://github.com/bradymholt/cronstrue.git"},"publishConfig":{"access":"public"},"prettier":{"printWidth":120},"devDependencies":{"@types/chai":"^4.2.11","@types/mocha":"^8.0.0","chai":"^4.2.0","handlebars":"^4.7.6","marked":"^4.0.10","mocha":"^10.1.0","pixl-xml":"^1.0.13","prettier":"^2.1.1","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.2.6","ts-node":"^10.5.0","typescript":"^4.6.2","webpack":"^5.69.1","webpack-cli":"^4.9.2","xml2js":"^0.5.0"},"scripts":{"start":"npm run build","build":"npx tsc -p ./src --emitDeclarationOnly","test":"npx mocha --reporter spec --require ts-node/register \"./test/**/*.ts\"","prepublishOnly":"rm -rf ./dist && ./node_modules/webpack-cli/bin/cli.js && git add -A"},"dependencies":{},"_lastModified":"2026-08-10T06:53:16.663Z"}
1
+ {"name":"cronstrue","title":"cRonstrue","version":"3.2.0","description":"Convert cron expressions into human readable descriptions","author":"Brady Holt","license":"MIT","bugs":{"url":"https://github.com/bradymholt/cronstrue/issues"},"homepage":"https://github.com/bradymholt/cronstrue","keywords":["cron","cronjob","crontab","schedule","parser","cron expression","cron description","pretty cron","cron for humans","cron translated","cron english","cron schedule","cron english","cron schedule"],"main":"dist/cronstrue.js","bin":{"cronstrue":"bin/cli.js"},"typings":"dist/cronstrue.d.ts","files":["dist/","locales/","i18n.js","i18n.d.ts"],"repository":{"type":"git","url":"git+https://github.com/bradymholt/cronstrue.git"},"publishConfig":{"access":"public"},"prettier":{"printWidth":120},"devDependencies":{"@types/chai":"^4.2.11","@types/mocha":"^8.0.0","chai":"^4.2.0","handlebars":"^4.7.6","marked":"^4.0.10","mocha":"^10.1.0","pixl-xml":"^1.0.13","prettier":"^2.1.1","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.2.6","ts-node":"^10.5.0","typescript":"^4.6.2","webpack":"^5.69.1","webpack-cli":"^4.9.2","xml2js":"^0.5.0"},"scripts":{"start":"npm run build","build":"npx tsc -p ./src --emitDeclarationOnly","test":"npx mocha --reporter spec --require ts-node/register \"./test/**/*.ts\"","prepublishOnly":"rm -rf ./dist && ./node_modules/webpack-cli/bin/cli.js && git add -A"},"dependencies":{},"_lastModified":"2026-08-11T09:25:14.757Z"}
@@ -1 +1 @@
1
- {"name":"express","description":"Fast, unopinionated, minimalist web framework","version":"4.21.2","author":"TJ Holowaychuk <tj@vision-media.ca>","contributors":["Aaron Heckmann <aaron.heckmann+github@gmail.com>","Ciaran Jessup <ciaranj@gmail.com>","Douglas Christopher Wilson <doug@somethingdoug.com>","Guillermo Rauch <rauchg@gmail.com>","Jonathan Ong <me@jongleberry.com>","Roman Shtylman <shtylman+expressjs@gmail.com>","Young Jae Sim <hanul@hanul.me>"],"license":"MIT","repository":"expressjs/express","homepage":"http://expressjs.com/","funding":{"type":"opencollective","url":"https://opencollective.com/express"},"keywords":["express","framework","sinatra","web","http","rest","restful","router","app","api"],"dependencies":{"accepts":"~1.3.8","array-flatten":"1.1.1","body-parser":"1.20.3","content-disposition":"0.5.4","content-type":"~1.0.4","cookie":"0.7.1","cookie-signature":"1.0.6","debug":"2.6.9","depd":"2.0.0","encodeurl":"~2.0.0","escape-html":"~1.0.3","etag":"~1.8.1","finalhandler":"1.3.1","fresh":"0.5.2","http-errors":"2.0.0","merge-descriptors":"1.0.3","methods":"~1.1.2","on-finished":"2.4.1","parseurl":"~1.3.3","path-to-regexp":"0.1.12","proxy-addr":"~2.0.7","qs":"6.13.0","range-parser":"~1.2.1","safe-buffer":"5.2.1","send":"0.19.0","serve-static":"1.16.2","setprototypeof":"1.2.0","statuses":"2.0.1","type-is":"~1.6.18","utils-merge":"1.0.1","vary":"~1.1.2"},"devDependencies":{"after":"0.8.2","connect-redis":"3.4.2","cookie-parser":"1.4.6","cookie-session":"2.0.0","ejs":"3.1.9","eslint":"8.47.0","express-session":"1.17.2","hbs":"4.2.0","marked":"0.7.0","method-override":"3.0.0","mocha":"10.2.0","morgan":"1.10.0","nyc":"15.1.0","pbkdf2-password":"1.2.1","supertest":"6.3.0","vhost":"~3.0.2"},"engines":{"node":">= 0.10.0"},"files":["LICENSE","History.md","Readme.md","index.js","lib/"],"scripts":{"lint":"eslint .","test":"mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/","test-ci":"nyc --exclude examples --exclude test --exclude benchmarks --reporter=lcovonly --reporter=text npm test","test-cov":"nyc --exclude examples --exclude test --exclude benchmarks --reporter=html --reporter=text npm test","test-tap":"mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/"},"_lastModified":"2026-08-10T06:53:18.051Z"}
1
+ {"name":"express","description":"Fast, unopinionated, minimalist web framework","version":"4.21.2","author":"TJ Holowaychuk <tj@vision-media.ca>","contributors":["Aaron Heckmann <aaron.heckmann+github@gmail.com>","Ciaran Jessup <ciaranj@gmail.com>","Douglas Christopher Wilson <doug@somethingdoug.com>","Guillermo Rauch <rauchg@gmail.com>","Jonathan Ong <me@jongleberry.com>","Roman Shtylman <shtylman+expressjs@gmail.com>","Young Jae Sim <hanul@hanul.me>"],"license":"MIT","repository":"expressjs/express","homepage":"http://expressjs.com/","funding":{"type":"opencollective","url":"https://opencollective.com/express"},"keywords":["express","framework","sinatra","web","http","rest","restful","router","app","api"],"dependencies":{"accepts":"~1.3.8","array-flatten":"1.1.1","body-parser":"1.20.3","content-disposition":"0.5.4","content-type":"~1.0.4","cookie":"0.7.1","cookie-signature":"1.0.6","debug":"2.6.9","depd":"2.0.0","encodeurl":"~2.0.0","escape-html":"~1.0.3","etag":"~1.8.1","finalhandler":"1.3.1","fresh":"0.5.2","http-errors":"2.0.0","merge-descriptors":"1.0.3","methods":"~1.1.2","on-finished":"2.4.1","parseurl":"~1.3.3","path-to-regexp":"0.1.12","proxy-addr":"~2.0.7","qs":"6.13.0","range-parser":"~1.2.1","safe-buffer":"5.2.1","send":"0.19.0","serve-static":"1.16.2","setprototypeof":"1.2.0","statuses":"2.0.1","type-is":"~1.6.18","utils-merge":"1.0.1","vary":"~1.1.2"},"devDependencies":{"after":"0.8.2","connect-redis":"3.4.2","cookie-parser":"1.4.6","cookie-session":"2.0.0","ejs":"3.1.9","eslint":"8.47.0","express-session":"1.17.2","hbs":"4.2.0","marked":"0.7.0","method-override":"3.0.0","mocha":"10.2.0","morgan":"1.10.0","nyc":"15.1.0","pbkdf2-password":"1.2.1","supertest":"6.3.0","vhost":"~3.0.2"},"engines":{"node":">= 0.10.0"},"files":["LICENSE","History.md","Readme.md","index.js","lib/"],"scripts":{"lint":"eslint .","test":"mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/","test-ci":"nyc --exclude examples --exclude test --exclude benchmarks --reporter=lcovonly --reporter=text npm test","test-cov":"nyc --exclude examples --exclude test --exclude benchmarks --reporter=html --reporter=text npm test","test-tap":"mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/"},"_lastModified":"2026-08-11T09:25:15.998Z"}
@@ -1,4 +1,5 @@
1
1
  import { Plugin } from '@tego/server';
2
+ export declare function getPluginDirectoryNameCandidates(pluginName: string, packagesPath?: string): string[];
2
3
  /**
3
4
  * 注册插件静态文件服务
4
5
  * 提供 /static/plugins/ 路径的静态文件服务
@@ -27,6 +27,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
28
  var plugin_static_files_exports = {};
29
29
  __export(plugin_static_files_exports, {
30
+ getPluginDirectoryNameCandidates: () => getPluginDirectoryNameCandidates,
30
31
  registerPluginStaticFiles: () => registerPluginStaticFiles
31
32
  });
32
33
  module.exports = __toCommonJS(plugin_static_files_exports);
@@ -34,6 +35,39 @@ var import_node_fs = require("node:fs");
34
35
  var import_node_path = require("node:path");
35
36
  var import_server = require("@tego/server");
36
37
  var import_express = __toESM(require("express"));
38
+ const packageDirectoryCandidatesCache = /* @__PURE__ */ new Map();
39
+ function getPackageName(pluginName) {
40
+ return pluginName.startsWith("@") ? pluginName : `@tachybase/${pluginName.replace(/^@tachybase\//, "")}`;
41
+ }
42
+ function getPluginDirectoryNameCandidates(pluginName, packagesPath) {
43
+ const cleanPluginName = pluginName.replace(/^@tachybase\//, "");
44
+ const candidates = [cleanPluginName];
45
+ if (!packagesPath || !(0, import_node_fs.existsSync)(packagesPath)) {
46
+ return candidates;
47
+ }
48
+ const packageName = getPackageName(pluginName);
49
+ const cacheKey = `${packagesPath}:${packageName}`;
50
+ const cached = packageDirectoryCandidatesCache.get(cacheKey);
51
+ if (cached) {
52
+ return cached;
53
+ }
54
+ try {
55
+ for (const entry of (0, import_node_fs.readdirSync)(packagesPath)) {
56
+ const packageJsonPath = (0, import_node_path.join)(packagesPath, entry, "package.json");
57
+ if (!(0, import_node_fs.existsSync)(packageJsonPath) || !(0, import_node_fs.statSync)(packageJsonPath).isFile()) {
58
+ continue;
59
+ }
60
+ const packageJson = JSON.parse((0, import_node_fs.readFileSync)(packageJsonPath, "utf8"));
61
+ if ((packageJson == null ? void 0 : packageJson.name) === packageName) {
62
+ candidates.push(entry);
63
+ }
64
+ }
65
+ } catch (error) {
66
+ }
67
+ const result = Array.from(new Set(candidates));
68
+ packageDirectoryCandidatesCache.set(cacheKey, result);
69
+ return result;
70
+ }
37
71
  function registerPluginStaticFiles(plugin) {
38
72
  const callback = (0, import_express.default)();
39
73
  const prefix = "/static/plugins";
@@ -93,13 +127,20 @@ function registerPluginStaticFiles(plugin) {
93
127
  };
94
128
  const findPluginFile = (pluginName, relativePath) => {
95
129
  const cleanPluginName = pluginName.replace(/^@tachybase\//, "");
130
+ const packagesPaths = [
131
+ (0, import_node_path.join)(process.cwd(), "packages"),
132
+ (0, import_node_path.join)(__dirname, "../../../../packages"),
133
+ (0, import_node_path.join)(__dirname, "../../../packages")
134
+ ];
96
135
  const possibleBasePaths = [
97
136
  (0, import_node_path.join)(process.cwd(), "node_modules", "@tachybase", cleanPluginName),
98
- (0, import_node_path.join)(process.cwd(), "packages", cleanPluginName),
99
137
  (0, import_node_path.join)(__dirname, "../../../../node_modules/@tachybase", cleanPluginName),
100
- (0, import_node_path.join)(__dirname, "../../../../packages", cleanPluginName),
101
138
  (0, import_node_path.join)(__dirname, "../../../node_modules/@tachybase", cleanPluginName),
102
- (0, import_node_path.join)(__dirname, "../../../packages", cleanPluginName)
139
+ ...packagesPaths.flatMap(
140
+ (packagesPath) => getPluginDirectoryNameCandidates(pluginName, packagesPath).map(
141
+ (pluginDirectoryName) => (0, import_node_path.join)(packagesPath, pluginDirectoryName)
142
+ )
143
+ )
103
144
  ];
104
145
  if (process.env.TEGO_RUNTIME_HOME) {
105
146
  possibleBasePaths.push((0, import_node_path.join)(process.env.TEGO_RUNTIME_HOME, "node_modules", "@tachybase", cleanPluginName));
@@ -123,8 +164,11 @@ function registerPluginStaticFiles(plugin) {
123
164
  const [, pluginName, relativePath] = match;
124
165
  let filePath = null;
125
166
  if (isPackagesPath) {
126
- filePath = (0, import_node_path.join)(pluginBasePath, pluginName, relativePath);
127
- if (!(0, import_node_fs.existsSync)(filePath) || !(0, import_node_fs.statSync)(filePath).isFile()) {
167
+ for (const pluginDirectoryName of getPluginDirectoryNameCandidates(pluginName, pluginBasePath)) {
168
+ filePath = (0, import_node_path.join)(pluginBasePath, pluginDirectoryName, relativePath);
169
+ if ((0, import_node_fs.existsSync)(filePath) && (0, import_node_fs.statSync)(filePath).isFile()) {
170
+ break;
171
+ }
128
172
  filePath = null;
129
173
  }
130
174
  } else {
@@ -157,5 +201,6 @@ function registerPluginStaticFiles(plugin) {
157
201
  }
158
202
  // Annotate the CommonJS export names for ESM import in node:
159
203
  0 && (module.exports = {
204
+ getPluginDirectoryNameCandidates,
160
205
  registerPluginStaticFiles
161
206
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tachybase/module-web",
3
3
  "displayName": "WEB client",
4
- "version": "1.6.25",
4
+ "version": "1.6.27",
5
5
  "description": "Provides a client interface for the TachyBase server",
6
6
  "keywords": [
7
7
  "System management"
@@ -40,7 +40,7 @@
40
40
  "react-dom": "18.3.1",
41
41
  "react-i18next": "16.2.1",
42
42
  "react-router-dom": "6.28.1",
43
- "@tachybase/client": "1.6.25"
43
+ "@tachybase/client": "1.6.27"
44
44
  },
45
45
  "description.zh-CN": "为 TachyBase 服务端提供客户端界面",
46
46
  "displayName.zh-CN": "WEB 客户端",