Koha-clms/admin
Julian Maurice e7f483def5
Bug 38136: Refactor database translations (alternative)
This has the same goals of bug 24975 but with a different approach.

Bug 24975 tried the "POT/PO files as database tables" approach but
it appeared that is not what best fits our needs.

Instead of a "source text / translated text" mapping, we need
translations to be attached to a specific "object" (or table row), which
has the added benefit of keeping translations unaffected when the
original string changes. It may or may not be what you want but at least
this avoids the problem where fixing an error in the original string
forces users to re-translate everything.

We also need to be able to translate all translatable properties of a
particular entity.

The solution proposed here is to add a DBIC component that will add
several DBIC relations to the `localization` table:
* a relation named `localizations` that will return all translations for
  all translatable properties for all languages.
* for each translatable property:
  * a relation named `{$property}_localizations` that will return all
    translations for a given property, for all languages
  * a relation named `{$property}_localization` that will return the
    translation for a given property, for the current language

To enable translations for a particular entity, we will need to:
* add two method calls in the "result class" corresponding to the
  localizable object type
* in the admin interface, add a link to the the translation popup.
  Unlike bug 24975 there is not a page where you can translate
  everything. I don't know if it is really useful (probably better to
  translate itemtypes when you are on the itemtype page). It can be
  added later if needed.

To give an example, this is what needs to be added manually in
Koha/Schema/Result/Itemtype.pm:

    __PACKAGE__->load_components('+Koha::DBIx::Class::Localization');
    __PACKAGE__->localization_add_relationships(
        'itemtype', # the PK column
        'description' # a list of translatable columns
    );

(see POD in Koha/Schema/Component/Localization.pm for more information)

Final notes:
* I wanted this patch to have as few changes as possible so I kept
  methods like `search_with_localization`, `children_with_localization`
  even if I believe they can be removed (replaced by search/children)
  Localizations do not need to be prefetched/joined unless you want to
  sort on them.
  For the same reason, $itemtype->unblessed now always return a
  `translated_description` key.
  This can be fixed in followup patches
* There is cache involved (see
  Koha::Schema::Component::Localization::localization).
  Localizations in cache are grouped by object type and language (keys
  look like 'KOHA:localization:Itemtype:en')
* By keeping a single table for all translations of all entities, we
  cannot have data integrity at the RDBMS level, but automatic deletion
  of translations is handled by the DBIC `cascade_delete` feature, so
  integrity should be fine as long as no raw SQL update/delete operation
  is involved.

Signed-off-by: Caroline Cyr La Rose <caroline.cyr-la-rose@inlibro.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
2026-04-15 11:37:14 -06:00
..
searchengine/elasticsearch Bug 41758: Add Fingerprint Identifier data to Elasticsearch index mappings 2026-03-26 14:21:17 +01:00
additional-fields.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
admin-home.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
adveditorshortcuts.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
aqbudgetperiods.pl Bug 41561: Remove 'tab' from admin/aqbudgetperiods 2026-01-28 14:24:00 -07:00
aqbudgets.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
aqcontract.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
aqplan.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
audio_alerts.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
auth_subfields_structure.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
auth_tag_structure.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
authorised_values.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
authtypes.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
background_jobs.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
biblio_framework.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
branch_transfer_limits.pl Bug 41131: Don't allow limiting transfers from/to a single branch 2026-02-26 09:04:19 -07:00
branches.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
cash_registers.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
categories.pl Bug 3492: Remove from patron categories admin 2026-02-09 12:57:56 -07:00
check_budget_parent.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
check_parent_total.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
checkmarc.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
cities.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
classsources.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
clone-rules.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
columns_settings.pl Bug 40680: Fix admin/columns_settings.pl 2025-12-01 08:33:58 -07:00
columns_settings.yml Bug 40504: Add 'managedby' to illrequests 2026-03-26 14:21:22 +01:00
credit_types.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
curbside_pickup.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
currency.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
debit_types.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
desks.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
didyoumean.pl Bug 38664: Tidy the whole codebase 2025-02-11 14:58:24 +01:00
edi_accounts.pl Bug 20253: Optionally use buyer's purchase order number from EDIFACT quote as basket name 2025-11-03 14:13:37 -07:00
edi_ean_accounts.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
file_transports.pl Bug 41798: Fix FTP passive mode not saving and add display indicator 2026-02-10 10:51:21 -07:00
float_limits.pl Bug 28530: (QA follow-up) Use DBIC in controller 2026-02-10 10:51:41 -07:00
identity_providers.pl Bug 37711: Domains CRUD update 2025-11-05 07:12:32 -07:00
ill_batch_statuses.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
import_export_authtype.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
import_export_framework.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
item_circulation_alerts.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
items_search_field.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
items_search_fields.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
itemtypes.pl Bug 38136: Refactor database translations (alternative) 2026-04-15 11:37:14 -06:00
koha2marclinks.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
library_groups.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
localization.pl Bug 38136: Refactor database translations (alternative) 2026-04-15 11:37:14 -06:00
marc-overlay-rules.pl Bug 35380: (QA follow-up) Minor code quality fixes 2026-03-26 09:50:53 +01:00
marc_order_accounts.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
marc_subfields_structure.pl Bug 38384: (follow-up) move require Koha::Plugins to use 2026-02-25 07:37:00 -07:00
marctagstructure.pl Bug 39825: Add a direct link to items tag in MARC bibliographic framework page 2025-11-03 14:13:43 -07:00
matching-rules.pl Bug 40680: Fix admin/matching-rules.pl 2025-12-01 08:33:58 -07:00
oai_servers.pl Bug 41043: Use op 'add_form' and 'edit_form' in oai servers 2026-02-06 15:17:11 -07:00
oai_set_mappings.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
oai_sets.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
overdrive.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
patron-attr-types.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
preferences.pl Bug 41076: Adjust our perl tidiness for v20250105 2026-02-05 09:03:51 -07:00
record_sources.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
restrictions.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
search_filters.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
share_content.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
smart-rules.pl Bug 41267: Add fill_other_biblio_holds_policy circulation rule 2026-04-09 08:27:26 -06:00
sms_providers.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
smtp_servers.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
sru_modmapping.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
systempreferences.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
transfer_limits.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
transport-cost-matrix.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
usage_statistics.pl Bug 40163: Fix several http addresses in the code docs 2025-09-23 16:21:29 -06:00
z3950servers.pl Bug 40841: Add limits configuration UI 2026-03-26 14:21:28 +01:00