Alle Frameworks
ANJUNAR / OPEN SOURCE

Hibernate I18n

Typisierte Entity-Felder mit fester Sprache und relationalen Übersetzungen.

01

Die Idee

Hibernate I18n speichert übersetzte Inhalte in eigenen Zeilen, während Entity-Felder ihre gewöhnlichen Typen behalten. Die Runtime 1.0.0 legt eine Inhaltssprache pro Session fest und unterstützt übersetzte Abfragen, Fallback und einen typisierten Editorzugriff für Hibernate 7.4.10.Final und PostgreSQL.

02

Was es kann.

01

Gewöhnliche Entity-Felder

String-Felder oder konvertierte Werte mit @Translation markieren; das Runtime-Mapping speichert ihre Werte pro Sprache.

02

Sprachgebundene Abfragen

Übersetzte Werte mit fester Session-Sprache und Fallback pro Feld laden, filtern, sortieren und paginieren.

03

Übersetzungseditor

Exakte inaktive Sprachen über einen typisierten Zugriff lesen und schreiben, mit Tenant-Isolation und optimistischen Zeilenversionen.

03

Installation

Zum Projekt hinzufügen
libraryDependencies += "com.anjunar" % "hibernate-i18n" % "1.0.0"

Paket: com.anjunar:hibernate-i18n

04

Direkt loslegen.

hibernate-i18n 1.0.0 aus Maven Central einbinden, mit HibernateI18n.registryBuilder() starten, eine @Localized-Entity mappen und vor der ersten sprachgebundenen Session die Brücke für jedes @Translation-Feld installieren. Der Leitfaden erklärt Schema-Start und Editorzugriff.

Typisierte Felder, übersetzte Zeilen

Die Entity behält einen String-Titel. Die Runtime mappt seine Werte auf sprachabhängige Zeilen statt auf eine Titelspalte der Haupttabelle.

Quellcode
import com.anjunar.hibernatei18n.annotation.{Localized, Translation}
import jakarta.persistence.{Entity, Id, Table}
import java.util.UUID
import scala.compiletime.uninitialized

@Entity
@Table(name = "page")
@Localized(defaultLocale = "en", fallbackLocale = "en")
class Page:
  @Id var id: UUID = uninitialized
  @Translation var title: String = uninitialized

Ein Editor für eine exakte Sprache

Nach dem Runtime-Bootstrap die Titelbrücke einmal installieren. Englisch über den Editorzugriff bearbeiten, während die verwaltete Entity ihren deutschen Session-Wert behält.

Quellcode
import com.anjunar.hibernatei18n.runtime.{TranslationField, HibernateI18n}

val titleField = TranslationField.string[Page]("title", _.title)
val translations = HibernateI18n.install(
  factory, classOf[Page], _.id, Seq(titleField))

val session = HibernateI18n.openSession(factory, "de")
try
  val tx = session.beginTransaction()
  try
    val page = session.find(classOf[Page], pageId)
    val english = translations.get(session, page, titleField, "en")
    translations.set(session, page, titleField, "en", "Hello")
    tx.commit()
  catch
    case error: Throwable =>
      if tx.isActive then tx.rollback()
      throw error
finally session.close()
05

Bewusst gestaltet.

Eine Session besitzt genau eine Inhaltssprache. Entity-Felder suchen pro Feld nach exakter Sprache, Sprachkürzel, konfiguriertem Fallback und Standardsprache; der Editor liest exakte Überschreibungen. Die Runtime lehnt detached merge, replicate und Query-Caching ab. Ihre Bootstrap-Prüfung schützt vor unvollständigen lokalisierten Mappings.

Dein nächster Schritt

Mach es zu deinem Werkzeug.

Sorgfältig gebaut mit Scala JS UI.Impressum