[glom] Export to po file: Improve the msgtxt hints.



commit eaec54684c91d5a7739dda6acf1e1626c5b90472
Author: Murray Cumming <murrayc murrayc com>
Date:   Sun Jan 8 00:46:04 2012 +0100

    Export to po file: Improve the msgtxt hints.
    
    * glom/libglom/data_structure/translatable_item.[h|cc]:
    get_translatable_item_type(): Make this const.
    * glom/libglom/document/document.[h|cc]: get_translatable_items():
    Now return a list of pairs, so each TranslatableItem also has a hint
    for the msgtxt for the po (gettext) file, so that each can be
    identified uniquely and so that the translator has some context.
    * glom/libglom/translations_po.[h|cc]: Adapt.
    * glom/mode_design/translation/window_translations.[h|cc]: Adapt,
    showing the actual hint instead of just the item type.
    * tests/test_document_load_translations.cc: Adapted.
    * tests/translations_po/data/test.po: Reexported.

 ChangeLog                                          |   16 +
 glom/libglom/data_structure/translatable_item.cc   |    4 +-
 glom/libglom/data_structure/translatable_item.h    |    2 +-
 glom/libglom/document/document.cc                  |   59 ++-
 glom/libglom/document/document.h                   |   13 +-
 glom/libglom/translations_po.cc                    |   29 +-
 glom/libglom/translations_po.h                     |    7 +
 .../mode_design/translation/window_translations.cc |   51 +-
 glom/mode_design/translation/window_translations.h |    8 +-
 tests/test_document_load_translations.cc           |   48 +--
 tests/translations_po/data/test.po                 |  544 ++++++++++----------
 11 files changed, 410 insertions(+), 371 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 946d1d6..7f9ec4f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2012-01-08  Murray Cumming  <murrayc murrayc com>
+
+	Export to po file: Improve the msgtxt hints.
+
+	* glom/libglom/data_structure/translatable_item.[h|cc]: 
+	get_translatable_item_type(): Make this const.
+	* glom/libglom/document/document.[h|cc]: get_translatable_items():
+	Now return a list of pairs, so each TranslatableItem also has a hint
+	for the msgtxt for the po (gettext) file, so that each can be 
+	identified uniquely and so that the translator has some context.
+	* glom/libglom/translations_po.[h|cc]: Adapt.
+	* glom/mode_design/translation/window_translations.[h|cc]: Adapt,
+	showing the actual hint instead of just the item type.
+	* tests/test_document_load_translations.cc: Adapted.
+	* tests/translations_po/data/test.po: Reexported.
+
 2012-01-07  Murray Cumming  <murrayc murrayc com>
 
 	Move po file (gettext) import and export into libglom and test it.
diff --git a/glom/libglom/data_structure/translatable_item.cc b/glom/libglom/data_structure/translatable_item.cc
index 1ae12bd..10e3fa2 100644
--- a/glom/libglom/data_structure/translatable_item.cc
+++ b/glom/libglom/data_structure/translatable_item.cc
@@ -241,7 +241,7 @@ Glib::ustring TranslatableItem::get_original_locale()
   return m_original_locale; 
 }
 
-bool TranslatableItem::get_current_locale_not_original()
+bool TranslatableItem::get_current_locale_not_original() //TODO: Make this const?
 {
   if(m_original_locale.empty())
     get_original_locale();
@@ -252,7 +252,7 @@ bool TranslatableItem::get_current_locale_not_original()
   return m_original_locale != m_current_locale;
 }
 
-TranslatableItem::enumTranslatableItemType TranslatableItem::get_translatable_item_type()
+TranslatableItem::enumTranslatableItemType TranslatableItem::get_translatable_item_type() const
 {
   return m_translatable_item_type;
 }
diff --git a/glom/libglom/data_structure/translatable_item.h b/glom/libglom/data_structure/translatable_item.h
index deb3e2e..a9b606f 100644
--- a/glom/libglom/data_structure/translatable_item.h
+++ b/glom/libglom/data_structure/translatable_item.h
@@ -102,7 +102,7 @@ public:
      TRANSLATABLE_TYPE_CHOICEVALUE
    };
 
-  enumTranslatableItemType get_translatable_item_type();
+  enumTranslatableItemType get_translatable_item_type() const;
 
   //Direct access, for performance:
   const type_map_locale_to_translations& _get_translations_map() const;
diff --git a/glom/libglom/document/document.cc b/glom/libglom/document/document.cc
index 7f95bfb..2612aa8 100644
--- a/glom/libglom/document/document.cc
+++ b/glom/libglom/document/document.cc
@@ -2549,7 +2549,7 @@ void Document::load_after_translations(const xmlpp::Element* element, Translatab
   if(!choicevalue) //This item does not use the title, but uses the title translations to translate its value, if it is of type text.
   {
     item.set_title_original( get_node_attribute_value(element, GLOM_ATTRIBUTE_TITLE) );
-  };
+  }
 
   const xmlpp::Element* nodeTranslations = get_node_child_named(element, GLOM_NODE_TRANSLATIONS_SET);
   if(nodeTranslations)
@@ -4405,6 +4405,15 @@ std::vector<Glib::ustring> Document::get_translation_available_locales() const
   return m_translation_available_locales;
 }
 
+template <typename T_List>
+static void translatable_items_append_with_hint(Document::type_list_translatables& result, T_List& list_items, const Glib::ustring& hint)
+{
+  for(typename T_List::iterator iter = list_items.begin(); iter != list_items.end(); ++iter)
+  {
+    result.push_back( Document::pair_translatable_item_and_hint(*iter, hint) );
+  }
+}
+
 Document::type_list_translatables Document::get_translatable_items()
 {
   type_list_translatables result;
@@ -4417,11 +4426,12 @@ Document::type_list_translatables Document::get_translatable_items()
     if(!tableinfo)
       continue;
 
-    result.push_back(tableinfo);
+    result.push_back( pair_translatable_item_and_hint(tableinfo, "") );
 
     const Glib::ustring table_name = tableinfo->get_name();
 
     //The table's field titles:
+    Glib::ustring hint = "Parent table: " + table_name;
     type_vec_fields fields = get_table_fields(table_name);
     for(type_vec_fields::iterator iter = fields.begin(); iter != fields.end(); ++iter)
     {
@@ -4429,20 +4439,21 @@ Document::type_list_translatables Document::get_translatable_items()
       if(!field)
         continue;
 
-      result.push_back(field);
+      result.push_back( pair_translatable_item_and_hint(field, hint) );
 
       //Custom Choices, if any:
       if(field->get_glom_type() == Field::TYPE_TEXT) //Choices for other field types could not be translated.
       {
+        const Glib::ustring this_hint = hint + ", Parent Field: " + field->get_name();   
         type_list_translatables list_choice_items;
-        Document::fill_translatable_custom_choices(field->m_default_formatting, list_choice_items);
+        Document::fill_translatable_custom_choices(field->m_default_formatting, list_choice_items, this_hint);
         result.insert(result.end(), list_choice_items.begin(), list_choice_items.end());
       }
     }
 
     //The table's relationships:
     type_vec_relationships relationships = get_relationships(table_name);
-    result.insert(result.end(), relationships.begin(), relationships.end());
+    translatable_items_append_with_hint(result, relationships, hint);
 
     //The table's report titles:
     type_listReports listReports = get_report_names(table_name);
@@ -4453,22 +4464,23 @@ Document::type_list_translatables Document::get_translatable_items()
       if(!report)
         continue;
 
-      result.push_back(report);
+      result.push_back( pair_translatable_item_and_hint(report, hint) );
       
       //Translatable report items:
-      type_list_translatables list_layout_items = get_translatable_report_items(table_name, report_name);
+      const Glib::ustring this_hint = hint + ", Parent Report: " + report->get_name();
+      type_list_translatables list_layout_items = get_translatable_report_items(table_name, report_name, this_hint);
       result.insert(result.end(), list_layout_items.begin(), list_layout_items.end());
     }
 
     //The table's translatable layout items:
-    type_list_translatables list_layout_items = get_translatable_layout_items(table_name);
+    type_list_translatables list_layout_items = get_translatable_layout_items(table_name, hint);
     result.insert(result.end(), list_layout_items.begin(), list_layout_items.end());
   } //for
 
   return result;
 }
 
-Document::type_list_translatables Document::get_translatable_layout_items(const Glib::ustring& table_name)
+Document::type_list_translatables Document::get_translatable_layout_items(const Glib::ustring& table_name, const Glib::ustring& hint)
 {
   type_list_translatables result;
 
@@ -4484,7 +4496,7 @@ Document::type_list_translatables Document::get_translatable_layout_items(const
         sharedptr<LayoutGroup> group = *iterGroup;
         if(group)
         {
-          fill_translatable_layout_items(group, result);
+          fill_translatable_layout_items(group, result, hint);
         }
       }
     }
@@ -4494,18 +4506,18 @@ Document::type_list_translatables Document::get_translatable_layout_items(const
 }
 
 
-Document::type_list_translatables Document::get_translatable_report_items(const Glib::ustring& table_name, const Glib::ustring& report_title)
+Document::type_list_translatables Document::get_translatable_report_items(const Glib::ustring& table_name, const Glib::ustring& report_title, const Glib::ustring& hint)
 {
   Document::type_list_translatables the_list;
 
   sharedptr<Report> report = get_report(table_name, report_title);
   if(report)
-    fill_translatable_layout_items(report->m_layout_group, the_list);
+    fill_translatable_layout_items(report->m_layout_group, the_list, hint);
 
   return the_list;
 }
 
-void Document::fill_translatable_custom_choices(FieldFormatting& formatting, type_list_translatables& the_list)
+void Document::fill_translatable_custom_choices(FieldFormatting& formatting, type_list_translatables& the_list, const Glib::ustring& hint)
 {
   if(!formatting.get_has_custom_choices())
     return;
@@ -4515,15 +4527,13 @@ void Document::fill_translatable_custom_choices(FieldFormatting& formatting, typ
   {
     sharedptr<ChoiceValue> value = *iter;
 
-    //TODO: Make the translator comment mention the field name as well 
-    //as just the fact that it's a custom choice.
-    the_list.push_back(value);
+    the_list.push_back( pair_translatable_item_and_hint(value, hint) );
   }
 }
 
-void Document::fill_translatable_layout_items(const sharedptr<LayoutGroup>& group, type_list_translatables& the_list)
+void Document::fill_translatable_layout_items(const sharedptr<LayoutGroup>& group, type_list_translatables& the_list, const Glib::ustring& hint)
 {
-  the_list.push_back(group);
+  the_list.push_back( pair_translatable_item_and_hint(group, hint) );
 
   //Look at each item:
   LayoutGroup::type_list_items items = group->get_items();
@@ -4541,21 +4551,21 @@ void Document::fill_translatable_layout_items(const sharedptr<LayoutGroup>& grou
         sharedptr<CustomTitle> custom_title = field->get_title_custom();
         if(custom_title)
         {
-          the_list.push_back(custom_title);
+          the_list.push_back( pair_translatable_item_and_hint(custom_title, hint) ); 
         }
 
-        fill_translatable_layout_items(group_by->m_group_secondary_fields, the_list);
+        fill_translatable_layout_items(group_by->m_group_secondary_fields, the_list, hint);
       }
 
       //recurse:
-      fill_translatable_layout_items(child_group, the_list);
+      fill_translatable_layout_items(child_group, the_list, hint);
     }
     else
     {
       //Buttons too:
       sharedptr<LayoutItem_Button> button = sharedptr<LayoutItem_Button>::cast_dynamic(item);
       if(button)
-        the_list.push_back(button);
+        the_list.push_back( pair_translatable_item_and_hint(button, hint) ); 
       else
       {
         sharedptr<LayoutItem_Field> layout_field = sharedptr<LayoutItem_Field>::cast_dynamic(item);
@@ -4564,13 +4574,14 @@ void Document::fill_translatable_layout_items(const sharedptr<LayoutGroup>& grou
           sharedptr<CustomTitle> custom_title = layout_field->get_title_custom();
           if(custom_title)
           {
-            the_list.push_back(custom_title);
+            the_list.push_back( pair_translatable_item_and_hint(custom_title, hint) ); 
           }
 
           //Custom Choices, if any:
           //Only text fields can have translated choice values:
+          const Glib::ustring this_hint = hint + ", Parent Field: " + layout_field->get_name();
           if(layout_field->get_glom_type() == Field::TYPE_TEXT)
-            fill_translatable_custom_choices(layout_field->m_formatting, the_list);
+            fill_translatable_custom_choices(layout_field->m_formatting, the_list, this_hint);
         }
       }
     }
diff --git a/glom/libglom/document/document.h b/glom/libglom/document/document.h
index 266b4db..2155738 100644
--- a/glom/libglom/document/document.h
+++ b/glom/libglom/document/document.h
@@ -257,10 +257,13 @@ public:
 
   type_list_layout_groups get_data_layout_groups_default(const Glib::ustring& layout_name, const Glib::ustring& parent_table_name, const Glib::ustring& layout_platform = Glib::ustring()) const;
 
-  typedef std::list< sharedptr<TranslatableItem> > type_list_translatables;
+  /// The translatable item and a hint about what it is.
+  typedef std::pair< sharedptr<TranslatableItem>, Glib::ustring> pair_translatable_item_and_hint;
+
+  typedef std::list<pair_translatable_item_and_hint> type_list_translatables;
   type_list_translatables get_translatable_items();
 
-  static void fill_translatable_custom_choices(FieldFormatting& formatting, type_list_translatables& the_list);
+  static void fill_translatable_custom_choices(FieldFormatting& formatting, type_list_translatables& the_list, const Glib::ustring& hint);
 
 
   void fill_layout_field_details(const Glib::ustring& parent_table_name, const sharedptr<LayoutGroup>& layout_group) const;
@@ -518,12 +521,12 @@ private:
 
   void on_app_state_userlevel_changed(AppState::userlevels userlevel);
 
-  static void fill_translatable_layout_items(const sharedptr<LayoutGroup>& group, type_list_translatables& the_list);
+  static void fill_translatable_layout_items(const sharedptr<LayoutGroup>& group, type_list_translatables& the_list, const Glib::ustring& hint);
 
   void fill_sort_field_details(const Glib::ustring& parent_table_name, FieldFormatting::type_list_sort_fields& sort_fields) const;
 
-  type_list_translatables get_translatable_layout_items(const Glib::ustring& table_name);
-  type_list_translatables get_translatable_report_items(const Glib::ustring& table_name, const Glib::ustring& report_title);
+  type_list_translatables get_translatable_layout_items(const Glib::ustring& table_name, const Glib::ustring& hint);
+  type_list_translatables get_translatable_report_items(const Glib::ustring& table_name, const Glib::ustring& report_title, const Glib::ustring& hint);
 
 
   /// If the attribute is not there, then the default will be returned.
diff --git a/glom/libglom/translations_po.cc b/glom/libglom/translations_po.cc
index 6faa83f..9ca394d 100644
--- a/glom/libglom/translations_po.cc
+++ b/glom/libglom/translations_po.cc
@@ -112,11 +112,20 @@ static void on_gettextpo_error(int status, int errnum, const char * /* format */
 }
 #endif //HAVE_GETTEXTPO_XERROR
 
-static Glib::ustring get_po_context_for_item(const sharedptr<TranslatableItem>& item)
+Glib::ustring get_po_context_for_item(const sharedptr<const TranslatableItem>& item, const Glib::ustring& hint)
 {
   // Note that this context string should use English rather than the translated strings,
   // or the context would change depending on the locale of the user doing the export:
-  return TranslatableItem::get_translatable_type_name_nontranslated(item->get_translatable_item_type()) + " (" + item->get_name() + ')';
+  Glib::ustring result = TranslatableItem::get_translatable_type_name_nontranslated(item->get_translatable_item_type());
+
+  const Glib::ustring name = item->get_name();
+  if(!name.empty())
+    result += " (" + item->get_name() + ')';
+
+  if(!hint.empty())
+    result += ". " + hint;
+
+  return result;
 }
 
 bool write_translations_to_po_file(Document* document, const Glib::ustring& po_file_uri, const Glib::ustring& translation_locale)
@@ -142,20 +151,24 @@ bool write_translations_to_po_file(Document* document, const Glib::ustring& po_f
   Document::type_list_translatables list_layout_items = document->get_translatable_items();
   for(Document::type_list_translatables::iterator iter = list_layout_items.begin(); iter != list_layout_items.end(); ++iter)
   {
-    sharedptr<TranslatableItem> item = *iter;
+    sharedptr<TranslatableItem> item = iter->first;
     if(!item)
       continue;
 
     if(item->get_title_original().empty())
       continue;
 
+    const Glib::ustring hint = iter->second;
+
     po_message_t msg = po_message_create();
     po_message_set_msgid(msg, item->get_title_original().c_str());
     po_message_set_msgstr(msg, item->get_title_translation(translation_locale, false).c_str());
 
     // Add "context" comments, to uniquely identify similar strings, used in different places,
     // and to provide a hint for translators.
-    po_message_set_msgctxt(msg, get_po_context_for_item(item).c_str());
+    const Glib::ustring msgtxt = get_po_context_for_item(item, hint);
+    //std::cout << "debug: msgtxt=" << msgtxt << std::endl;
+    po_message_set_msgctxt(msg, msgtxt.c_str());
 
     po_message_insert(msg_iter, msg);
   }
@@ -239,12 +252,14 @@ bool import_translations_from_po_file(Document* document, const Glib::ustring& p
       //Find the matching item in the list:
       for(Document::type_list_translatables::iterator iter = list_layout_items.begin(); iter != list_layout_items.end(); ++iter)
       {
-        sharedptr<TranslatableItem> item = *iter;
+        sharedptr<TranslatableItem> item = iter->first;
         if(!item)
-         continue;
+          continue;
+
+        const Glib::ustring hint = iter->second;
 
         if( (item->get_title_original() == msgid) && 
-          (get_po_context_for_item(item) == msgcontext) ) // This is not efficient, but it should be reliable.
+          (get_po_context_for_item(item, hint) == msgcontext) ) // This is not efficient, but it should be reliable.
         {
           item->set_title_translation(translation_locale, msgstr);
           // Keep examining items, in case there are duplicates. break;
diff --git a/glom/libglom/translations_po.h b/glom/libglom/translations_po.h
index 1207e88..b5ab6ee 100644
--- a/glom/libglom/translations_po.h
+++ b/glom/libglom/translations_po.h
@@ -30,6 +30,13 @@ bool write_translations_to_po_file(Document* document, const Glib::ustring& po_f
 
 bool import_translations_from_po_file(Document* document, const Glib::ustring& po_file_uri, const Glib::ustring& translation_locale);
 
+/** Get a hint about what the text is for.
+ * This is also necessary to uniquely identify the item,
+ * because not all text with the same contents should be translated the same 
+ * way in all languages - the context might change the translation.
+ */ 
+Glib::ustring get_po_context_for_item(const sharedptr<const TranslatableItem>& item, const Glib::ustring& hint);
+
 } //namespace Glom
 
 #endif //GLOM_TRANSLATIONS_PO
diff --git a/glom/mode_design/translation/window_translations.cc b/glom/mode_design/translation/window_translations.cc
index aea3fa0..87af366 100644
--- a/glom/mode_design/translation/window_translations.cc
+++ b/glom/mode_design/translation/window_translations.cc
@@ -75,7 +75,7 @@ Window_Translations::Window_Translations(BaseObjectType* cobject, const Glib::Re
 
     Gtk::CellRendererText* renderer_item_typename = Gtk::manage(new Gtk::CellRendererText);
     column_item_typename->pack_start(*renderer_item_typename);
-    column_item_typename->set_cell_data_func(*renderer_item_typename, sigc::mem_fun(*this, &Window_Translations::on_cell_data_item_typename));
+    column_item_typename->set_cell_data_func(*renderer_item_typename, sigc::mem_fun(*this, &Window_Translations::on_cell_data_item_itemhint));
 
 
     const int col = m_treeview->append_column_editable(_("Translation"), m_columns.m_col_translation);
@@ -178,25 +178,24 @@ void Window_Translations::on_cell_data_original(Gtk::CellRenderer* renderer, con
   }
 }
 
-void Window_Translations::on_cell_data_item_typename(Gtk::CellRenderer* renderer, const Gtk::TreeModel::iterator& iter)
+void Window_Translations::on_cell_data_item_itemhint(Gtk::CellRenderer* renderer, const Gtk::TreeModel::iterator& iter)
 {
   //Set the view's cell properties depending on the model's data:
   Gtk::CellRendererText* renderer_text = dynamic_cast<Gtk::CellRendererText*>(renderer);
-  if(renderer_text)
-  {
-    if(iter)
-    {
-      Gtk::TreeModel::Row row = *iter;
+  if(!renderer_text)
+    return;
 
-      Glib::ustring item_type_name;
-      sharedptr<TranslatableItem> item = row[m_columns.m_col_item];
-      if(item)
-        item_type_name = TranslatableItem::get_translatable_type_name(item->get_translatable_item_type());
+  if(!iter)
+    return;
 
-      renderer_text->property_text() = item_type_name;
-      renderer_text->property_editable() = false; //Names can never be edited.
-    }
-  }
+  Gtk::TreeModel::Row row = *iter;
+
+  Glib::ustring item_type_name;
+  sharedptr<TranslatableItem> item = row[m_columns.m_col_item];
+  const Glib::ustring hint = row[m_columns.m_col_hint];
+
+  renderer_text->property_text() = get_po_context_for_item(item, hint);
+  renderer_text->property_editable() = false; //Names can never be edited.
 }
 
 void Window_Translations::load_from_document()
@@ -216,19 +215,19 @@ void Window_Translations::load_from_document()
   Document::type_list_translatables list_layout_items = document->get_translatable_items();
   for(Document::type_list_translatables::iterator iter = list_layout_items.begin(); iter != list_layout_items.end(); ++iter)
   {
-    sharedptr<TranslatableItem> item = *iter;
-    if(item)
-    {
-      if(item->get_title_original().empty())
-        continue;
+    sharedptr<TranslatableItem> item = iter->first;
+    if(!item)
+      continue;
+
+    if(item->get_title_original().empty())
+      continue;
       
-      Gtk::TreeModel::iterator iterTree = m_model->append();
-      Gtk::TreeModel::Row row = *iterTree;
+    Gtk::TreeModel::iterator iterTree = m_model->append();
+    Gtk::TreeModel::Row row = *iterTree;
 
-      row[m_columns.m_col_item] = item;
-      row[m_columns.m_col_translation] = item->get_title_translation(m_translation_locale, false);
-      //row[m_columns.m_col_parent_table] = table_name;
-    }
+    row[m_columns.m_col_item] = item;
+    row[m_columns.m_col_translation] = item->get_title_translation(m_translation_locale, false);
+    row[m_columns.m_col_hint] = iter->second;
   }
 
   m_treeview_modified = false;
diff --git a/glom/mode_design/translation/window_translations.h b/glom/mode_design/translation/window_translations.h
index bfbbcbd..2c12609 100644
--- a/glom/mode_design/translation/window_translations.h
+++ b/glom/mode_design/translation/window_translations.h
@@ -57,7 +57,7 @@ private:
   //signal handlers:
   void on_button_identify();
   void on_cell_data_original(Gtk::CellRenderer* renderer, const Gtk::TreeModel::iterator& iter);
-  void on_cell_data_item_typename(Gtk::CellRenderer* renderer, const Gtk::TreeModel::iterator& iter);
+  void on_cell_data_item_itemhint(Gtk::CellRenderer* renderer, const Gtk::TreeModel::iterator& iter);
   void on_treeview_edited(const Glib::ustring& path, const Glib::ustring& new_text);
 
   void on_combo_target_locale_changed();
@@ -67,8 +67,6 @@ private:
   void on_button_copy_translation();
   void on_button_import();
   void on_button_export();
-  
-  Glib::ustring get_po_context_for_item(const sharedptr<TranslatableItem>& item);
 
   //Tree model columns:
   class ModelColumns : public Gtk::TreeModel::ColumnRecord
@@ -76,11 +74,11 @@ private:
   public:
 
     ModelColumns()
-    { add(m_col_item); add(m_col_translation); }
+    { add(m_col_item); add(m_col_translation); add(m_col_hint); }
 
     Gtk::TreeModelColumn< sharedptr<TranslatableItem> > m_col_item; //The table name, field name, etc.
     Gtk::TreeModelColumn<Glib::ustring> m_col_translation;
-    //Gtk::TreeModelColumn<Glib::ustring> m_col_parent_table; //Not shown.
+    Gtk::TreeModelColumn<Glib::ustring> m_col_hint;
   };
 
   ModelColumns m_columns;
diff --git a/tests/test_document_load_translations.cc b/tests/test_document_load_translations.cc
index a3e7d35..8b1cb46 100644
--- a/tests/test_document_load_translations.cc
+++ b/tests/test_document_load_translations.cc
@@ -72,7 +72,7 @@ private:
 
 /** A predicate for use with std::find_if() to find a LayoutItem of a particular type.
  */
-template<class T_Element, class T_TypeToFind>
+template<class T_TypeToFind>
 class predicate_ItemHasType
 {
 public:
@@ -84,18 +84,10 @@ public:
   {
   }
 
-  bool operator() (const Glom::sharedptr<T_Element>& element)
-  {
-    Glom::sharedptr<T_TypeToFind> derived = Glom::sharedptr<T_TypeToFind>::cast_dynamic(element);
-    if(derived)
-      return true;
-    else
-      return false;
-  }
-
-  bool operator() (const Glom::sharedptr<const T_Element>& element)
+  bool operator() (const Glom::Document::pair_translatable_item_and_hint& element)
   {
-     Glom::sharedptr<const T_TypeToFind> derived = Glom::sharedptr<const T_TypeToFind>::cast_dynamic(element);
+    Glom::sharedptr<Glom::TranslatableItem> item = element.first;
+    Glom::sharedptr<T_TypeToFind> derived = Glom::sharedptr<T_TypeToFind>::cast_dynamic(item);
     if(derived)
       return true;
     else
@@ -120,20 +112,16 @@ typename T_Container::value_type get_titled(const T_Container& container, const
   return result;
 }
 
-template<typename T_Container, typename T_TypeToFind>
-bool contains_item_type(const T_Container& container)
+template<typename T_TypeToFind>
+bool contains_item_type(const Glom::Document::type_list_translatables& container)
 {
-  typedef typename T_Container::value_type type_sharedptr;
-  type_sharedptr result;
-
-  typedef typename T_Container::value_type::object_type type_item;
-  typename T_Container::const_iterator iter =
+  Glom::Document::type_list_translatables::const_iterator iter =
     std::find_if(container.begin(), container.end(),
-      predicate_ItemHasType<type_item, T_TypeToFind>());
+      predicate_ItemHasType<T_TypeToFind>());
   if(iter != container.end())
-    result = *iter;
+    return true;
 
-  return result;
+  return false;
 }
 
 static Glom::sharedptr<const Glom::LayoutItem_Field> get_field_on_layout(const Glom::Document& document, const Glib::ustring& layout_table_name, const Glib::ustring& table_name, const Glib::ustring& field_name)
@@ -313,30 +301,30 @@ int main()
   Glom::Document::type_list_translatables list_layout_items = document.get_translatable_items();
   g_assert(!list_layout_items.empty());
   const bool contains_tableinfo =
-    contains_item_type<Glom::Document::type_list_translatables, Glom::TableInfo>(list_layout_items);
+    contains_item_type<Glom::TableInfo>(list_layout_items);
   g_assert( contains_tableinfo );
   const bool contains_layoutitem =
-    contains_item_type<Glom::Document::type_list_translatables, Glom::LayoutItem>(list_layout_items);
+    contains_item_type<Glom::LayoutItem>(list_layout_items);
   g_assert( contains_layoutitem );
   /*
   const bool contains_layoutitemfield =
-    contains_item_type<Glom::Document::type_list_translatables, Glom::LayoutItem_Field>(list_layout_items);
+    contains_item_type<Glom::LayoutItem_Field>(list_layout_items);
   g_assert( contains_layoutitemfield );
   */
   const bool contains_relationship =
-    contains_item_type<Glom::Document::type_list_translatables, Glom::Relationship>(list_layout_items);
+    contains_item_type<Glom::Relationship>(list_layout_items);
   g_assert( contains_relationship );
   const bool contains_field =
-    contains_item_type<Glom::Document::type_list_translatables, Glom::Field>(list_layout_items);
+    contains_item_type<Glom::Field>(list_layout_items);
   g_assert( contains_field );
   const bool contains_choicevalue =
-    contains_item_type<Glom::Document::type_list_translatables, Glom::ChoiceValue>(list_layout_items);
+    contains_item_type<Glom::ChoiceValue>(list_layout_items);
   g_assert( contains_choicevalue );
   const bool contains_customtitle =
-    contains_item_type<Glom::Document::type_list_translatables, Glom::CustomTitle>(list_layout_items);
+    contains_item_type<Glom::CustomTitle>(list_layout_items);
   g_assert( contains_customtitle );
   const bool contains_report =
-    contains_item_type<Glom::Document::type_list_translatables, Glom::Report>(list_layout_items);
+    contains_item_type<Glom::Report>(list_layout_items);
   g_assert( contains_report );
 
   Glom::libglom_deinit();
diff --git a/tests/translations_po/data/test.po b/tests/translations_po/data/test.po
index c063e65..be8cceb 100644
--- a/tests/translations_po/data/test.po
+++ b/tests/translations_po/data/test.po
@@ -2,59 +2,59 @@ msgctxt "Table (accommodation)"
 msgid "Accommodation"
 msgstr "Unterkunft"
 
-msgctxt "Field (accommodation_id)"
+msgctxt "Field (accommodation_id). Parent table: accommodation"
 msgid "Accommodation ID"
 msgstr "Unterkunft ID"
 
-msgctxt "Field (description)"
+msgctxt "Field (description). Parent table: accommodation"
 msgid "Description"
 msgstr "Beschreibung"
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: accommodation"
 msgid "Comments"
 msgstr "Kommentare"
 
-msgctxt "Field (address_street)"
+msgctxt "Field (address_street). Parent table: accommodation"
 msgid "Street"
 msgstr "Strasse"
 
-msgctxt "Field (address_town)"
+msgctxt "Field (address_town). Parent table: accommodation"
 msgid "Town"
 msgstr "Ort"
 
-msgctxt "Field (address_county)"
+msgctxt "Field (address_county). Parent table: accommodation"
 msgid "County"
 msgstr "Bundesland/Kanton"
 
-msgctxt "Field (address_country)"
+msgctxt "Field (address_country). Parent table: accommodation"
 msgid "Country"
 msgstr "Land"
 
-msgctxt "Field (address_postcode)"
+msgctxt "Field (address_postcode). Parent table: accommodation"
 msgid "Postcode"
 msgstr "Postleitzahl"
 
-msgctxt "Field (contact_id)"
+msgctxt "Field (contact_id). Parent table: accommodation"
 msgid "Contact ID"
 msgstr "Kontakt ID"
 
-msgctxt "Field (name)"
+msgctxt "Field (name). Parent table: accommodation"
 msgid "Name"
 msgstr ""
 
-msgctxt "Relationship (contacts)"
+msgctxt "Relationship (contacts). Parent table: accommodation"
 msgid "Contacts"
 msgstr "Kontakte"
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: accommodation"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (address)"
+msgctxt "Layout Group (address). Parent table: accommodation"
 msgid "Address"
 msgstr "Addresse"
 
-msgctxt "Layout Group (contact)"
+msgctxt "Layout Group (contact). Parent table: accommodation"
 msgid "Contact"
 msgstr "Kontakt"
 
@@ -62,35 +62,35 @@ msgctxt "Table (cars)"
 msgid "Cars"
 msgstr "Autos"
 
-msgctxt "Field (car_id)"
+msgctxt "Field (car_id). Parent table: cars"
 msgid "Car ID"
 msgstr "Auto ID"
 
-msgctxt "Field (manufacturer)"
+msgctxt "Field (manufacturer). Parent table: cars"
 msgid "Manufacturer"
 msgstr "Hersteller"
 
-msgctxt "Field (model)"
+msgctxt "Field (model). Parent table: cars"
 msgid "Model"
 msgstr "Model"
 
-msgctxt "Field (registration)"
+msgctxt "Field (registration). Parent table: cars"
 msgid "Registration"
 msgstr "Kennzeichnung"
 
-msgctxt "Field (description)"
+msgctxt "Field (description). Parent table: cars"
 msgid "Description"
 msgstr "Beschreibung"
 
-msgctxt "Field (comment)"
+msgctxt "Field (comment). Parent table: cars"
 msgid "Comment"
 msgstr "Kommentar"
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: cars"
 msgid "Overview"
 msgstr "bersicht"
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: cars"
 msgid "Details"
 msgstr "Details"
 
@@ -98,83 +98,83 @@ msgctxt "Table (characters)"
 msgid "Characters"
 msgstr "Besetzung"
 
-msgctxt "Field (character_id)"
+msgctxt "Field (character_id). Parent table: characters"
 msgid "Cast ID"
 msgstr "Besetzung ID"
 
-msgctxt "Field (character)"
+msgctxt "Field (character). Parent table: characters"
 msgid "Character"
 msgstr "Charakter"
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: characters"
 msgid "Comments"
 msgstr "Kommentar"
 
-msgctxt "Field (contact_id)"
+msgctxt "Field (contact_id). Parent table: characters"
 msgid "Contact ID"
 msgstr "Kontakt ID"
 
-msgctxt "Field (mainpart)"
+msgctxt "Field (mainpart). Parent table: characters"
 msgid "Main Part"
 msgstr "Hauptrolle"
 
-msgctxt "Relationship (contacts_actor)"
+msgctxt "Relationship (contacts_actor). Parent table: characters"
 msgid "Actor"
 msgstr "Schauspieler"
 
-msgctxt "Relationship (scenes)"
+msgctxt "Relationship (scenes). Parent table: characters"
 msgid "Scenes"
 msgstr ""
 
-msgctxt "Report (cast_list)"
+msgctxt "Report (cast_list). Parent table: characters"
 msgid "Cast List"
 msgstr "Besetzungsliste"
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: characters, Parent Report: cast_list"
 msgid "Actor"
 msgstr "Schauspieler"
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: characters, Parent Report: cast_list"
 msgid "Agent"
 msgstr ""
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: characters"
 msgid "Overview"
 msgstr "bersicht"
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: characters"
 msgid "Details"
 msgstr "Details"
 
-msgctxt "Layout Group (actor)"
+msgctxt "Layout Group (actor). Parent table: characters"
 msgid "Actor"
 msgstr "Schauspieler"
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: characters"
 msgid "Actor's Contact ID"
 msgstr "Schauspieler Kontakt ID"
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: characters"
 msgid "Actor's Name"
 msgstr "Schauspieler Name"
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: characters"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: characters"
 msgid "Details"
 msgstr ""
 
-msgctxt "Layout Group (actor)"
+msgctxt "Layout Group (actor). Parent table: characters"
 msgid "Actor"
 msgstr ""
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: characters"
 msgid "Actor's Name"
 msgstr "Schauspieler Name"
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: characters"
 msgid "Actor"
 msgstr ""
 
@@ -182,39 +182,39 @@ msgctxt "Table (companies)"
 msgid "Companies"
 msgstr "Firmen"
 
-msgctxt "Field (company_id)"
+msgctxt "Field (company_id). Parent table: companies"
 msgid "Company ID"
 msgstr "Firma ID"
 
-msgctxt "Field (name)"
+msgctxt "Field (name). Parent table: companies"
 msgid "Name"
 msgstr ""
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: companies"
 msgid "Comments"
 msgstr "Kommentar"
 
-msgctxt "Field (description)"
+msgctxt "Field (description). Parent table: companies"
 msgid "Description"
 msgstr "Beschreibung"
 
-msgctxt "Field (logo)"
+msgctxt "Field (logo). Parent table: companies"
 msgid "Logo"
 msgstr ""
 
-msgctxt "Field (website)"
+msgctxt "Field (website). Parent table: companies"
 msgid "Web Site"
 msgstr "Website"
 
-msgctxt "Relationship (staff)"
+msgctxt "Relationship (staff). Parent table: companies"
 msgid "Staff"
 msgstr "Angestellte"
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: companies"
 msgid "Overview"
 msgstr "bersicht"
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: companies"
 msgid "Details"
 msgstr "Details"
 
@@ -222,199 +222,199 @@ msgctxt "Table (contacts)"
 msgid "Contacts"
 msgstr "Kontakte"
 
-msgctxt "Field (contact_id)"
+msgctxt "Field (contact_id). Parent table: contacts"
 msgid "Contact ID"
 msgstr "Kontakt ID"
 
-msgctxt "Field (name_first)"
+msgctxt "Field (name_first). Parent table: contacts"
 msgid "First Name"
 msgstr "Vorname"
 
-msgctxt "Field (name_middle)"
+msgctxt "Field (name_middle). Parent table: contacts"
 msgid "Second Name"
 msgstr "Zweiter Name"
 
-msgctxt "Field (name_last)"
+msgctxt "Field (name_last). Parent table: contacts"
 msgid "Last Name"
 msgstr "Familiename"
 
-msgctxt "Field (name_title)"
+msgctxt "Field (name_title). Parent table: contacts"
 msgid "Title"
 msgstr "Titel"
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: contacts, Parent Field: name_title"
 msgid "Mr"
 msgstr ""
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: contacts, Parent Field: name_title"
 msgid "Ms"
 msgstr ""
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: contacts, Parent Field: name_title"
 msgid "Mrs"
 msgstr ""
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: contacts, Parent Field: name_title"
 msgid "Miss"
 msgstr ""
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: contacts, Parent Field: name_title"
 msgid "Dr"
 msgstr ""
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: contacts, Parent Field: name_title"
 msgid "Prof"
 msgstr ""
 
-msgctxt "Field (address_street2)"
+msgctxt "Field (address_street2). Parent table: contacts"
 msgid "Street (line 2)"
 msgstr "Strasse (2)"
 
-msgctxt "Field (address_town)"
+msgctxt "Field (address_town). Parent table: contacts"
 msgid "Town"
 msgstr "Ort"
 
-msgctxt "Field (address_state)"
+msgctxt "Field (address_state). Parent table: contacts"
 msgid "State"
 msgstr "Bundesland/Kanton"
 
-msgctxt "Field (address_country)"
+msgctxt "Field (address_country). Parent table: contacts"
 msgid "Country"
 msgstr "Land"
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: contacts, Parent Field: address_country"
 msgid "Germany"
 msgstr ""
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: contacts, Parent Field: address_country"
 msgid "United Kingdom"
 msgstr ""
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: contacts, Parent Field: address_country"
 msgid "USA"
 msgstr ""
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: contacts, Parent Field: address_country"
 msgid "France"
 msgstr ""
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: contacts, Parent Field: address_country"
 msgid "Spain"
 msgstr ""
 
-msgctxt "Field (address_postcode)"
+msgctxt "Field (address_postcode). Parent table: contacts"
 msgid "Postcode"
 msgstr "Postleitzahl"
 
-msgctxt "Field (date_of_birth)"
+msgctxt "Field (date_of_birth). Parent table: contacts"
 msgid "Date Of Birth"
 msgstr "Geburtsdatum"
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: contacts"
 msgid "Comments"
 msgstr "Kommentare"
 
-msgctxt "Field (name_full)"
+msgctxt "Field (name_full). Parent table: contacts"
 msgid "Full Name"
 msgstr "Vollstndiger Name"
 
-msgctxt "Field (company_id)"
+msgctxt "Field (company_id). Parent table: contacts"
 msgid "Company ID"
 msgstr "Firma ID"
 
-msgctxt "Field (picture)"
+msgctxt "Field (picture). Parent table: contacts"
 msgid "Picture"
 msgstr "Bild"
 
-msgctxt "Field (tel_home)"
+msgctxt "Field (tel_home). Parent table: contacts"
 msgid "Home Telephone"
 msgstr "Telefon (Privat)"
 
-msgctxt "Field (tel_mobile)"
+msgctxt "Field (tel_mobile). Parent table: contacts"
 msgid "Mobile Telephone"
 msgstr "Telefon (Handy)"
 
-msgctxt "Field (tel_fax)"
+msgctxt "Field (tel_fax). Parent table: contacts"
 msgid "Fax"
 msgstr ""
 
-msgctxt "Field (tel_work)"
+msgctxt "Field (tel_work). Parent table: contacts"
 msgid "Work Telephone"
 msgstr "Telefon (Buro)"
 
-msgctxt "Field (email)"
+msgctxt "Field (email). Parent table: contacts"
 msgid "Email"
 msgstr "E-Mail"
 
-msgctxt "Field (address_street1)"
+msgctxt "Field (address_street1). Parent table: contacts"
 msgid "Street (line 1)"
 msgstr "Strasse (1)"
 
-msgctxt "Field (website)"
+msgctxt "Field (website). Parent table: contacts"
 msgid "Web Site"
 msgstr "Website"
 
-msgctxt "Field (agent_id)"
+msgctxt "Field (agent_id). Parent table: contacts"
 msgid "Agent ID"
 msgstr ""
 
-msgctxt "Field (stagename)"
+msgctxt "Field (stagename). Parent table: contacts"
 msgid "Stagename"
 msgstr "Knstlername"
 
-msgctxt "Relationship (company)"
+msgctxt "Relationship (company). Parent table: contacts"
 msgid "Company"
 msgstr "Firma"
 
-msgctxt "Relationship (agent)"
+msgctxt "Relationship (agent). Parent table: contacts"
 msgid "Agent"
 msgstr ""
 
-msgctxt "Relationship (crew)"
+msgctxt "Relationship (crew). Parent table: contacts"
 msgid "Crew"
 msgstr ""
 
-msgctxt "Relationship (cast)"
+msgctxt "Relationship (cast). Parent table: contacts"
 msgid "Cast"
 msgstr ""
 
-msgctxt "Report (by_country)"
+msgctxt "Report (by_country). Parent table: contacts"
 msgid "Contacts By Country"
 msgstr ""
 
-msgctxt "Report (by_country_by_town)"
+msgctxt "Report (by_country_by_town). Parent table: contacts"
 msgid "By Country, By Town"
 msgstr ""
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: contacts"
 msgid "Overview"
 msgstr "bersicht"
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: contacts"
 msgid "Details"
 msgstr "Details"
 
-msgctxt "Layout Group (name)"
+msgctxt "Layout Group (name). Parent table: contacts"
 msgid "Name"
 msgstr "Name"
 
-msgctxt "Layout Group (company)"
+msgctxt "Layout Group (company). Parent table: contacts"
 msgid "Company"
 msgstr "Firma"
 
-msgctxt "Layout Group (address)"
+msgctxt "Layout Group (address). Parent table: contacts"
 msgid "Address"
 msgstr "Addresse"
 
-msgctxt "Layout Group (telephone)"
+msgctxt "Layout Group (telephone). Parent table: contacts"
 msgid "Telephone"
 msgstr "Telefon"
 
-msgctxt "Layout Group (agent)"
+msgctxt "Layout Group (agent). Parent table: contacts"
 msgid "Agent"
 msgstr "Agent"
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: contacts"
 msgid "Company Name"
 msgstr ""
 
@@ -422,27 +422,27 @@ msgctxt "Table (costume)"
 msgid "Costume"
 msgstr ""
 
-msgctxt "Field (costume_id)"
+msgctxt "Field (costume_id). Parent table: costume"
 msgid "Costume ID"
 msgstr ""
 
-msgctxt "Field (description)"
+msgctxt "Field (description). Parent table: costume"
 msgid "Description"
 msgstr ""
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: costume"
 msgid "Comments"
 msgstr ""
 
-msgctxt "Field (name)"
+msgctxt "Field (name). Parent table: costume"
 msgid "Name"
 msgstr ""
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: costume"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: costume"
 msgid "Details"
 msgstr ""
 
@@ -450,67 +450,67 @@ msgctxt "Table (crew)"
 msgid "Crew"
 msgstr ""
 
-msgctxt "Field (crew_id)"
+msgctxt "Field (crew_id). Parent table: crew"
 msgid "Crew ID"
 msgstr ""
 
-msgctxt "Field (description)"
+msgctxt "Field (description). Parent table: crew"
 msgid "Description"
 msgstr "Beschreibung"
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: crew"
 msgid "Comments"
 msgstr "Kommentar"
 
-msgctxt "Field (dept_id)"
+msgctxt "Field (dept_id). Parent table: crew"
 msgid "Department ID"
 msgstr "Abteilung ID"
 
-msgctxt "Field (contact_id)"
+msgctxt "Field (contact_id). Parent table: crew"
 msgid "Contact ID"
 msgstr "Kontakt ID"
 
-msgctxt "Relationship (contacts)"
+msgctxt "Relationship (contacts). Parent table: crew"
 msgid "Contacts"
 msgstr "Kontakten"
 
-msgctxt "Relationship (departments)"
+msgctxt "Relationship (departments). Parent table: crew"
 msgid "Departments"
 msgstr "Abteilungen"
 
-msgctxt "Relationship (scenes)"
+msgctxt "Relationship (scenes). Parent table: crew"
 msgid "Scenes"
 msgstr "Szenen"
 
-msgctxt "Report (crew_list)"
+msgctxt "Report (crew_list). Parent table: crew"
 msgid "Crew List"
 msgstr "TestResult2"
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: crew, Parent Report: crew_list"
 msgid "Department Name"
 msgstr "Abteilungsname"
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: crew"
 msgid "Overview"
 msgstr "bersicht"
 
-msgctxt "Layout Group (department)"
+msgctxt "Layout Group (department). Parent table: crew"
 msgid "Department"
 msgstr "Abteilung"
 
-msgctxt "Layout Group (contact)"
+msgctxt "Layout Group (contact). Parent table: crew"
 msgid "Contact"
 msgstr "Kontakt"
 
-msgctxt "Layout Group (address)"
+msgctxt "Layout Group (address). Parent table: crew"
 msgid "Address"
 msgstr "Addresse"
 
-msgctxt "Layout Group (agent)"
+msgctxt "Layout Group (agent). Parent table: crew"
 msgid "Agent"
 msgstr "Agent"
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: crew"
 msgid "Department Name"
 msgstr "Abteilungsname"
 
@@ -518,75 +518,75 @@ msgctxt "Table (deliveries)"
 msgid "Deliveries"
 msgstr "Lieferungen"
 
-msgctxt "Field (delivery_id)"
+msgctxt "Field (delivery_id). Parent table: deliveries"
 msgid "Delivery ID"
 msgstr "Lieferung ID"
 
-msgctxt "Field (arrival_date)"
+msgctxt "Field (arrival_date). Parent table: deliveries"
 msgid "Arrival Date"
 msgstr "Lieferungsdatum"
 
-msgctxt "Field (departure_contact_id)"
+msgctxt "Field (departure_contact_id). Parent table: deliveries"
 msgid "Contact ID"
 msgstr "Kontakt ID"
 
-msgctxt "Field (arrival_contact_id)"
+msgctxt "Field (arrival_contact_id). Parent table: deliveries"
 msgid "Contact ID"
 msgstr "Kontakt ID"
 
-msgctxt "Field (arrival_time)"
+msgctxt "Field (arrival_time). Parent table: deliveries"
 msgid "Arrival Time"
 msgstr "Lieferungszeit"
 
-msgctxt "Field (arrival_place)"
+msgctxt "Field (arrival_place). Parent table: deliveries"
 msgid "Arrival Place"
 msgstr "Lieferungsaddresse"
 
-msgctxt "Field (departure_time)"
+msgctxt "Field (departure_time). Parent table: deliveries"
 msgid "Departure Time"
 msgstr "Sendungszeit"
 
-msgctxt "Field (departure_date)"
+msgctxt "Field (departure_date). Parent table: deliveries"
 msgid "Departure Date"
 msgstr "Sendungsdatum"
 
-msgctxt "Field (departure_place)"
+msgctxt "Field (departure_place). Parent table: deliveries"
 msgid "Departure Place"
 msgstr "Sendungsaddresse"
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: deliveries"
 msgid "Comments"
 msgstr "Kommentare"
 
-msgctxt "Field (description)"
+msgctxt "Field (description). Parent table: deliveries"
 msgid "Description"
 msgstr "Beschreibung"
 
-msgctxt "Relationship (departure_contact)"
+msgctxt "Relationship (departure_contact). Parent table: deliveries"
 msgid "Departure Contact"
 msgstr "Sendungskontakt"
 
-msgctxt "Relationship (arrival_contact)"
+msgctxt "Relationship (arrival_contact). Parent table: deliveries"
 msgid "Arrival Contact"
 msgstr "Empfaengerkontakt"
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: deliveries"
 msgid "Departure Name"
 msgstr "Sendername"
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: deliveries"
 msgid "Arrival Name"
 msgstr "Empfngerkontakt"
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: deliveries"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (departure)"
+msgctxt "Layout Group (departure). Parent table: deliveries"
 msgid "Departure"
 msgstr "Departure"
 
-msgctxt "Layout Group (arrival)"
+msgctxt "Layout Group (arrival). Parent table: deliveries"
 msgid "Arrival"
 msgstr "Arrival"
 
@@ -594,23 +594,23 @@ msgctxt "Table (departments)"
 msgid "Departments"
 msgstr "Abteilungen"
 
-msgctxt "Field (departments_id)"
+msgctxt "Field (departments_id). Parent table: departments"
 msgid "Department ID"
 msgstr "Abteilung ID"
 
-msgctxt "Field (name)"
+msgctxt "Field (name). Parent table: departments"
 msgid "Name"
 msgstr ""
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: departments"
 msgid "Comments"
 msgstr "Kommentar"
 
-msgctxt "Relationship (department_crew)"
+msgctxt "Relationship (department_crew). Parent table: departments"
 msgid "Department Crew"
 msgstr "Abteilung Crew"
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: departments"
 msgid "Overview"
 msgstr "bersicht"
 
@@ -618,27 +618,27 @@ msgctxt "Table (equipment)"
 msgid "Equipment"
 msgstr ""
 
-msgctxt "Field (equipment_id)"
+msgctxt "Field (equipment_id). Parent table: equipment"
 msgid "Equipment ID"
 msgstr ""
 
-msgctxt "Field (description)"
+msgctxt "Field (description). Parent table: equipment"
 msgid "Description"
 msgstr "Beschreibung"
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: equipment"
 msgid "Comments"
 msgstr "Kommentar"
 
-msgctxt "Relationship (scenes)"
+msgctxt "Relationship (scenes). Parent table: equipment"
 msgid "Scenes"
 msgstr "Szenen"
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: equipment"
 msgid "Overview"
 msgstr "bersicht"
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: equipment"
 msgid "Details"
 msgstr "Details"
 
@@ -646,63 +646,63 @@ msgctxt "Table (journeys)"
 msgid "Journeys"
 msgstr "Fahrten"
 
-msgctxt "Field (journey_id)"
+msgctxt "Field (journey_id). Parent table: journeys"
 msgid "Journey ID"
 msgstr "Fahrt ID"
 
-msgctxt "Field (comment)"
+msgctxt "Field (comment). Parent table: journeys"
 msgid "Comment"
 msgstr "Kommentar"
 
-msgctxt "Field (description)"
+msgctxt "Field (description). Parent table: journeys"
 msgid "Description"
 msgstr "Beschreibung"
 
-msgctxt "Field (arrival_date)"
+msgctxt "Field (arrival_date). Parent table: journeys"
 msgid "Arrival Date"
 msgstr ""
 
-msgctxt "Field (arrival_time)"
+msgctxt "Field (arrival_time). Parent table: journeys"
 msgid "Arrival Time"
 msgstr ""
 
-msgctxt "Field (arrival_place)"
+msgctxt "Field (arrival_place). Parent table: journeys"
 msgid "Arrival Place"
 msgstr ""
 
-msgctxt "Field (departure_date)"
+msgctxt "Field (departure_date). Parent table: journeys"
 msgid "Departure Date"
 msgstr ""
 
-msgctxt "Field (departure_time)"
+msgctxt "Field (departure_time). Parent table: journeys"
 msgid "Departure Time"
 msgstr ""
 
-msgctxt "Field (departure_place)"
+msgctxt "Field (departure_place). Parent table: journeys"
 msgid "Departure Place"
 msgstr ""
 
-msgctxt "Field (contact_id)"
+msgctxt "Field (contact_id). Parent table: journeys"
 msgid "Contact ID"
 msgstr "Kontakt ID"
 
-msgctxt "Relationship (contacts)"
+msgctxt "Relationship (contacts). Parent table: journeys"
 msgid "Contacts"
 msgstr "Kontakte"
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: journeys"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (person)"
+msgctxt "Layout Group (person). Parent table: journeys"
 msgid "Person"
 msgstr "Person"
 
-msgctxt "Layout Group (departure)"
+msgctxt "Layout Group (departure). Parent table: journeys"
 msgid "Departure"
 msgstr "Departure"
 
-msgctxt "Layout Group (arrival)"
+msgctxt "Layout Group (arrival). Parent table: journeys"
 msgid "Arrival"
 msgstr "Arrival"
 
@@ -710,63 +710,63 @@ msgctxt "Table (locations)"
 msgid "Locations"
 msgstr ""
 
-msgctxt "Field (location_id)"
+msgctxt "Field (location_id). Parent table: locations"
 msgid "Location ID"
 msgstr ""
 
-msgctxt "Field (name)"
+msgctxt "Field (name). Parent table: locations"
 msgid "Name"
 msgstr ""
 
-msgctxt "Field (address_street)"
+msgctxt "Field (address_street). Parent table: locations"
 msgid "Street"
 msgstr "Strasse"
 
-msgctxt "Field (address_town)"
+msgctxt "Field (address_town). Parent table: locations"
 msgid "Town"
 msgstr "Stadt"
 
-msgctxt "Field (address_county)"
+msgctxt "Field (address_county). Parent table: locations"
 msgid "County"
 msgstr "Land"
 
-msgctxt "Field (address_country)"
+msgctxt "Field (address_country). Parent table: locations"
 msgid "Country"
 msgstr "Staat"
 
-msgctxt "Field (address_postcode)"
+msgctxt "Field (address_postcode). Parent table: locations"
 msgid "Postcode"
 msgstr "Postleitzahl"
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: locations"
 msgid "Comments"
 msgstr "Kommentar"
 
-msgctxt "Field (contact_id)"
+msgctxt "Field (contact_id). Parent table: locations"
 msgid "Contact ID"
 msgstr ""
 
-msgctxt "Field (rent)"
+msgctxt "Field (rent). Parent table: locations"
 msgid "Rent"
 msgstr ""
 
-msgctxt "Relationship (scenes)"
+msgctxt "Relationship (scenes). Parent table: locations"
 msgid "Scenes"
 msgstr "Szenen"
 
-msgctxt "Relationship (contacts)"
+msgctxt "Relationship (contacts). Parent table: locations"
 msgid "Contacts"
 msgstr ""
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: locations"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (address)"
+msgctxt "Layout Group (address). Parent table: locations"
 msgid "Address"
 msgstr "Addresse"
 
-msgctxt "Layout Group (contact_person)"
+msgctxt "Layout Group (contact_person). Parent table: locations"
 msgid "Contact Person"
 msgstr "Contact Person"
 
@@ -774,27 +774,27 @@ msgctxt "Table (props)"
 msgid "Props"
 msgstr ""
 
-msgctxt "Field (prop_id)"
+msgctxt "Field (prop_id). Parent table: props"
 msgid "Prop ID"
 msgstr ""
 
-msgctxt "Field (description)"
+msgctxt "Field (description). Parent table: props"
 msgid "Description"
 msgstr ""
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: props"
 msgid "Comments"
 msgstr ""
 
-msgctxt "Field (name)"
+msgctxt "Field (name). Parent table: props"
 msgid "Name"
 msgstr ""
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: props"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: props"
 msgid "Details"
 msgstr ""
 
@@ -802,31 +802,31 @@ msgctxt "Table (scene_cast)"
 msgid "Scene Cast"
 msgstr "Szene Besetzung"
 
-msgctxt "Field (scene_cast_id)"
+msgctxt "Field (scene_cast_id). Parent table: scene_cast"
 msgid "Scene Cast ID"
 msgstr "Szene Besetzung ID"
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: scene_cast"
 msgid "Comments"
 msgstr "Kommentar"
 
-msgctxt "Field (cast_id)"
+msgctxt "Field (cast_id). Parent table: scene_cast"
 msgid "Cast ID"
 msgstr "Besetzung ID"
 
-msgctxt "Field (scene_id)"
+msgctxt "Field (scene_id). Parent table: scene_cast"
 msgid "Scene ID"
 msgstr "Szene ID"
 
-msgctxt "Relationship (cast)"
+msgctxt "Relationship (cast). Parent table: scene_cast"
 msgid "Cast"
 msgstr "Besetzung"
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: scene_cast"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: scene_cast"
 msgid "Details"
 msgstr ""
 
@@ -834,35 +834,35 @@ msgctxt "Table (scene_costume)"
 msgid "Scene Costume"
 msgstr ""
 
-msgctxt "Field (scene_costume_id)"
+msgctxt "Field (scene_costume_id). Parent table: scene_costume"
 msgid "Scene Costume ID"
 msgstr ""
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: scene_costume"
 msgid "Comments"
 msgstr ""
 
-msgctxt "Field (scene_id)"
+msgctxt "Field (scene_id). Parent table: scene_costume"
 msgid "Scene Id"
 msgstr ""
 
-msgctxt "Field (costume_id)"
+msgctxt "Field (costume_id). Parent table: scene_costume"
 msgid "Costume ID"
 msgstr ""
 
-msgctxt "Relationship (costume)"
+msgctxt "Relationship (costume). Parent table: scene_costume"
 msgid "Costume"
 msgstr ""
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: scene_costume"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: scene_costume"
 msgid "Details"
 msgstr ""
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: scene_costume"
 msgid "Costume Name"
 msgstr ""
 
@@ -870,59 +870,59 @@ msgctxt "Table (scene_crew)"
 msgid "Scene Crew"
 msgstr "Szene Crew"
 
-msgctxt "Field (scene_crew_id)"
+msgctxt "Field (scene_crew_id). Parent table: scene_crew"
 msgid "Scene Crew ID"
 msgstr "Szene Crew ID"
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: scene_crew"
 msgid "Comments"
 msgstr "Kommentar"
 
-msgctxt "Field (scene_id)"
+msgctxt "Field (scene_id). Parent table: scene_crew"
 msgid "Scene ID"
 msgstr "Szene ID"
 
-msgctxt "Field (department_id)"
+msgctxt "Field (department_id). Parent table: scene_crew"
 msgid "Department ID"
 msgstr ""
 
-msgctxt "Relationship (department)"
+msgctxt "Relationship (department). Parent table: scene_crew"
 msgid "Department"
 msgstr ""
 
-msgctxt "Relationship (scenes)"
+msgctxt "Relationship (scenes). Parent table: scene_crew"
 msgid "Scenes"
 msgstr "Szenen"
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: scene_crew"
 msgid "Overview"
 msgstr "bersicht"
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: scene_crew"
 msgid "Details"
 msgstr "Details"
 
-msgctxt "Field (scene_equipment_id)"
+msgctxt "Field (scene_equipment_id). Parent table: scene_equipment"
 msgid "Scene Equipment ID"
 msgstr ""
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: scene_equipment"
 msgid "Comments"
 msgstr "Kommentar"
 
-msgctxt "Field (equipment_id)"
+msgctxt "Field (equipment_id). Parent table: scene_equipment"
 msgid "Equipment ID"
 msgstr ""
 
-msgctxt "Field (scene_id)"
+msgctxt "Field (scene_id). Parent table: scene_equipment"
 msgid "Scene ID"
 msgstr ""
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: scene_equipment"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: scene_equipment"
 msgid "Details"
 msgstr ""
 
@@ -930,35 +930,35 @@ msgctxt "Table (scene_extras)"
 msgid "Scene Extras"
 msgstr ""
 
-msgctxt "Field (scene_extras_id)"
+msgctxt "Field (scene_extras_id). Parent table: scene_extras"
 msgid "Scene Extras ID"
 msgstr ""
 
-msgctxt "Field (description)"
+msgctxt "Field (description). Parent table: scene_extras"
 msgid "Description"
 msgstr ""
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: scene_extras"
 msgid "Comments"
 msgstr ""
 
-msgctxt "Field (scene_id)"
+msgctxt "Field (scene_id). Parent table: scene_extras"
 msgid "Scene ID"
 msgstr ""
 
-msgctxt "Field (contact_id)"
+msgctxt "Field (contact_id). Parent table: scene_extras"
 msgid "Contact ID"
 msgstr ""
 
-msgctxt "Relationship (contact)"
+msgctxt "Relationship (contact). Parent table: scene_extras"
 msgid "Contact"
 msgstr ""
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: scene_extras"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: scene_extras"
 msgid "Details"
 msgstr ""
 
@@ -966,27 +966,27 @@ msgctxt "Table (scene_makeup)"
 msgid "Scene Makeup"
 msgstr ""
 
-msgctxt "Field (scene_makeup_id)"
+msgctxt "Field (scene_makeup_id). Parent table: scene_makeup"
 msgid "Scene Makeup ID"
 msgstr ""
 
-msgctxt "Field (description)"
+msgctxt "Field (description). Parent table: scene_makeup"
 msgid "Description"
 msgstr ""
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: scene_makeup"
 msgid "Comments"
 msgstr ""
 
-msgctxt "Field (scene_id)"
+msgctxt "Field (scene_id). Parent table: scene_makeup"
 msgid "Scene ID"
 msgstr ""
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: scene_makeup"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: scene_makeup"
 msgid "Details"
 msgstr ""
 
@@ -994,31 +994,31 @@ msgctxt "Table (scene_props)"
 msgid "Scene Props"
 msgstr ""
 
-msgctxt "Field (scene_props_id)"
+msgctxt "Field (scene_props_id). Parent table: scene_props"
 msgid "Scene Prop ID"
 msgstr ""
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: scene_props"
 msgid "Comments"
 msgstr ""
 
-msgctxt "Field (scene_id)"
+msgctxt "Field (scene_id). Parent table: scene_props"
 msgid "Scene ID"
 msgstr ""
 
-msgctxt "Field (prop_id)"
+msgctxt "Field (prop_id). Parent table: scene_props"
 msgid "Prop ID"
 msgstr ""
 
-msgctxt "Relationship (props)"
+msgctxt "Relationship (props). Parent table: scene_props"
 msgid "Props"
 msgstr ""
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: scene_props"
 msgid "Overview"
 msgstr ""
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: scene_props"
 msgid "Details"
 msgstr ""
 
@@ -1026,138 +1026,140 @@ msgctxt "Table (scenes)"
 msgid "Scenes"
 msgstr "TestResult1"
 
-msgctxt "Field (scene_id)"
+msgctxt "Field (scene_id). Parent table: scenes"
 msgid "Scene ID"
 msgstr "Szene ID"
 
-msgctxt "Field (comments)"
+msgctxt "Field (comments). Parent table: scenes"
 msgid "Comments"
 msgstr "Kommentar"
 
-msgctxt "Field (description)"
+msgctxt "Field (description). Parent table: scenes"
 msgid "Description"
 msgstr "Beschreibung"
 
-msgctxt "Field (location_id)"
+msgctxt "Field (location_id). Parent table: scenes"
 msgid "Location ID"
 msgstr ""
 
-msgctxt "Field (date)"
+msgctxt "Field (date). Parent table: scenes"
 msgid "Date"
 msgstr "Termin"
 
-msgctxt "Field (time)"
+msgctxt "Field (time). Parent table: scenes"
 msgid "Time"
 msgstr "Zeit"
 
-msgctxt "Field (minutes)"
+msgctxt "Field (minutes). Parent table: scenes"
 msgid "Stop (minutes)"
 msgstr "Stunde"
 
-msgctxt "Field (day_or_night)"
+msgctxt "Field (day_or_night). Parent table: scenes"
 msgid "Day/Night"
 msgstr "Tag/Nacht"
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: scenes, Parent Field: day_or_night"
 msgid "Day"
 msgstr "Tag"
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: scenes, Parent Field: day_or_night"
 msgid "Night"
 msgstr "Nacht"
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: scenes, Parent Field: day_or_night"
 msgid "Morning"
 msgstr ""
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: scenes, Parent Field: day_or_night"
 msgid "Evening"
 msgstr ""
 
-msgctxt "Field Choice ()"
+msgctxt "Field Choice. Parent table: scenes, Parent Field: day_or_night"
 msgid "Dawn"
 msgstr ""
 
-msgctxt "Field (interior_or_exterior)"
+msgctxt "Field (interior_or_exterior). Parent table: scenes"
 msgid "Interior/Exterior"
 msgstr "Interior/Exterior"
 
-msgctxt "Field Choice ()"
+msgctxt ""
+"Field Choice. Parent table: scenes, Parent Field: interior_or_exterior"
 msgid "Interior"
 msgstr ""
 
-msgctxt "Field Choice ()"
+msgctxt ""
+"Field Choice. Parent table: scenes, Parent Field: interior_or_exterior"
 msgid "Exterior"
 msgstr ""
 
-msgctxt "Field (name)"
+msgctxt "Field (name). Parent table: scenes"
 msgid "Name"
 msgstr "Szene"
 
-msgctxt "Field (overview_name)"
+msgctxt "Field (overview_name). Parent table: scenes"
 msgid "Scene"
 msgstr ""
 
-msgctxt "Field (pages)"
+msgctxt "Field (pages). Parent table: scenes"
 msgid "Pages"
 msgstr ""
 
-msgctxt "Field (script_day)"
+msgctxt "Field (script_day). Parent table: scenes"
 msgid "Script Day"
 msgstr ""
 
-msgctxt "Relationship (location)"
+msgctxt "Relationship (location). Parent table: scenes"
 msgid "Locations"
 msgstr ""
 
-msgctxt "Relationship (scene_crew)"
+msgctxt "Relationship (scene_crew). Parent table: scenes"
 msgid "Additional Crew"
 msgstr "Szene Crew"
 
-msgctxt "Relationship (scene_cast)"
+msgctxt "Relationship (scene_cast). Parent table: scenes"
 msgid "Cast"
 msgstr "Szene Besetzung"
 
-msgctxt "Relationship (scene_equipment)"
+msgctxt "Relationship (scene_equipment). Parent table: scenes"
 msgid "Additional Equipment"
 msgstr ""
 
-msgctxt "Relationship (scene_extras)"
+msgctxt "Relationship (scene_extras). Parent table: scenes"
 msgid "Extras"
 msgstr ""
 
-msgctxt "Relationship (scene_props)"
+msgctxt "Relationship (scene_props). Parent table: scenes"
 msgid "Props"
 msgstr ""
 
-msgctxt "Relationship (scene_costume)"
+msgctxt "Relationship (scene_costume). Parent table: scenes"
 msgid "Costume"
 msgstr ""
 
-msgctxt "Relationship (scene_makeup)"
+msgctxt "Relationship (scene_makeup). Parent table: scenes"
 msgid "Additional Makeup"
 msgstr ""
 
-msgctxt "Layout Group (overview)"
+msgctxt "Layout Group (overview). Parent table: scenes"
 msgid "Overview"
 msgstr "bersicht"
 
-msgctxt "Layout Group (details)"
+msgctxt "Layout Group (details). Parent table: scenes"
 msgid "Details"
 msgstr "Details"
 
-msgctxt "Layout Group (scenario)"
+msgctxt "Layout Group (scenario). Parent table: scenes"
 msgid "Scenario"
 msgstr "Stimmung"
 
-msgctxt "Layout Group (location)"
+msgctxt "Layout Group (location). Parent table: scenes"
 msgid "Location"
 msgstr "Location"
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: scenes"
 msgid "Contact Name"
 msgstr ""
 
-msgctxt "Custom Title ()"
+msgctxt "Custom Title. Parent table: scenes"
 msgid "Actor's Name"
 msgstr ""



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]