diff --git a/TopModel.Core/Model/I18nConfig.cs b/TopModel.Core/Model/I18nConfig.cs
index 2526937d..e078a288 100644
--- a/TopModel.Core/Model/I18nConfig.cs
+++ b/TopModel.Core/Model/I18nConfig.cs
@@ -26,4 +26,9 @@ public class I18nConfig
/// Si les libellés des listes de références doivent être traduits.
///
public bool TranslateReferences { get; set; } = true;
+
+ ///
+ /// Si les libellés des propriétés doivent être traduits.
+ ///
+ public bool TranslateProperties { get; set; } = true;
}
diff --git a/TopModel.Core/schema.config.json b/TopModel.Core/schema.config.json
index 540e827b..ae27e9d2 100644
--- a/TopModel.Core/schema.config.json
+++ b/TopModel.Core/schema.config.json
@@ -74,6 +74,11 @@
"type": "boolean",
"description": "Si les libellés des listes de références doivent être traduits.",
"default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
}
}
},
diff --git a/TopModel.Generator.Core/GeneratorConfigBase.cs b/TopModel.Generator.Core/GeneratorConfigBase.cs
index 7fce33ab..249a54d0 100644
--- a/TopModel.Generator.Core/GeneratorConfigBase.cs
+++ b/TopModel.Generator.Core/GeneratorConfigBase.cs
@@ -35,6 +35,16 @@ public abstract class GeneratorConfigBase
public string Language { get; set; }
#nullable enable
+ ///
+ /// Si les libellés des listes de références doivent être traduits.
+ ///
+ public bool? TranslateReferences { get; set; }
+
+ ///
+ /// Si les libellés des propriétés doivent être traduits.
+ ///
+ public bool? TranslateProperties { get; set; }
+
///
/// Générateurs désactivés.
///
diff --git a/TopModel.Generator.Core/TranslationGeneratorBase.cs b/TopModel.Generator.Core/TranslationGeneratorBase.cs
index 3ae8ca7a..c0fe44d7 100644
--- a/TopModel.Generator.Core/TranslationGeneratorBase.cs
+++ b/TopModel.Generator.Core/TranslationGeneratorBase.cs
@@ -22,7 +22,8 @@ public TranslationGeneratorBase(ILogger> logger, Tra
.Where(c => c.Tags.Contains(tag))
.SelectMany(c => c.Properties.OfType());
- return properties.SelectMany(p => GetResourceFileNames(p, tag))
+ return properties
+ .SelectMany(p => GetResourceFileNames(p, tag))
.Concat(properties.SelectMany(p => GetCommentResourceFileNames(p, tag)))
.Concat(GetMainResourceFileNames(tag))
.Select(p => p.FilePath);
@@ -95,6 +96,11 @@ protected virtual void HandleMainResourceFile(string mainFilePath, IEnumerable<(
private IEnumerable<(string Lang, string FilePath)> GetCommentResourceFileNames(IFieldProperty property, string tag)
{
+ if (Config.TranslateProperties != true)
+ {
+ return [];
+ }
+
return _translationStore.Translations
.Select(lang => (lang: lang.Key, file: GetCommentResourceFilePath(property.CommentResourceProperty, tag, lang.Key)!))
.Where(g => g.file != null);
@@ -109,6 +115,11 @@ protected virtual void HandleMainResourceFile(string mainFilePath, IEnumerable<(
private IEnumerable<(string Lang, string FilePath)> GetResourceFileNames(IFieldProperty property, string tag)
{
+ if (Config.TranslateProperties != true && (Config.TranslateReferences != true || !(property.Class?.Values.Any() ?? false)))
+ {
+ return [];
+ }
+
return _translationStore.Translations
.Select(lang => (lang: lang.Key, file: GetResourceFilePath(property.ResourceProperty, tag, lang.Key)!))
.Where(g => g.file != null);
diff --git a/TopModel.Generator.Csharp/csharp.config.json b/TopModel.Generator.Csharp/csharp.config.json
index b545b967..9fb9e183 100644
--- a/TopModel.Generator.Csharp/csharp.config.json
+++ b/TopModel.Generator.Csharp/csharp.config.json
@@ -75,6 +75,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/TopModel.Generator.Javascript/GeneratorRegistration.cs b/TopModel.Generator.Javascript/GeneratorRegistration.cs
index 1e6d3c61..77080f93 100644
--- a/TopModel.Generator.Javascript/GeneratorRegistration.cs
+++ b/TopModel.Generator.Javascript/GeneratorRegistration.cs
@@ -41,7 +41,7 @@ public void Register(IServiceCollection services, JavascriptConfig config, int n
}
}
- if (config.ResourceRootPath != null)
+ if (config.ResourceRootPath != null && config.TranslateProperties == true || config.TranslateReferences == true)
{
services.AddGenerator(config, number);
}
diff --git a/TopModel.Generator.Javascript/JavascriptResourceGenerator.cs b/TopModel.Generator.Javascript/JavascriptResourceGenerator.cs
index 9b994548..9eb385c2 100644
--- a/TopModel.Generator.Javascript/JavascriptResourceGenerator.cs
+++ b/TopModel.Generator.Javascript/JavascriptResourceGenerator.cs
@@ -134,23 +134,26 @@ private void WriteClasseNode(FileWriter fw, IGrouping p.NameCamel, StringComparer.Ordinal))
+ if (Config.TranslateProperties == true)
{
- var translation = isComment
- ? property.CommentResourceProperty.Comment.Replace(Environment.NewLine, " ").Replace("\"", "'")
- : _translationStore.GetTranslation(property, lang);
-
- if (translation == string.Empty)
+ foreach (var property in container.OrderBy(p => p.NameCamel, StringComparer.Ordinal))
{
- translation = property.Name;
- }
+ var translation = isComment
+ ? property.CommentResourceProperty.Comment.Replace(Environment.NewLine, " ").Replace("\"", "'")
+ : _translationStore.GetTranslation(property, lang);
+
+ if (translation == string.Empty)
+ {
+ translation = property.Name;
+ }
- fw.Write(indentLevel + 1, $"{Quote(property.NameCamel)}: ");
- fw.Write($@"""{translation}""");
- fw.WriteLine(container.Count() == i++ && !(_modelConfig.I18n.TranslateReferences && container.Key is Class { DefaultProperty: not null, Enum: true } && ((container.Key as Class)?.Values.Any() ?? false)) ? string.Empty : ",");
+ fw.Write(indentLevel + 1, $"{Quote(property.NameCamel)}: ");
+ fw.Write($@"""{translation}""");
+ fw.WriteLine(container.Count() == i++ && !(Config.TranslateReferences == true && container.Key is Class { DefaultProperty: not null, Enum: true } && ((container.Key as Class)?.Values.Any() ?? false)) ? string.Empty : ",");
+ }
}
- if (_modelConfig.I18n.TranslateReferences && container.Key is Class { DefaultProperty: not null, Enum: true } classe && (classe?.Values.Any() ?? false))
+ if (Config.TranslateReferences == true && container.Key is Class { DefaultProperty: not null, Enum: true } classe && (classe?.Values.Any() ?? false))
{
i = 1;
fw.WriteLine(indentLevel + 1, @$"{Quote("values")}: {{");
diff --git a/TopModel.Generator.Javascript/TypescriptDefinitionGenerator.cs b/TopModel.Generator.Javascript/TypescriptDefinitionGenerator.cs
index e5fd9e24..1bd043e0 100644
--- a/TopModel.Generator.Javascript/TypescriptDefinitionGenerator.cs
+++ b/TopModel.Generator.Javascript/TypescriptDefinitionGenerator.cs
@@ -196,11 +196,25 @@ protected override void HandleClass(string fileName, Class classe, string tag)
fw.WriteLine($" defaultValue: {defaultValue},");
}
- fw.WriteLine($" label: \"{field.ResourceKey}\"{(Config.GenerateComments ? "," : string.Empty)}");
+ if (Config.TranslateProperties == true)
+ {
+ fw.WriteLine($" label: \"{field.ResourceKey}\"{(Config.GenerateComments ? "," : string.Empty)}");
+ }
+ else
+ {
+ fw.WriteLine($" label: \"{field.Label}\"{(Config.GenerateComments ? "," : string.Empty)}");
+ }
if (Config.GenerateComments)
{
- fw.WriteLine($" comment: \"{field.CommentResourceKey}\"");
+ if (Config.TranslateProperties == true)
+ {
+ fw.WriteLine($" comment: \"{field.Comment}\"");
+ }
+ else
+ {
+ fw.WriteLine($" comment: \"{field.CommentResourceKey}\"");
+ }
}
}
else if (property is CompositionProperty cp3 && cp3.Domain != null && !Config.IsListComposition(cp3))
@@ -212,11 +226,19 @@ protected override void HandleClass(string fileName, Class classe, string tag)
fw.Write(cp3.Domain.Name);
fw.Write(",\r\n isRequired: true");
fw.Write(",\r\n label: \"");
- fw.Write(classe.Namespace.ModuleCamel);
- fw.Write(".");
- fw.Write(classe.NameCamel);
- fw.Write(".");
- fw.Write(property.NameCamel);
+ if (Config.TranslateProperties == true)
+ {
+ fw.Write(classe.Namespace.ModuleCamel);
+ fw.Write(".");
+ fw.Write(classe.NameCamel);
+ fw.Write(".");
+ fw.Write(property.NameCamel);
+ }
+ else
+ {
+ fw.Write(property.Label);
+ }
+
fw.Write("\"\r\n");
}
else if (property is CompositionProperty cp2 && cp2.Composition.Name != classe.Name)
diff --git a/TopModel.Generator.Javascript/TypescriptReferenceGenerator.cs b/TopModel.Generator.Javascript/TypescriptReferenceGenerator.cs
index 8d0e9b77..f6b17d36 100644
--- a/TopModel.Generator.Javascript/TypescriptReferenceGenerator.cs
+++ b/TopModel.Generator.Javascript/TypescriptReferenceGenerator.cs
@@ -173,7 +173,7 @@ private void WriteReferenceValues(FileWriter fw, Class reference)
{
fw.WriteLine(" {");
fw.Write(" ");
- fw.Write(string.Join(",\n ", refValue.Value.Where(p => p.Value != "null").Select(property => $"{property.Key.NameCamel}: {(Config.GetImplementation(property.Key.Domain)?.Type == "string" ? @$"""{(_modelConfig.I18n.TranslateReferences && property.Key == property.Key.Class.DefaultProperty ? refValue.ResourceKey : property.Value)}""" : @$"{property.Value}")}")));
+ fw.Write(string.Join(",\n ", refValue.Value.Where(p => p.Value != "null").Select(property => $"{property.Key.NameCamel}: {(Config.GetImplementation(property.Key.Domain)?.Type == "string" ? @$"""{(Config.TranslateReferences == true && property.Key == property.Key.Class.DefaultProperty ? refValue.ResourceKey : property.Value)}""" : @$"{property.Value}")}")));
fw.WriteLine();
fw.WriteLine(" },");
}
diff --git a/TopModel.Generator.Javascript/javascript.config.json b/TopModel.Generator.Javascript/javascript.config.json
index 7cb2a6c0..2dc12852 100644
--- a/TopModel.Generator.Javascript/javascript.config.json
+++ b/TopModel.Generator.Javascript/javascript.config.json
@@ -114,6 +114,11 @@
"description": "Si les listes de référence doivent être traduites",
"default": "true"
},
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits",
+ "default": "true"
+ },
"generateComments": {
"type": "boolean",
"description": "Ajoute les commentaires dans les entités JS générées."
diff --git a/TopModel.Generator.Jpa/JpaModelConstructorGenerator.cs b/TopModel.Generator.Jpa/JpaModelConstructorGenerator.cs
index 2ff39f51..b2a3e844 100644
--- a/TopModel.Generator.Jpa/JpaModelConstructorGenerator.cs
+++ b/TopModel.Generator.Jpa/JpaModelConstructorGenerator.cs
@@ -46,8 +46,8 @@ public void WriteEnumConstructor(JavaWriter fw, Class classe, List availa
foreach (var prop in classe.GetProperties(availableClasses).OfType()
.Where(p => p != codeProperty))
{
- var isString = _config.GetType((IFieldProperty)prop) == "String";
- var value = refValue.Value.ContainsKey((IFieldProperty)prop) ? refValue.Value[(IFieldProperty)prop] : "null";
+ var isString = _config.GetType(prop) == "String";
+ var value = refValue.Value.ContainsKey(prop) ? refValue.Value[prop] : "null";
if (prop is AssociationProperty ap && codeProperty.PrimaryKey && ap.Association.Values.Any(r => r.Value.ContainsKey(ap.Property) && r.Value[ap.Property] == value))
{
value = ap.Association.NamePascal + "." + value;
@@ -59,7 +59,7 @@ public void WriteEnumConstructor(JavaWriter fw, Class classe, List availa
value = _config.GetType(prop) + "." + value;
}
- if (modelConfig.I18n.TranslateReferences && classe.DefaultProperty == prop && !_config.CanClassUseEnums(classe, prop: prop))
+ if (_config.TranslateReferences == true && classe.DefaultProperty == prop && !_config.CanClassUseEnums(classe, prop: prop))
{
value = refValue.ResourceKey;
}
diff --git a/TopModel.Generator.Jpa/JpaResourceGenerator.cs b/TopModel.Generator.Jpa/JpaResourceGenerator.cs
index b08f18f8..1ef33517 100644
--- a/TopModel.Generator.Jpa/JpaResourceGenerator.cs
+++ b/TopModel.Generator.Jpa/JpaResourceGenerator.cs
@@ -65,15 +65,18 @@ protected override void HandleResourceFile(string filePath, string lang, IEnumer
/// Classe.
private void WriteClasse(FileWriter fw, IGrouping container, string lang)
{
- foreach (var property in container)
+ if (Config.TranslateProperties == true)
{
- if (property.Label != null)
+ foreach (var property in container)
{
- fw.WriteLine($"{property.ResourceKey}={_translationStore.GetTranslation(property, lang)}");
+ if (property.Label != null)
+ {
+ fw.WriteLine($"{property.ResourceKey}={_translationStore.GetTranslation(property, lang)}");
+ }
}
}
- if (container.Key is Class classe && classe.DefaultProperty != null)
+ if (container.Key is Class classe && classe.DefaultProperty != null && Config.TranslateReferences == true)
{
foreach (var val in classe.Values)
{
diff --git a/TopModel.Generator.Jpa/jpa.config.json b/TopModel.Generator.Jpa/jpa.config.json
index 60edca5f..8d46d53d 100644
--- a/TopModel.Generator.Jpa/jpa.config.json
+++ b/TopModel.Generator.Jpa/jpa.config.json
@@ -60,6 +60,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/TopModel.Generator.Php/php.config.json b/TopModel.Generator.Php/php.config.json
index 0cefd7cf..d289473f 100644
--- a/TopModel.Generator.Php/php.config.json
+++ b/TopModel.Generator.Php/php.config.json
@@ -57,6 +57,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/TopModel.Generator.Sql/GeneratorRegistration.cs b/TopModel.Generator.Sql/GeneratorRegistration.cs
index 4e3ee422..01dee316 100644
--- a/TopModel.Generator.Sql/GeneratorRegistration.cs
+++ b/TopModel.Generator.Sql/GeneratorRegistration.cs
@@ -31,6 +31,7 @@ public void Register(IServiceCollection services, SqlConfig config, int number)
CombinePath(config.OutputDirectory, config.Procedural, c => c.TypeFile);
CombinePath(config.OutputDirectory, config.Procedural, c => c.UniqueKeysFile);
CombinePath(config.OutputDirectory, config.Procedural, c => c.CommentFile);
+ CombinePath(config.OutputDirectory, config.Procedural, c => c.ResourceFile);
services.AddGenerator(config, number);
}
diff --git a/TopModel.Generator.Sql/Procedural/AbstractSchemaGenerator.cs b/TopModel.Generator.Sql/Procedural/AbstractSchemaGenerator.cs
index c1b004a7..fbe43554 100644
--- a/TopModel.Generator.Sql/Procedural/AbstractSchemaGenerator.cs
+++ b/TopModel.Generator.Sql/Procedural/AbstractSchemaGenerator.cs
@@ -17,11 +17,13 @@ public abstract class AbstractSchemaGenerator
private readonly SqlConfig _config;
private readonly ILogger _logger;
+ private readonly TranslationStore _translationStore;
- public AbstractSchemaGenerator(SqlConfig config, ILogger logger)
+ public AbstractSchemaGenerator(SqlConfig config, ILogger logger, TranslationStore translationStore)
{
_config = config;
_logger = logger;
+ _translationStore = translationStore;
}
protected ProceduralSqlConfig Config => _config.Procedural!;
@@ -104,6 +106,7 @@ public void GenerateSchemaScript(IEnumerable classes)
SqlFileWriter? writerType = null;
SqlFileWriter? writerUk = null;
SqlFileWriter? writerComment = null;
+ SqlFileWriter? writerResource = null;
if (Config.TypeFile != null)
{
@@ -120,6 +123,11 @@ public void GenerateSchemaScript(IEnumerable classes)
writerComment = new SqlFileWriter(Config.CommentFile, _logger);
}
+ if (Config.ResourceFile != null)
+ {
+ writerResource = new SqlFileWriter(Config.ResourceFile, _logger);
+ }
+
var appName = classes.First().Namespace.App;
writerCrebas.WriteLine("-- =========================================================================================== ");
@@ -146,15 +154,27 @@ public void GenerateSchemaScript(IEnumerable classes)
writerComment?.WriteLine("-- Description : Script de création des commentaires. ");
writerComment?.WriteLine("-- =========================================================================================== ");
+ writerResource?.WriteLine("-- =========================================================================================== ");
+ writerResource?.WriteLine($"-- Application Name : {appName} ");
+ writerResource?.WriteLine("-- Script Name : " + Config.ResourceFile?.Split('/').Last());
+ writerResource?.WriteLine("-- Description : Script de création des resources (libellés traduits). ");
+ writerResource?.WriteLine("-- =========================================================================================== ");
+
var foreignKeys = classes
.OrderBy(c => c.SqlName)
.Where(c => c.IsPersistent && !c.Abstract && classes.Contains(c))
- .SelectMany(classe => WriteTableDeclaration(classe, writerCrebas, writerUk, writerType, writerComment, classes.ToList()))
+ .SelectMany(classe => WriteTableDeclaration(classe, writerCrebas, writerUk, writerType, writerComment, writerResource, classes.ToList()))
.ToList();
+ if (_config.TranslateProperties == true || _config.TranslateReferences == true)
+ {
+ WriteResourceTableDeclaration(writerCrebas);
+ }
+
writerType?.Dispose();
writerUk?.Dispose();
writerComment?.Dispose();
+ writerResource?.Dispose();
using var writer = new SqlFileWriter(Config.IndexFKFile, _logger);
@@ -166,9 +186,28 @@ public void GenerateSchemaScript(IEnumerable classes)
foreach (var fkProperty in foreignKeys)
{
- GenerateIndexForeignKey(writer, fkProperty);
+ GenerateIndexForeignKey(fkProperty, writer);
GenerateConstraintForeignKey(fkProperty, writer);
}
+
+ if ((_config.TranslateReferences == true || _config.TranslateProperties == true) && _config.ResourcesTableName != null)
+ {
+ var targetClass = new Class()
+ {
+ SqlName = _config.ResourcesTableName
+ };
+ var targetProperty = new RegularProperty()
+ {
+ Name = "ResourceKey",
+ Class = targetClass
+ };
+ var resourceProperties = classes.Where(c => c.DefaultProperty != null && c.Values.Count() > 0 && c.Enum).Select(c => c.DefaultProperty!);
+ foreach (var fkProperty in resourceProperties)
+ {
+ GenerateIndexForeignKey(fkProperty, writer);
+ GenerateConstraintForeignKey(fkProperty, targetProperty, targetClass, writer);
+ }
+ }
}
///
@@ -200,6 +239,11 @@ protected static string CheckIdentifierLength(string identifier)
{
definition.TryGetValue(property, out var value);
nameValueDict[property.SqlName] = _config.GetValue(property, availableClasses, value);
+
+ if (_config.TranslateReferences == true && modelClass.DefaultProperty == property && !_config.CanClassUseEnums(modelClass, prop: property))
+ {
+ nameValueDict[property.SqlName] = $@"""{initItem.ResourceKey}""";
+ }
}
}
@@ -238,18 +282,30 @@ protected virtual void WriteType(Class classe, SqlFileWriter? writerType)
/// Flux d'écriture.
private void GenerateConstraintForeignKey(AssociationProperty property, SqlFileWriter writer)
{
- var tableName = property.Class.SqlName;
- var propertyName = ((IFieldProperty)property).SqlName;
+ GenerateConstraintForeignKey(property, property.Property, property.Association, writer);
+ }
+
+ ///
+ /// Génère la contrainte de clef étrangère.
+ ///
+ /// Propriété portant la clef étrangère.
+ /// Propriété destination de la contrainte.
+ /// Association destination de la clef étrangère.
+ /// Flux d'écriture.
+ private void GenerateConstraintForeignKey(IFieldProperty propertySource, IFieldProperty propertyTarget, Class association, SqlFileWriter writer)
+ {
+ var tableName = propertySource.Class.SqlName;
+ var propertyName = propertySource.SqlName;
writer.WriteLine("/**");
writer.WriteLine(" * Génération de la contrainte de clef étrangère pour " + tableName + "." + propertyName);
writer.WriteLine(" **/");
writer.WriteLine("alter table " + Quote(tableName));
- var constraintName = Quote($"FK_{property.Class.SqlName}_{propertyName}");
+ var constraintName = Quote($"FK_{propertySource.Class.SqlName}_{propertyName}");
writer.WriteLine("\tadd constraint " + constraintName + " foreign key (" + Quote(propertyName) + ")");
- writer.Write("\t\treferences " + Quote(property.Association.SqlName) + " (");
+ writer.Write("\t\treferences " + Quote(association.SqlName) + " (");
- writer.Write(Quote(property.Property.SqlName));
+ writer.Write(Quote(propertyTarget.SqlName));
writer.WriteLine($"){BatchSeparator}");
writer.WriteLine();
@@ -258,12 +314,12 @@ private void GenerateConstraintForeignKey(AssociationProperty property, SqlFileW
///
/// Génère l'index portant sur la clef étrangère.
///
- /// Flux d'écriture.
/// Propriété cible de l'index.
- private void GenerateIndexForeignKey(SqlFileWriter writer, AssociationProperty property)
+ /// Flux d'écriture.
+ private void GenerateIndexForeignKey(IFieldProperty property, SqlFileWriter writer)
{
var tableName = Quote(property.Class.SqlName);
- var propertyName = ((IFieldProperty)property).SqlName;
+ var propertyName = property.SqlName;
writer.WriteLine("/**");
writer.WriteLine(" * Création de l'index de clef étrangère pour " + tableName + "." + propertyName);
writer.WriteLine(" **/");
@@ -331,6 +387,11 @@ private string Quote(string name)
return !UseQuotes ? name : $@"""{name}""";
}
+ private string SingleQuote(string name)
+ {
+ return $@"'{name.Replace("'", "''")}'";
+ }
+
///
/// Ecrit dans le writer le script d'insertion dans la table staticTable ayant pour model modelClass.
///
@@ -371,6 +432,60 @@ private void WritePrimaryKeyConstraint(SqlFileWriter writerCrebas, Class classe,
writerCrebas.WriteLine($"){BatchSeparator}");
}
+ private void WriteResourceTableDeclaration(SqlFileWriter writer)
+ {
+ if (_config.ResourcesTableName != null)
+ {
+ var tableName = Quote(_config.ResourcesTableName);
+ writer.WriteLine("/**");
+ writer.WriteLine(" * Création de ta table " + tableName + " contenant les traductions");
+ writer.WriteLine(" **/");
+ writer.WriteLine($"create table {_config.ResourcesTableName} (");
+ writer.WriteLine(1, "RESOURCE_KEY varchar(255),");
+ writer.WriteLine(1, "LOCALE varchar(10),");
+ writer.WriteLine(1, "LABEL varchar(255),");
+ writer.WriteLine(1, "constraint PK_KEY_LOCALE primary key (RESOURCE_KEY, LOCALE)");
+ writer.WriteLine(")");
+
+ writer.WriteLine("/**");
+ writer.WriteLine(" * Création de l'index pour " + tableName + " (RESOURCE_KEY, LOCALE)");
+ writer.WriteLine(" **/");
+ writer.WriteLine("create index " + Quote($"IDX_{_config.ResourcesTableName}_RESOURCE_KEY_LOCALE") + " on " + tableName + " (");
+ writer.WriteLine("\t" + "RESOURCE_KEY, LOCALE" + " ASC");
+ writer.WriteLine($"){BatchSeparator}");
+ writer.WriteLine();
+ }
+ }
+
+ private void WriteResources(SqlFileWriter writer, Class modelClass)
+ {
+ if (_config.TranslateProperties == true && modelClass.Properties.OfType().Where(p => p.Label != null).Count() > 0 && modelClass.ModelFile != null)
+ {
+ writer.WriteLine();
+ writer.WriteLine("/**\t\tInitialisation des traductions des propriétés de la table " + modelClass.SqlName + "\t\t**/");
+ foreach (var lang in _translationStore.Translations.Keys)
+ {
+ foreach (var property in modelClass.Properties.OfType().Where(p => p.Label != null))
+ {
+ writer.WriteLine($@"INSERT INTO {_config.ResourcesTableName}(RESOURCE_KEY, LOCALE, LABEL) VALUES({SingleQuote(property.ResourceKey)}, {(string.IsNullOrEmpty(lang) ? "null" : @$"{SingleQuote(lang)}")}, {SingleQuote(_translationStore.GetTranslation(property, lang))});");
+ }
+ }
+ }
+
+ if (modelClass.DefaultProperty != null && modelClass.Values.Count() > 0 && _config.TranslateReferences == true)
+ {
+ writer.WriteLine();
+ writer.WriteLine("/**\t\tInitialisation des traductions des valeurs de la table " + modelClass.SqlName + "\t\t**/");
+ foreach (var lang in _translationStore.Translations.Keys)
+ {
+ foreach (var val in modelClass.Values)
+ {
+ writer.WriteLine(@$"INSERT INTO {_config.ResourcesTableName}(RESOURCE_KEY, LOCALE, LABEL) VALUES({SingleQuote(val.ResourceKey)}, {(string.IsNullOrEmpty(lang) ? "null" : @$"{SingleQuote(lang)}")}, {SingleQuote(_translationStore.GetTranslation(val, lang))});");
+ }
+ }
+ }
+ }
+
///
/// Déclaration de la table.
///
@@ -379,8 +494,9 @@ private void WritePrimaryKeyConstraint(SqlFileWriter writerCrebas, Class classe,
/// Flux d'écriture Unique Key.
/// Flux d'écritures des types.
/// Flux d'écritures des commentaires.
+ /// Flux d'écritures des commentaires.
/// Liste des propriétés étrangères persistentes.
- private IEnumerable WriteTableDeclaration(Class classe, SqlFileWriter writerCrebas, SqlFileWriter? writerUk, SqlFileWriter? writerType, SqlFileWriter? writerComment, IList availableClasses)
+ private IEnumerable WriteTableDeclaration(Class classe, SqlFileWriter writerCrebas, SqlFileWriter? writerUk, SqlFileWriter? writerType, SqlFileWriter? writerComment, SqlFileWriter? writerResources, IList availableClasses)
{
var fkPropertiesList = new List();
@@ -507,6 +623,11 @@ private IEnumerable WriteTableDeclaration(Class classe, Sql
WriteComments(writerComment, classe, tableName, properties);
}
+ if (writerResources is not null)
+ {
+ WriteResources(writerResources, classe);
+ }
+
writerCrebas.WriteLine();
if (isContainsInsertKey)
diff --git a/TopModel.Generator.Sql/Procedural/PostgreSchemaGenerator.cs b/TopModel.Generator.Sql/Procedural/PostgreSchemaGenerator.cs
index 22fb8540..b0fc1163 100644
--- a/TopModel.Generator.Sql/Procedural/PostgreSchemaGenerator.cs
+++ b/TopModel.Generator.Sql/Procedural/PostgreSchemaGenerator.cs
@@ -8,8 +8,8 @@ namespace TopModel.Generator.Sql.Procedural;
///
public class PostgreSchemaGenerator : AbstractSchemaGenerator
{
- public PostgreSchemaGenerator(SqlConfig config, ILogger logger)
- : base(config, logger)
+ public PostgreSchemaGenerator(SqlConfig config, ILogger logger, TranslationStore translationStore)
+ : base(config, logger, translationStore)
{
}
diff --git a/TopModel.Generator.Sql/Procedural/ProceduralSqlConfig.cs b/TopModel.Generator.Sql/Procedural/ProceduralSqlConfig.cs
index ca4803d6..a4d50754 100644
--- a/TopModel.Generator.Sql/Procedural/ProceduralSqlConfig.cs
+++ b/TopModel.Generator.Sql/Procedural/ProceduralSqlConfig.cs
@@ -32,6 +32,11 @@ public class ProceduralSqlConfig
///
public string? CommentFile { get; set; }
+ ///
+ /// Retourne ou définit l'emplacement du fichier de création des commentaires (SQL).
+ ///
+ public string? ResourceFile { get; set; }
+
///
/// Retourne ou définit l'emplacement du script d'insertion des données des listes de référence (SQL).
///
diff --git a/TopModel.Generator.Sql/Procedural/ProceduralSqlGenerator.cs b/TopModel.Generator.Sql/Procedural/ProceduralSqlGenerator.cs
index fc8b9b2a..07d069eb 100644
--- a/TopModel.Generator.Sql/Procedural/ProceduralSqlGenerator.cs
+++ b/TopModel.Generator.Sql/Procedural/ProceduralSqlGenerator.cs
@@ -10,12 +10,15 @@ public class ProceduralSqlGenerator : GeneratorBase
{
private readonly ILogger _logger;
+ private readonly TranslationStore _translationStore;
+
private AbstractSchemaGenerator? _schemaGenerator;
- public ProceduralSqlGenerator(ILogger logger)
+ public ProceduralSqlGenerator(ILogger logger, TranslationStore translationStore)
: base(logger)
{
_logger = logger;
+ _translationStore = translationStore;
}
public override string Name => "ProceduralSqlGen";
@@ -27,6 +30,7 @@ public ProceduralSqlGenerator(ILogger logger)
Config.Procedural!.InitListFile!,
Config.Procedural!.UniqueKeysFile!,
Config.Procedural!.CommentFile!,
+ Config.Procedural!.ResourceFile!,
}.Where(t => !string.IsNullOrEmpty(t));
protected override bool PersistentOnly => true;
@@ -36,8 +40,8 @@ private AbstractSchemaGenerator SchemaGenerator
get
{
_schemaGenerator ??= Config.TargetDBMS == TargetDBMS.Postgre
- ? new PostgreSchemaGenerator(Config, _logger)
- : new SqlServerSchemaGenerator(Config, _logger);
+ ? new PostgreSchemaGenerator(Config, _logger, _translationStore)
+ : new SqlServerSchemaGenerator(Config, _logger, _translationStore);
return _schemaGenerator;
}
diff --git a/TopModel.Generator.Sql/Procedural/SqlServerSchemaGenerator.cs b/TopModel.Generator.Sql/Procedural/SqlServerSchemaGenerator.cs
index b39ae985..dd144186 100644
--- a/TopModel.Generator.Sql/Procedural/SqlServerSchemaGenerator.cs
+++ b/TopModel.Generator.Sql/Procedural/SqlServerSchemaGenerator.cs
@@ -8,8 +8,8 @@ namespace TopModel.Generator.Sql.Procedural;
///
public class SqlServerSchemaGenerator : AbstractSchemaGenerator
{
- public SqlServerSchemaGenerator(SqlConfig config, ILogger logger)
- : base(config, logger)
+ public SqlServerSchemaGenerator(SqlConfig config, ILogger logger, TranslationStore translationStore)
+ : base(config, logger, translationStore)
{
}
diff --git a/TopModel.Generator.Sql/SqlConfig.cs b/TopModel.Generator.Sql/SqlConfig.cs
index 3e9a24ec..03c20b7d 100644
--- a/TopModel.Generator.Sql/SqlConfig.cs
+++ b/TopModel.Generator.Sql/SqlConfig.cs
@@ -22,6 +22,11 @@ public class SqlConfig : GeneratorConfigBase
///
public override bool IgnoreDefaultValues { get; set; } = true;
+ ///
+ /// Retourne ou définit le nom de la table contenant les traductions.
+ ///
+ public string? ResourcesTableName { get; set; }
+
///
/// SGBD cible ("sqlserver" ou "postgres").
///
diff --git a/TopModel.Generator.Sql/sql.config.json b/TopModel.Generator.Sql/sql.config.json
index 44920951..f3f14459 100644
--- a/TopModel.Generator.Sql/sql.config.json
+++ b/TopModel.Generator.Sql/sql.config.json
@@ -43,6 +43,20 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
+ "resourcesTableName": {
+ "type": "string",
+ "description": "Nom de la table dans laquelle doivent être insérées les traductions."
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -80,6 +94,10 @@
"type": "string",
"description": "Emplacement du fichier de création des commentaires."
},
+ "resourceFile": {
+ "type": "string",
+ "description": "Emplacement du fichier d'insertion des resources (libellés traduits)."
+ },
"initListFile": {
"type": "string",
"description": "Emplacement du script d'insertion des données des listes de référence."
diff --git a/TopModel.Generator.Translation/translation.config.json b/TopModel.Generator.Translation/translation.config.json
index e2a76c43..2e221a59 100644
--- a/TopModel.Generator.Translation/translation.config.json
+++ b/TopModel.Generator.Translation/translation.config.json
@@ -37,6 +37,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/TopModel.Generator/Program.cs b/TopModel.Generator/Program.cs
index 30d5dfc7..66356594 100644
--- a/TopModel.Generator/Program.cs
+++ b/TopModel.Generator/Program.cs
@@ -268,6 +268,9 @@ void HandleFile(FileInfo file)
genConfig.ExcludedTags = excludedTags;
genConfig.InitVariables(config.App, number);
+ genConfig.TranslateReferences ??= config.I18n.TranslateReferences;
+ genConfig.TranslateProperties ??= config.I18n.TranslateProperties;
+
ModelUtils.TrimSlashes(genConfig, c => c.OutputDirectory);
ModelUtils.CombinePath(dn, genConfig, c => c.OutputDirectory);
diff --git a/docs/generator/sql.md b/docs/generator/sql.md
index bfa47d6f..d9c89c64 100644
--- a/docs/generator/sql.md
+++ b/docs/generator/sql.md
@@ -12,6 +12,7 @@ Le générateur SQL en mode `procedural` peut générer les fichiers suivants :
- Un fichier d'insertion des valeurs pour toutes les classes persistées du modèle qui ont des `values`.
- Un fichier d'insertion des commentaires pour toutes les classes persistées du modèle, ainsi que pour leurs colonnes (`postgresql` uniquement).
- Un fichier de définition des types toutes les classes persistées du modèle, ainsi que pour leurs colonnes (`sqlserver` uniquement).
+- Un fichier d'insertion des traductions dans la table définie par le paramètre `resourcesTableName`.
### SSDT
@@ -39,6 +40,7 @@ _Remarque : A l'inverse de tous les autres générateurs, le générateur SQL es
- `initListFile` : Nom du fichier d'insertion des listes de références.
- `commentFile` : Nom du fichier d'insertion des commentaires.
- `typeFile` : Nom du fichier de création des types.
+ - `resourceFile` : Nom du fichier d'insertion des traductions.
- `ssdt`
@@ -68,6 +70,10 @@ _Remarque : A l'inverse de tous les autres générateurs, le générateur SQL es
Début de la séquence générée.
+- `resourcesTableName`
+
+ Nom de la table contenant les traductions
+
### Exemple
```yaml
@@ -82,6 +88,7 @@ sql:
uniqueKeysFile: 03_unique_keys.sql
initListFile: 04_references.sql
commentFile: 05_comments.sql
+ resourceFile: 06_resources.sql
identity:
increment: 50
start: 1000
diff --git a/docs/model/i18n.md b/docs/model/i18n.md
index 7d86cdfa..b982d006 100644
--- a/docs/model/i18n.md
+++ b/docs/model/i18n.md
@@ -1,12 +1,27 @@
# Multilinguisme
-Dans le model, les libelles des différentes propriétés sont ajoutés dans une langues de référence. Mais il peut arriver que ces libelles doivent être traduits, et possiblement dans les différentes couches du projet (front-end, back-end...).
+Dans le model, les libelles des différentes propriétés sont ajoutés dans une langues de référence. Mais il peut arriver que ces libelles doivent être traduits, et possiblement dans les différentes couches du projet (front-end, back-end...).
-Pour cela, TopModel permet de générer des **clés de traductions**, associées à chacunes des propriétés, ainsi que des fichiers de ressources contenant les traductions de ces clés.
+Pour répondre à ce besoin, les générateurs sont capables (JPA et JS uniquement) de remplacer les libellés saisis dans le modèle par des **clés de traduction**, et générer les **resources** correspondantes dans les différentes langues désirées.
-Charge ensuite au développeur de fournir au générateur des fichiers de traductions dans les différents langages cibles.
+Charge ensuite au développeur de fournir au générateur des fichiers de traductions dans les différents langages cibles. Egalement reste à développer les mécanisme de traduction selon la stratégie choisie.
-Il est possible d'ajouter le générateur `TranslationOutGen`, qui permet de générer des fichiers de traductions vierges reprenant l'ensemble des traductions manquantes dans les fichiers d'entrée.
+## Paramétrer les clés générées
+
+Les paramètres `translateReferences` et `translateProperties` permettent d'identifier quels libellés doivent être remplacés par des clés : respectivement les libellés des listes de références, et les libellés des propriétés.
+
+Ces paramètres peuvent être ajoutés à la configuration globale de modgen, dans `i18n.translateReferences` et `i18n.translateProperties`. Dans ce cas là le paramètre est appliqué à tous les générateurs.
+Ils peuvent également être ajoutés à la configuration de chaque générateur. La valeur saisie surcharge alors celle de la configuration globale.
+
+## Fichiers de resources
+
+Pour que soient générés les fichiers de resource, le paramètre `resourceRootPath` doit être configuré. Chaque générateur a ensuite ses spécificités, mais l'objectif est le même : générer du code permettant de faire la correspondance entre les clés et les traductions dans les différentes langues.
+
+## Traduire les libellés
+
+Pour générer les fichiers de resources dans les langues autres que la langue de référence, `modgen` attend que des fichiers de propriété soient ajoutés au modèle. Ces fichiers, au format `*.properties`, doivent être placés dans le dossier adéquat pour que le générateur les prenne en compte. Ce dossier se paramètre avec la propriété `i18n.rootPath` et sa valeur par défaut est `i18n/{lang}/in`. Il s'agit d'un template pour les dossiers contenant les traductions entrantes.
+
+Pour faciliter le travail de traduction, il est possible de configurer le générateur `TranslationOutGen`. Il permet de générer des fichiers de traductions vierges reprenant l'ensemble des traductions qui ne sont pas dans des fichiers d'entrée.
> **Attention** : Les traductions entrantes ne sont lues qu'au lancement de la commande `modgen`. Le mode `watch` ne fonctionnera pas avec ces fichiers.
@@ -23,6 +38,7 @@ i18n:
defaultLang: fr_FR # Langue par défaut de l'application
rootPath: i18n/{lang}/in # Template du dossier contenant les fichiers de traductions entrants
translateReferences: true # Si TopModel doit traduire les listes de référence ie : remplacer le libelle par la clé de traductions
+ translateProperties: true # Si TopModel doit traduire les propriétés ie : remplacer le libelle par la clé de traductions
langs: # Liste des langues de l'application
- en_EN
- de_DE
diff --git a/samples/generators/angular/topmodel.config.schema.json b/samples/generators/angular/topmodel.config.schema.json
index e5655828..b10708f5 100644
--- a/samples/generators/angular/topmodel.config.schema.json
+++ b/samples/generators/angular/topmodel.config.schema.json
@@ -74,6 +74,11 @@
"type": "boolean",
"description": "Si les libellés des listes de références doivent être traduits.",
"default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
}
}
},
@@ -163,6 +168,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -460,6 +475,11 @@
"description": "Si les listes de référence doivent être traduites",
"default": "true"
},
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits",
+ "default": "true"
+ },
"generateComments": {
"type": "boolean",
"description": "Ajoute les commentaires dans les entités JS générées."
@@ -547,6 +567,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -612,6 +642,15 @@
"type": "string",
"description": "Localisation des ressources, relative au répertoire de génération."
},
+ "resourcesEncoding": {
+ "type": "string",
+ "description": "Encodage des fichiers de resource.",
+ "default": "Latin1",
+ "enum": [
+ "Latin1",
+ "UTF8"
+ ]
+ },
"useJdbc": {
"type": "boolean",
"description": "Générer les entités en mode JDBC",
@@ -763,6 +802,20 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
+ "resourcesTableName": {
+ "type": "string",
+ "description": "Nom de la table dans laquelle doivent être insérées les traductions."
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -800,6 +853,10 @@
"type": "string",
"description": "Emplacement du fichier de création des commentaires."
},
+ "resourceFile": {
+ "type": "string",
+ "description": "Emplacement du fichier d'insertion des resources (libellés traduits)."
+ },
"initListFile": {
"type": "string",
"description": "Emplacement du script d'insertion des données des listes de référence."
@@ -901,6 +958,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/samples/generators/csharp/topmodel.config.schema.json b/samples/generators/csharp/topmodel.config.schema.json
index e5655828..b10708f5 100644
--- a/samples/generators/csharp/topmodel.config.schema.json
+++ b/samples/generators/csharp/topmodel.config.schema.json
@@ -74,6 +74,11 @@
"type": "boolean",
"description": "Si les libellés des listes de références doivent être traduits.",
"default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
}
}
},
@@ -163,6 +168,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -460,6 +475,11 @@
"description": "Si les listes de référence doivent être traduites",
"default": "true"
},
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits",
+ "default": "true"
+ },
"generateComments": {
"type": "boolean",
"description": "Ajoute les commentaires dans les entités JS générées."
@@ -547,6 +567,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -612,6 +642,15 @@
"type": "string",
"description": "Localisation des ressources, relative au répertoire de génération."
},
+ "resourcesEncoding": {
+ "type": "string",
+ "description": "Encodage des fichiers de resource.",
+ "default": "Latin1",
+ "enum": [
+ "Latin1",
+ "UTF8"
+ ]
+ },
"useJdbc": {
"type": "boolean",
"description": "Générer les entités en mode JDBC",
@@ -763,6 +802,20 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
+ "resourcesTableName": {
+ "type": "string",
+ "description": "Nom de la table dans laquelle doivent être insérées les traductions."
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -800,6 +853,10 @@
"type": "string",
"description": "Emplacement du fichier de création des commentaires."
},
+ "resourceFile": {
+ "type": "string",
+ "description": "Emplacement du fichier d'insertion des resources (libellés traduits)."
+ },
"initListFile": {
"type": "string",
"description": "Emplacement du script d'insertion des données des listes de référence."
@@ -901,6 +958,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/samples/generators/database/topmodel.config.schema.json b/samples/generators/database/topmodel.config.schema.json
index e5655828..b10708f5 100644
--- a/samples/generators/database/topmodel.config.schema.json
+++ b/samples/generators/database/topmodel.config.schema.json
@@ -74,6 +74,11 @@
"type": "boolean",
"description": "Si les libellés des listes de références doivent être traduits.",
"default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
}
}
},
@@ -163,6 +168,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -460,6 +475,11 @@
"description": "Si les listes de référence doivent être traduites",
"default": "true"
},
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits",
+ "default": "true"
+ },
"generateComments": {
"type": "boolean",
"description": "Ajoute les commentaires dans les entités JS générées."
@@ -547,6 +567,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -612,6 +642,15 @@
"type": "string",
"description": "Localisation des ressources, relative au répertoire de génération."
},
+ "resourcesEncoding": {
+ "type": "string",
+ "description": "Encodage des fichiers de resource.",
+ "default": "Latin1",
+ "enum": [
+ "Latin1",
+ "UTF8"
+ ]
+ },
"useJdbc": {
"type": "boolean",
"description": "Générer les entités en mode JDBC",
@@ -763,6 +802,20 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
+ "resourcesTableName": {
+ "type": "string",
+ "description": "Nom de la table dans laquelle doivent être insérées les traductions."
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -800,6 +853,10 @@
"type": "string",
"description": "Emplacement du fichier de création des commentaires."
},
+ "resourceFile": {
+ "type": "string",
+ "description": "Emplacement du fichier d'insertion des resources (libellés traduits)."
+ },
"initListFile": {
"type": "string",
"description": "Emplacement du script d'insertion des données des listes de référence."
@@ -901,6 +958,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/samples/generators/focus/topmodel.config.schema.json b/samples/generators/focus/topmodel.config.schema.json
index e5655828..b10708f5 100644
--- a/samples/generators/focus/topmodel.config.schema.json
+++ b/samples/generators/focus/topmodel.config.schema.json
@@ -74,6 +74,11 @@
"type": "boolean",
"description": "Si les libellés des listes de références doivent être traduits.",
"default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
}
}
},
@@ -163,6 +168,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -460,6 +475,11 @@
"description": "Si les listes de référence doivent être traduites",
"default": "true"
},
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits",
+ "default": "true"
+ },
"generateComments": {
"type": "boolean",
"description": "Ajoute les commentaires dans les entités JS générées."
@@ -547,6 +567,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -612,6 +642,15 @@
"type": "string",
"description": "Localisation des ressources, relative au répertoire de génération."
},
+ "resourcesEncoding": {
+ "type": "string",
+ "description": "Encodage des fichiers de resource.",
+ "default": "Latin1",
+ "enum": [
+ "Latin1",
+ "UTF8"
+ ]
+ },
"useJdbc": {
"type": "boolean",
"description": "Générer les entités en mode JDBC",
@@ -763,6 +802,20 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
+ "resourcesTableName": {
+ "type": "string",
+ "description": "Nom de la table dans laquelle doivent être insérées les traductions."
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -800,6 +853,10 @@
"type": "string",
"description": "Emplacement du fichier de création des commentaires."
},
+ "resourceFile": {
+ "type": "string",
+ "description": "Emplacement du fichier d'insertion des resources (libellés traduits)."
+ },
"initListFile": {
"type": "string",
"description": "Emplacement du script d'insertion des données des listes de référence."
@@ -901,6 +958,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/samples/generators/jpa/topmodel.config b/samples/generators/jpa/topmodel.config
index 97773d17..8042acdc 100644
--- a/samples/generators/jpa/topmodel.config
+++ b/samples/generators/jpa/topmodel.config
@@ -3,6 +3,8 @@
app: topmodel.jpa.sample.demo
modelRoot: ../../model
lockFileName: jpa.topmodel.lock
+i18n:
+ rootPath: "{lang}"
jpa:
- tags:
- back
diff --git a/samples/generators/jpa/topmodel.config.schema.json b/samples/generators/jpa/topmodel.config.schema.json
index e5655828..b10708f5 100644
--- a/samples/generators/jpa/topmodel.config.schema.json
+++ b/samples/generators/jpa/topmodel.config.schema.json
@@ -74,6 +74,11 @@
"type": "boolean",
"description": "Si les libellés des listes de références doivent être traduits.",
"default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
}
}
},
@@ -163,6 +168,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -460,6 +475,11 @@
"description": "Si les listes de référence doivent être traduites",
"default": "true"
},
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits",
+ "default": "true"
+ },
"generateComments": {
"type": "boolean",
"description": "Ajoute les commentaires dans les entités JS générées."
@@ -547,6 +567,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -612,6 +642,15 @@
"type": "string",
"description": "Localisation des ressources, relative au répertoire de génération."
},
+ "resourcesEncoding": {
+ "type": "string",
+ "description": "Encodage des fichiers de resource.",
+ "default": "Latin1",
+ "enum": [
+ "Latin1",
+ "UTF8"
+ ]
+ },
"useJdbc": {
"type": "boolean",
"description": "Générer les entités en mode JDBC",
@@ -763,6 +802,20 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
+ "resourcesTableName": {
+ "type": "string",
+ "description": "Nom de la table dans laquelle doivent être insérées les traductions."
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -800,6 +853,10 @@
"type": "string",
"description": "Emplacement du fichier de création des commentaires."
},
+ "resourceFile": {
+ "type": "string",
+ "description": "Emplacement du fichier d'insertion des resources (libellés traduits)."
+ },
"initListFile": {
"type": "string",
"description": "Emplacement du script d'insertion des données des listes de référence."
@@ -901,6 +958,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/samples/generators/open-api/topmodel.config.schema.json b/samples/generators/open-api/topmodel.config.schema.json
index e5655828..b10708f5 100644
--- a/samples/generators/open-api/topmodel.config.schema.json
+++ b/samples/generators/open-api/topmodel.config.schema.json
@@ -74,6 +74,11 @@
"type": "boolean",
"description": "Si les libellés des listes de références doivent être traduits.",
"default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
}
}
},
@@ -163,6 +168,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -460,6 +475,11 @@
"description": "Si les listes de référence doivent être traduites",
"default": "true"
},
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits",
+ "default": "true"
+ },
"generateComments": {
"type": "boolean",
"description": "Ajoute les commentaires dans les entités JS générées."
@@ -547,6 +567,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -612,6 +642,15 @@
"type": "string",
"description": "Localisation des ressources, relative au répertoire de génération."
},
+ "resourcesEncoding": {
+ "type": "string",
+ "description": "Encodage des fichiers de resource.",
+ "default": "Latin1",
+ "enum": [
+ "Latin1",
+ "UTF8"
+ ]
+ },
"useJdbc": {
"type": "boolean",
"description": "Générer les entités en mode JDBC",
@@ -763,6 +802,20 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
+ "resourcesTableName": {
+ "type": "string",
+ "description": "Nom de la table dans laquelle doivent être insérées les traductions."
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -800,6 +853,10 @@
"type": "string",
"description": "Emplacement du fichier de création des commentaires."
},
+ "resourceFile": {
+ "type": "string",
+ "description": "Emplacement du fichier d'insertion des resources (libellés traduits)."
+ },
"initListFile": {
"type": "string",
"description": "Emplacement du script d'insertion des données des listes de référence."
@@ -901,6 +958,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/samples/generators/pg/src/01_tables.sql b/samples/generators/pg/src/01_tables.sql
index 646387ad..db0c3c2d 100644
--- a/samples/generators/pg/src/01_tables.sql
+++ b/samples/generators/pg/src/01_tables.sql
@@ -81,3 +81,19 @@ create table UTILISATEUR (
constraint PK_UTILISATEUR primary key (UTI_ID)
);
+/**
+ * Création de ta table TRANSLATION contenant les traductions
+ **/
+create table TRANSLATION (
+ RESOURCE_KEY varchar(255),
+ LOCALE varchar(10),
+ LABEL varchar(255),
+ constraint PK_KEY_LOCALE primary key (RESOURCE_KEY, LOCALE)
+)
+/**
+ * Création de l'index pour TRANSLATION (RESOURCE_KEY, LOCALE)
+ **/
+create index IDX_TRANSLATION_RESOURCE_KEY_LOCALE on TRANSLATION (
+ RESOURCE_KEY, LOCALE ASC
+);
+
diff --git a/samples/generators/pg/src/02_fk_indexes.sql b/samples/generators/pg/src/02_fk_indexes.sql
index 37d6c5e1..865ee801 100644
--- a/samples/generators/pg/src/02_fk_indexes.sql
+++ b/samples/generators/pg/src/02_fk_indexes.sql
@@ -77,3 +77,45 @@ alter table UTILISATEUR
add constraint FK_UTILISATEUR_TUT_CODE foreign key (TUT_CODE)
references TYPE_UTILISATEUR (TUT_CODE);
+/**
+ * Création de l'index de clef étrangère pour DROIT.DRO_LIBELLE
+ **/
+create index IDX_DRO_DRO_LIBELLE_FK on DROIT (
+ DRO_LIBELLE ASC
+);
+
+/**
+ * Génération de la contrainte de clef étrangère pour DROIT.DRO_LIBELLE
+ **/
+alter table DROIT
+ add constraint FK_DROIT_DRO_LIBELLE foreign key (DRO_LIBELLE)
+ references TRANSLATION (RESOURCE_KEY);
+
+/**
+ * Création de l'index de clef étrangère pour TYPE_DROIT.TDR_LIBELLE
+ **/
+create index IDX_TDR_TDR_LIBELLE_FK on TYPE_DROIT (
+ TDR_LIBELLE ASC
+);
+
+/**
+ * Génération de la contrainte de clef étrangère pour TYPE_DROIT.TDR_LIBELLE
+ **/
+alter table TYPE_DROIT
+ add constraint FK_TYPE_DROIT_TDR_LIBELLE foreign key (TDR_LIBELLE)
+ references TRANSLATION (RESOURCE_KEY);
+
+/**
+ * Création de l'index de clef étrangère pour TYPE_UTILISATEUR.TUT_LIBELLE
+ **/
+create index IDX_TUT_TUT_LIBELLE_FK on TYPE_UTILISATEUR (
+ TUT_LIBELLE ASC
+);
+
+/**
+ * Génération de la contrainte de clef étrangère pour TYPE_UTILISATEUR.TUT_LIBELLE
+ **/
+alter table TYPE_UTILISATEUR
+ add constraint FK_TYPE_UTILISATEUR_TUT_LIBELLE foreign key (TUT_LIBELLE)
+ references TRANSLATION (RESOURCE_KEY);
+
diff --git a/samples/generators/pg/src/04_references.sql b/samples/generators/pg/src/04_references.sql
index d26e3d27..424fbb42 100644
--- a/samples/generators/pg/src/04_references.sql
+++ b/samples/generators/pg/src/04_references.sql
@@ -8,18 +8,18 @@
-- Description : Script d'insertion des données de références
-- ===========================================================================================
/** Initialisation de la table TYPE_DROIT **/
-INSERT INTO TYPE_DROIT(TDR_CODE, TDR_LIBELLE) VALUES('READ', 'Lecture');
-INSERT INTO TYPE_DROIT(TDR_CODE, TDR_LIBELLE) VALUES('WRITE', 'Ecriture');
-INSERT INTO TYPE_DROIT(TDR_CODE, TDR_LIBELLE) VALUES('ADMIN', 'Administration');
+INSERT INTO TYPE_DROIT(TDR_CODE, TDR_LIBELLE) VALUES('READ', "securite.profil.typeDroit.values.Read");
+INSERT INTO TYPE_DROIT(TDR_CODE, TDR_LIBELLE) VALUES('WRITE', "securite.profil.typeDroit.values.Write");
+INSERT INTO TYPE_DROIT(TDR_CODE, TDR_LIBELLE) VALUES('ADMIN', "securite.profil.typeDroit.values.Admin");
/** Initialisation de la table DROIT **/
-INSERT INTO DROIT(DRO_CODE, DRO_LIBELLE, TDR_CODE) VALUES('CREATE', 'Création', 'WRITE');
-INSERT INTO DROIT(DRO_CODE, DRO_LIBELLE, TDR_CODE) VALUES('READ', 'Lecture', 'READ');
-INSERT INTO DROIT(DRO_CODE, DRO_LIBELLE, TDR_CODE) VALUES('UPDATE', 'Mise à jour', 'WRITE');
-INSERT INTO DROIT(DRO_CODE, DRO_LIBELLE, TDR_CODE) VALUES('DELETE', 'Suppression', 'ADMIN');
+INSERT INTO DROIT(DRO_CODE, DRO_LIBELLE, TDR_CODE) VALUES('CREATE', "securite.profil.droit.values.Create", 'WRITE');
+INSERT INTO DROIT(DRO_CODE, DRO_LIBELLE, TDR_CODE) VALUES('READ', "securite.profil.droit.values.Read", 'READ');
+INSERT INTO DROIT(DRO_CODE, DRO_LIBELLE, TDR_CODE) VALUES('UPDATE', "securite.profil.droit.values.Update", 'WRITE');
+INSERT INTO DROIT(DRO_CODE, DRO_LIBELLE, TDR_CODE) VALUES('DELETE', "securite.profil.droit.values.Delete", 'ADMIN');
/** Initialisation de la table TYPE_UTILISATEUR **/
-INSERT INTO TYPE_UTILISATEUR(TUT_CODE, TUT_LIBELLE) VALUES('ADMIN', 'Administrateur');
-INSERT INTO TYPE_UTILISATEUR(TUT_CODE, TUT_LIBELLE) VALUES('GEST', 'Gestionnaire');
-INSERT INTO TYPE_UTILISATEUR(TUT_CODE, TUT_LIBELLE) VALUES('CLIENT', 'Client');
+INSERT INTO TYPE_UTILISATEUR(TUT_CODE, TUT_LIBELLE) VALUES('ADMIN', "securite.utilisateur.typeUtilisateur.values.Admin");
+INSERT INTO TYPE_UTILISATEUR(TUT_CODE, TUT_LIBELLE) VALUES('GEST', "securite.utilisateur.typeUtilisateur.values.Gestionnaire");
+INSERT INTO TYPE_UTILISATEUR(TUT_CODE, TUT_LIBELLE) VALUES('CLIENT', "securite.utilisateur.typeUtilisateur.values.Client");
diff --git a/samples/generators/pg/src/06_resources.sql b/samples/generators/pg/src/06_resources.sql
new file mode 100644
index 00000000..aaf92ce2
--- /dev/null
+++ b/samples/generators/pg/src/06_resources.sql
@@ -0,0 +1,25 @@
+----
+---- ATTENTION CE FICHIER EST GENERE AUTOMATIQUEMENT !
+----
+
+-- ===========================================================================================
+-- Application Name : pg
+-- Script Name : 06_resources.sql
+-- Description : Script de création des resources (libellés traduits).
+-- ===========================================================================================
+
+/** Initialisation des traductions des valeurs de la table DROIT **/
+INSERT INTO TRANSLATION(RESOURCE_KEY, LOCALE, LABEL) VALUES('securite.profil.droit.values.Create', null, 'Création');
+INSERT INTO TRANSLATION(RESOURCE_KEY, LOCALE, LABEL) VALUES('securite.profil.droit.values.Read', null, 'Lecture');
+INSERT INTO TRANSLATION(RESOURCE_KEY, LOCALE, LABEL) VALUES('securite.profil.droit.values.Update', null, 'Mise à jour');
+INSERT INTO TRANSLATION(RESOURCE_KEY, LOCALE, LABEL) VALUES('securite.profil.droit.values.Delete', null, 'Suppression');
+
+/** Initialisation des traductions des valeurs de la table TYPE_DROIT **/
+INSERT INTO TRANSLATION(RESOURCE_KEY, LOCALE, LABEL) VALUES('securite.profil.typeDroit.values.Read', null, 'Lecture');
+INSERT INTO TRANSLATION(RESOURCE_KEY, LOCALE, LABEL) VALUES('securite.profil.typeDroit.values.Write', null, 'Ecriture');
+INSERT INTO TRANSLATION(RESOURCE_KEY, LOCALE, LABEL) VALUES('securite.profil.typeDroit.values.Admin', null, 'Administration');
+
+/** Initialisation des traductions des valeurs de la table TYPE_UTILISATEUR **/
+INSERT INTO TRANSLATION(RESOURCE_KEY, LOCALE, LABEL) VALUES('securite.utilisateur.typeUtilisateur.values.Admin', null, 'Administrateur');
+INSERT INTO TRANSLATION(RESOURCE_KEY, LOCALE, LABEL) VALUES('securite.utilisateur.typeUtilisateur.values.Gestionnaire', null, 'Gestionnaire');
+INSERT INTO TRANSLATION(RESOURCE_KEY, LOCALE, LABEL) VALUES('securite.utilisateur.typeUtilisateur.values.Client', null, 'Client');
diff --git a/samples/generators/pg/topmodel.config b/samples/generators/pg/topmodel.config
index b087fd5f..1e4a3755 100644
--- a/samples/generators/pg/topmodel.config
+++ b/samples/generators/pg/topmodel.config
@@ -1,8 +1,11 @@
-# yaml-language-server: $schema=./topmodel.config.schema.json
+# yaml-language-server: $schema=./topmodel.config.schema.json
---
app: pg
modelRoot: ../../model
lockFileName: pg.topmodel.lock
+i18n:
+ translateProperties: false
+ translateReferences: true
sql:
- tags:
- back
@@ -14,7 +17,9 @@ sql:
uniqueKeysFile: 03_unique_keys.sql
initListFile: 04_references.sql
commentFile: 05_comments.sql
+ resourceFile: 06_resources.sql
identity:
increment: 50
start: 1000
mode: sequence
+ resourcesTableName: TRANSLATION
\ No newline at end of file
diff --git a/samples/generators/pg/topmodel.config.schema.json b/samples/generators/pg/topmodel.config.schema.json
index e5655828..b10708f5 100644
--- a/samples/generators/pg/topmodel.config.schema.json
+++ b/samples/generators/pg/topmodel.config.schema.json
@@ -74,6 +74,11 @@
"type": "boolean",
"description": "Si les libellés des listes de références doivent être traduits.",
"default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
}
}
},
@@ -163,6 +168,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -460,6 +475,11 @@
"description": "Si les listes de référence doivent être traduites",
"default": "true"
},
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits",
+ "default": "true"
+ },
"generateComments": {
"type": "boolean",
"description": "Ajoute les commentaires dans les entités JS générées."
@@ -547,6 +567,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -612,6 +642,15 @@
"type": "string",
"description": "Localisation des ressources, relative au répertoire de génération."
},
+ "resourcesEncoding": {
+ "type": "string",
+ "description": "Encodage des fichiers de resource.",
+ "default": "Latin1",
+ "enum": [
+ "Latin1",
+ "UTF8"
+ ]
+ },
"useJdbc": {
"type": "boolean",
"description": "Générer les entités en mode JDBC",
@@ -763,6 +802,20 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
+ "resourcesTableName": {
+ "type": "string",
+ "description": "Nom de la table dans laquelle doivent être insérées les traductions."
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -800,6 +853,10 @@
"type": "string",
"description": "Emplacement du fichier de création des commentaires."
},
+ "resourceFile": {
+ "type": "string",
+ "description": "Emplacement du fichier d'insertion des resources (libellés traduits)."
+ },
"initListFile": {
"type": "string",
"description": "Emplacement du script d'insertion des données des listes de référence."
@@ -901,6 +958,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/samples/generators/php/topmodel.config.schema.json b/samples/generators/php/topmodel.config.schema.json
index a407fc00..043b83dc 100644
--- a/samples/generators/php/topmodel.config.schema.json
+++ b/samples/generators/php/topmodel.config.schema.json
@@ -74,6 +74,11 @@
"type": "boolean",
"description": "Si les libellés des listes de références doivent être traduits.",
"default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
}
}
},
@@ -163,6 +168,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -460,6 +475,11 @@
"description": "Si les listes de référence doivent être traduites",
"default": "true"
},
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits",
+ "default": "true"
+ },
"generateComments": {
"type": "boolean",
"description": "Ajoute les commentaires dans les entités JS générées."
@@ -547,6 +567,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -612,6 +642,15 @@
"type": "string",
"description": "Localisation des ressources, relative au répertoire de génération."
},
+ "resourcesEncoding": {
+ "type": "string",
+ "description": "Encodage des fichiers de resource.",
+ "default": "Latin1",
+ "enum": [
+ "Latin1",
+ "UTF8"
+ ]
+ },
"useJdbc": {
"type": "boolean",
"description": "Générer les entités en mode JDBC",
@@ -763,6 +802,20 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
+ "resourcesTableName": {
+ "type": "string",
+ "description": "Nom de la table dans laquelle doivent être insérées les traductions."
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -800,6 +853,10 @@
"type": "string",
"description": "Emplacement du fichier de création des commentaires."
},
+ "resourceFile": {
+ "type": "string",
+ "description": "Emplacement du fichier d'insertion des resources (libellés traduits)."
+ },
"initListFile": {
"type": "string",
"description": "Emplacement du script d'insertion des données des listes de référence."
@@ -901,6 +958,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/samples/generators/ssdt/topmodel.config.schema.json b/samples/generators/ssdt/topmodel.config.schema.json
index e5655828..b10708f5 100644
--- a/samples/generators/ssdt/topmodel.config.schema.json
+++ b/samples/generators/ssdt/topmodel.config.schema.json
@@ -74,6 +74,11 @@
"type": "boolean",
"description": "Si les libellés des listes de références doivent être traduits.",
"default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
}
}
},
@@ -163,6 +168,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -460,6 +475,11 @@
"description": "Si les listes de référence doivent être traduites",
"default": "true"
},
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits",
+ "default": "true"
+ },
"generateComments": {
"type": "boolean",
"description": "Ajoute les commentaires dans les entités JS générées."
@@ -547,6 +567,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -612,6 +642,15 @@
"type": "string",
"description": "Localisation des ressources, relative au répertoire de génération."
},
+ "resourcesEncoding": {
+ "type": "string",
+ "description": "Encodage des fichiers de resource.",
+ "default": "Latin1",
+ "enum": [
+ "Latin1",
+ "UTF8"
+ ]
+ },
"useJdbc": {
"type": "boolean",
"description": "Générer les entités en mode JDBC",
@@ -763,6 +802,20 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
+ "resourcesTableName": {
+ "type": "string",
+ "description": "Nom de la table dans laquelle doivent être insérées les traductions."
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -800,6 +853,10 @@
"type": "string",
"description": "Emplacement du fichier de création des commentaires."
},
+ "resourceFile": {
+ "type": "string",
+ "description": "Emplacement du fichier d'insertion des resources (libellés traduits)."
+ },
"initListFile": {
"type": "string",
"description": "Emplacement du script d'insertion des données des listes de référence."
@@ -901,6 +958,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/samples/generators/translation/topmodel.config.schema.json b/samples/generators/translation/topmodel.config.schema.json
index e5655828..b10708f5 100644
--- a/samples/generators/translation/topmodel.config.schema.json
+++ b/samples/generators/translation/topmodel.config.schema.json
@@ -74,6 +74,11 @@
"type": "boolean",
"description": "Si les libellés des listes de références doivent être traduits.",
"default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
}
}
},
@@ -163,6 +168,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -460,6 +475,11 @@
"description": "Si les listes de référence doivent être traduites",
"default": "true"
},
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits",
+ "default": "true"
+ },
"generateComments": {
"type": "boolean",
"description": "Ajoute les commentaires dans les entités JS générées."
@@ -547,6 +567,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -612,6 +642,15 @@
"type": "string",
"description": "Localisation des ressources, relative au répertoire de génération."
},
+ "resourcesEncoding": {
+ "type": "string",
+ "description": "Encodage des fichiers de resource.",
+ "default": "Latin1",
+ "enum": [
+ "Latin1",
+ "UTF8"
+ ]
+ },
"useJdbc": {
"type": "boolean",
"description": "Générer les entités en mode JDBC",
@@ -763,6 +802,20 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
+ "resourcesTableName": {
+ "type": "string",
+ "description": "Nom de la table dans laquelle doivent être insérées les traductions."
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
@@ -800,6 +853,10 @@
"type": "string",
"description": "Emplacement du fichier de création des commentaires."
},
+ "resourceFile": {
+ "type": "string",
+ "description": "Emplacement du fichier d'insertion des resources (libellés traduits)."
+ },
"initListFile": {
"type": "string",
"description": "Emplacement du script d'insertion des données des listes de référence."
@@ -901,6 +958,16 @@
"type": "string",
"description": "Racine du répertoire de génération."
},
+ "translateReferences": {
+ "type": "boolean",
+ "description": "Si les libellés des listes de références doivent être traduits.",
+ "default": "true"
+ },
+ "translateProperties": {
+ "type": "boolean",
+ "description": "Si les libellés des propriétés doivent être traduits.",
+ "default": "true"
+ },
"ignoreDefaultValues": {
"type": "boolean",
"description": "Désactive la génération des valeurs par défaut des propriétés dans les classes et endpoints générés avec cette configuration."
diff --git a/samples/model/pg.topmodel.lock b/samples/model/pg.topmodel.lock
index c1cb635f..f09d7ece 100644
--- a/samples/model/pg.topmodel.lock
+++ b/samples/model/pg.topmodel.lock
@@ -9,3 +9,4 @@ generatedFiles:
- ../generators/pg/src/03_unique_keys.sql
- ../generators/pg/src/04_references.sql
- ../generators/pg/src/05_comments.sql
+ - ../generators/pg/src/06_resources.sql