Translation c_jobs

I would like to translate “Positions” (c_jobs) in metasfresh. In the current version, there is no translations register for this table available. Is there a way to add one or are there any other options to translate this?
many thanks for your help.


there is a generic translation logic in metasfresh.
I have not done that for a while but as far as I remember you need to create a table with same name plus “_trl”.
You can check the config of existing trl tables.

If setup correctly, metasfresh will automatically create translation records once you adding or updating records in the main table.

Does anyone got more details about how to configure it?



I got now a similar case where I want to request status to another other language.
I tried to configure it and I kind of succeeded but I cant save.

2018-06-07 14:32:30.354 ERROR 21678 --- [AWT-EventQueue-0] org.compiere.model.GridTable             : Error while saving on GridTable[R_Status_Trl,WindowNo=2,Tab=2]
 Type: SaveError

org.postgresql.util.PSQLException: F?r die Tabelle R_Status_Trl konnte kein Prim?rschl?ssel gefunden werden.
	at org.postgresql.jdbc.PgResultSet.isUpdateable(
	at org.postgresql.jdbc.PgResultSet.checkUpdateable(
	at org.postgresql.jdbc.PgResultSet.moveToInsertRow(
	at com.mchange.v2.c3p0.impl.NewProxyResultSet.moveToInsertRow(
	at org.compiere.model.GridTable.dataSave(
	at org.compiere.model.GridTab.dataSave(
	at org.compiere.apps.APanel.cmd_save(
	at org.compiere.apps.APanel.actionPerformed(
	at org.compiere.apps.AppsAction.actionPerformed(
	at javax.swing.AbstractButton.fireActionPerformed(
	at javax.swing.AbstractButton$Handler.actionPerformed(
	at javax.swing.DefaultButtonModel.fireActionPerformed(
	at javax.swing.DefaultButtonModel.setPressed(
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(
	at java.awt.AWTEventMulticaster.mouseReleased(
	at java.awt.Component.processMouseEvent(
	at javax.swing.JComponent.processMouseEvent(
	at java.awt.Component.processEvent(
	at java.awt.Container.processEvent(
	at java.awt.Component.dispatchEventImpl(
	at java.awt.Container.dispatchEventImpl(
	at java.awt.Component.dispatchEvent(
	at java.awt.LightweightDispatcher.retargetMouseEvent(
	at java.awt.LightweightDispatcher.processMouseEvent(
	at java.awt.LightweightDispatcher.dispatchEvent(
	at java.awt.Container.dispatchEventImpl(
	at java.awt.Window.dispatchEventImpl(
	at java.awt.Component.dispatchEvent(
	at java.awt.EventQueue.dispatchEventImpl(
	at java.awt.EventQueue.access$500(
	at java.awt.EventQueue$
	at java.awt.EventQueue$
	at Method)
	at java.awt.EventQueue$
	at java.awt.EventQueue$
	at Method)
	at java.awt.EventQueue.dispatchEvent(
	at java.awt.EventDispatchThread.pumpOneEventForFilters(
	at java.awt.EventDispatchThread.pumpEventsForFilter(
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(
	at java.awt.EventDispatchThread.pumpEvents(
	at java.awt.EventDispatchThread.pumpEvents(

I know that translation tables do have a combined key made from ID + language.
Therefore both columns ID and language have the checkbox “parent link column” set.

Any hints what I am missing?

I used the process “Generate Primary Key for selected Table” and that one is not needed as the table for TRL was created correctly in the first place.

Lesson learned: dont use the process for generate primary keys on TRL tables.

How I fixed it:

  • dropped the table in db with a statement like drop table ...
  • synchronized columns

The table was then created from scratch with the definition stored in the appdictionary.

1 Like

hi Simon,

were you able to set it up?


hi Norbert
yes, setting up the _TRL table solved the Issue.
Many thanks

Hi Simon,
thanks a lot.

Would you like to contribute your new Translation Table? Please add a Pull Request. That would be great.
I created an issue for that.

Thanks in advance.