diff --git a/src/sakia/gui/community_view.py b/src/sakia/gui/community_view.py
index 6d6ad9166acac18d27ae293ccec4751720180b97..cd82efb6b8c5a346a799fef018d911c22e4465d6 100644
--- a/src/sakia/gui/community_view.py
+++ b/src/sakia/gui/community_view.py
@@ -9,7 +9,7 @@ import asyncio
 import time
 
 from PyQt5.QtWidgets import QWidget, QMessageBox, QDialog, QPushButton, QTabBar, QAction
-from PyQt5.QtCore import pyqtSlot, QDateTime, QLocale, QEvent
+from PyQt5.QtCore import pyqtSlot, QDateTime, QLocale, QEvent, QT_TRANSLATE_NOOP
 
 from PyQt5.QtGui import QIcon
 
@@ -31,6 +31,16 @@ class CommunityWidget(QWidget, Ui_CommunityWidget):
     classdocs
     """
 
+    _tab_history_label = QT_TRANSLATE_NOOP("CommunityWidget", "Transactions")
+    _tab_wot_label = QT_TRANSLATE_NOOP("CommunityWidget", "Web of Trust")
+    _tab_identities_label = QT_TRANSLATE_NOOP("CommuityWidget", "Search Identities")
+    _tab_network_label = QT_TRANSLATE_NOOP("CommunityWidget", "Network")
+    _tab_informations_label = QT_TRANSLATE_NOOP("CommunityWidget", "Informations")
+    _action_showinfo_text = QT_TRANSLATE_NOOP("CommunityWidget", "Show informations")
+    _action_publish_uid_text = QT_TRANSLATE_NOOP("CommunityWidget", "Publish UID")
+    _action_revoke_uid_text = QT_TRANSLATE_NOOP("CommunityWidget", "Revoke UID")
+
+
     def __init__(self, app, status_label):
         """
         Constructor
@@ -44,17 +54,18 @@ class CommunityWidget(QWidget, Ui_CommunityWidget):
 
         self.status_info = []
 
-        super().setupUi(self)
-
         self.tab_wot = WotTabWidget(self.app)
-
         self.tab_identities = IdentitiesTabWidget(self.app)
-
         self.tab_history = TransactionsTabWidget(self.app)
-
         self.tab_informations = InformationsTabWidget(self.app)
-
         self.tab_network = NetworkTabWidget(self.app)
+
+        self.action_publish_uid = QAction(self.tr(CommunityWidget._action_publish_uid_text), self)
+        self.action_revoke_uid = QAction(self.tr(CommunityWidget._action_revoke_uid_text), self)
+        self.action_showinfo = QAction(self.tr(CommunityWidget._action_showinfo_text), self)
+
+        super().setupUi(self)
+
         self.tab_identities.view_in_wot.connect(self.tab_wot.draw_graph)
         self.tab_identities.view_in_wot.connect(lambda: self.tabs.setCurrentWidget(self.tab_wot))
         self.tab_history.view_in_wot.connect(self.tab_wot.draw_graph)
@@ -64,27 +75,25 @@ class CommunityWidget(QWidget, Ui_CommunityWidget):
 
         self.tabs.addTab(self.tab_history,
                                  QIcon(':/icons/tx_icon'),
-                                self.tr("Transactions"))
+                                self.tr(CommunityWidget._tab_history_label))
 
         self.tabs.addTab(self.tab_wot,
                          QIcon(':/icons/wot_icon'),
-                         self.tr("Web of Trust"))
+                         self.tr(CommunityWidget._tab_wot_label))
 
         self.tabs.addTab(self.tab_identities,
                          QIcon(':/icons/members_icon'),
-                         self.tr("Search Identities"))
+                         self.tr(CommunityWidget._tab_identities_label))
 
         self.tabs.addTab(self.tab_network,
                                  QIcon(":/icons/network_icon"),
-                                 self.tr("Network"))
-
-        action_showinfo = QAction(self.tr("Show informations"), self.toolbutton_menu)
+                                 self.tr(CommunityWidget._tab_network_label))
 
         def show_info():
             if self.tabs.indexOf(self.tab_informations) == -1:
                 self.tabs.addTab(self.tab_informations,
                                          QIcon(":/icons/informations_icon"),
-                                         self.tr("Informations"))
+                                         self.tr(CommunityWidget._tab_informations_label))
                 style = self.app.qapp.style()
                 icon = style.standardIcon(style.SP_DockWidgetCloseButton)
                 close_button = QPushButton(icon, '')
@@ -92,14 +101,12 @@ class CommunityWidget(QWidget, Ui_CommunityWidget):
                 close_button.setStyleSheet('border-style: inset;')
                 self.tabs.tabBar().setTabButton(4, QTabBar.RightSide, close_button)
 
-        action_showinfo.triggered.connect(show_info)
-        self.toolbutton_menu.addAction(action_showinfo)
+        self.action_showinfo.triggered.connect(show_info)
+        self.toolbutton_menu.addAction(self.action_showinfo)
 
-        self.action_publish_uid = QAction(self.tr("Publish UID"), self.toolbutton_menu)
         self.action_publish_uid.triggered.connect(self.publish_uid)
         self.toolbutton_menu.addAction(self.action_publish_uid)
 
-        self.action_revoke_uid = QAction(self.tr("Revoke UID"), self.toolbutton_menu)
         self.action_revoke_uid.triggered.connect(self.revoke_uid)
         self.toolbutton_menu.addAction(self.action_revoke_uid)
 
@@ -393,6 +400,22 @@ The process to join back the community later will have to be done again.""")
                 yield from QAsyncMessageBox.critical(self, self.tr("UID"),
                                                         result[1])
 
+    def retranslateUi(self, widget):
+        """
+        Method to complete translations missing from generated code
+        :param widget:
+        :return:
+        """
+        self.tabs.setTabText(self.tabs.indexOf(self.tab_wot), self.tr(CommunityWidget._tab_wot_label))
+        self.tabs.setTabText(self.tabs.indexOf(self.tab_network), self.tr(CommunityWidget._tab_network_label))
+        self.tabs.setTabText(self.tabs.indexOf(self.tab_informations), self.tr(CommunityWidget._tab_informations_label))
+        self.tabs.setTabText(self.tabs.indexOf(self.tab_history), self.tr(CommunityWidget._tab_history_label))
+        self.tabs.setTabText(self.tabs.indexOf(self.tab_identities), self.tr(CommunityWidget._tab_identities_label))
+        self.action_publish_uid.setText(self.tr(CommunityWidget._action_publish_uid_text))
+        self.action_revoke_uid.setText(self.tr(CommunityWidget._action_revoke_uid_text))
+        self.action_showinfo.setText(self.tr(CommunityWidget._action_showinfo_text))
+        super().retranslateUi(self)
+
     def showEvent(self, QShowEvent):
         """
 
@@ -400,6 +423,7 @@ The process to join back the community later will have to be done again.""")
         :return:
         """
         self.refresh_status()
+        super().showEvent(QShowEvent)
 
     def changeEvent(self, event):
         """
diff --git a/src/sakia/gui/identities_tab.py b/src/sakia/gui/identities_tab.py
index 11a2b2967cc01a2eaae0de69c5f0ce720f82d2b0..9dd2ef5d965f0ffe9d7f7a663b3062ed3b44ac67 100644
--- a/src/sakia/gui/identities_tab.py
+++ b/src/sakia/gui/identities_tab.py
@@ -7,7 +7,7 @@ Created on 2 févr. 2014
 import asyncio
 import logging
 
-from PyQt5.QtCore import Qt, pyqtSignal, QEvent
+from PyQt5.QtCore import Qt, pyqtSignal, QEvent, QT_TRANSLATE_NOOP
 from PyQt5.QtGui import QCursor
 from PyQt5.QtWidgets import QWidget, QAction, QMenu, QDialog, \
                             QAbstractItemView
@@ -33,6 +33,9 @@ class IdentitiesTabWidget(QWidget, Ui_IdentitiesTab):
     view_in_wot = pyqtSignal(Identity)
     money_sent = pyqtSignal()
 
+    _members_action_text = QT_TRANSLATE_NOOP("IdentitiesTabWidget", "Members")
+    _direct_connections_text = QT_TRANSLATE_NOOP("IdentitiesTabWidget", "Direct connections")
+
     def __init__(self, app):
         """
         Init
@@ -47,9 +50,11 @@ class IdentitiesTabWidget(QWidget, Ui_IdentitiesTab):
         self.account = None
         self.password_asker = None
 
+        self.members_action = QAction(self.tr(IdentitiesTabWidget._members_action_text), self)
+        self.direct_connections = QAction(self.tr(IdentitiesTabWidget._direct_connections_text), self)
         self.setupUi(self)
 
-        identities_model = IdentitiesTableModel(self.community)
+        identities_model = IdentitiesTableModel()
         proxy = IdentitiesFilterProxyModel()
         proxy.setSourceModel(identities_model)
         self.table_identities.setModel(proxy)
@@ -60,12 +65,10 @@ class IdentitiesTabWidget(QWidget, Ui_IdentitiesTab):
         identities_model.modelAboutToBeReset.connect(lambda: self.table_identities.setEnabled(False))
         identities_model.modelReset.connect(lambda: self.table_identities.setEnabled(True))
 
-        members_action = QAction(self.tr("Members"), self)
-        members_action.triggered.connect(self._async_search_members)
-        self.button_search.addAction(members_action)
-        direct_connections = QAction(self.tr("Direct connections"), self)
-        direct_connections.triggered.connect(self._async_search_direct_connections)
-        self.button_search.addAction(direct_connections)
+        self.members_action.triggered.connect(self._async_search_members)
+        self.button_search.addAction(self.members_action)
+        self.direct_connections.triggered.connect(self._async_search_direct_connections)
+        self.button_search.addAction(self.direct_connections)
         self.button_search.clicked.connect(self._async_execute_search_text)
 
         self.busy = Busy(self.table_identities)
@@ -286,6 +289,10 @@ class IdentitiesTabWidget(QWidget, Ui_IdentitiesTab):
         yield from self.table_identities.model().sourceModel().refresh_identities(identities)
         self.table_identities.resizeColumnsToContents()
 
+    def retranslateUi(self, widget):
+        self.members_action.setText(self.tr(IdentitiesTabWidget._members_action_text))
+        self.direct_connections.setText(self.tr(IdentitiesTabWidget._direct_connections_text))
+
     def resizeEvent(self, event):
         self.busy.resize(event.size())
         super().resizeEvent(event)
diff --git a/src/sakia/gui/network_tab.py b/src/sakia/gui/network_tab.py
index 417c1e06ef0c4037e1eeadcc6158bdb9ce973890..a7e020dd033fd0f8404ff23155a45c4ed3a6f735 100644
--- a/src/sakia/gui/network_tab.py
+++ b/src/sakia/gui/network_tab.py
@@ -34,7 +34,7 @@ class NetworkTabWidget(QWidget, Ui_NetworkTabWidget):
 
         self.setupUi(self)
         model = NetworkTableModel(self.community)
-        proxy = NetworkFilterProxyModel(self)
+        proxy = NetworkFilterProxyModel()
         proxy.setSourceModel(model)
         self.table_network.setModel(proxy)
         self.table_network.sortByColumn(2, Qt.DescendingOrder)
diff --git a/src/sakia/gui/wot_tab.py b/src/sakia/gui/wot_tab.py
index ef7e3528c4f5b9174cf4acfea0c98ef8bebae99b..e51c902d444f9afc77e4eeae7ff6b3a4f4f1b934 100644
--- a/src/sakia/gui/wot_tab.py
+++ b/src/sakia/gui/wot_tab.py
@@ -1,10 +1,8 @@
-# -*- coding: utf-8 -*-
-
 import logging
 import asyncio
 
 from PyQt5.QtWidgets import QWidget, QComboBox, QDialog
-from PyQt5.QtCore import pyqtSlot, QEvent, QLocale, QDateTime, pyqtSignal
+from PyQt5.QtCore import pyqtSlot, QEvent, QLocale, QDateTime, pyqtSignal, QT_TRANSLATE_NOOP
 from ucoinpy.api import bma
 
 from ..tools.exceptions import MembershipNotFoundError
@@ -24,6 +22,7 @@ from ..tools.exceptions import NoPeerAvailable
 class WotTabWidget(QWidget, Ui_WotTabWidget):
 
     money_sent = pyqtSignal()
+    _search_placeholder = QT_TRANSLATE_NOOP("WotTabWidget", "Research a pubkey, an uid...")
 
     def __init__(self, app):
         """
@@ -34,7 +33,7 @@ class WotTabWidget(QWidget, Ui_WotTabWidget):
         self.setupUi(self)
 
         # Default text when combo lineEdit is empty
-        self.comboBoxSearch.lineEdit().setPlaceholderText(self.tr('Research a pubkey, an uid...'))
+        self.comboBoxSearch.lineEdit().setPlaceholderText(self.tr(WotTabWidget._search_placeholder))
         #  add combobox events
         self.comboBoxSearch.lineEdit().returnPressed.connect(self.search)
         # To fix a recall of the same item with different case,
@@ -360,6 +359,13 @@ class WotTabWidget(QWidget, Ui_WotTabWidget):
         if result == QDialog.Accepted:
             self.window().refresh_contacts()
 
+    def retranslateUi(self, widget):
+        """
+        Retranslate missing widgets from generated code
+        """
+        self.comboBoxSearch.lineEdit().setPlaceholderText(self.tr(WotTabWidget._search_placeholder))
+        super().retranslateUi(self)
+
     def resizeEvent(self, event):
         self.busy.resize(event.size())
         super().resizeEvent(event)
diff --git a/src/sakia/models/identities.py b/src/sakia/models/identities.py
index cfabfbb4b734667d9b00dbb8c10f040f3929bcdd..6cc3b60efb524ca6400f8a32482ece94ebfa55dd 100644
--- a/src/sakia/models/identities.py
+++ b/src/sakia/models/identities.py
@@ -4,11 +4,9 @@ Created on 5 févr. 2014
 @author: inso
 """
 
-from ..core.net.api import bma as bma
 from ..tools.exceptions import NoPeerAvailable, MembershipNotFoundError
-from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task
 from PyQt5.QtCore import QAbstractTableModel, QSortFilterProxyModel, Qt, \
-                        QDateTime, QModelIndex, QLocale
+                        QDateTime, QModelIndex, QLocale, QEvent
 from PyQt5.QtGui import QColor
 import logging
 import asyncio
@@ -87,12 +85,12 @@ class IdentitiesTableModel(QAbstractTableModel):
         """
         super().__init__(parent)
         self.community = None
-        self.columns_titles = {'uid': self.tr('UID'),
-                               'pubkey': self.tr('Pubkey'),
-                               'renewed': self.tr('Renewed'),
-                               'expiration': self.tr('Expiration'),
-                               'publication': self.tr('Publication'),
-                               'validation': self.tr('Validation'),}
+        self.columns_titles = {'uid': lambda: self.tr('UID'),
+                               'pubkey': lambda: self.tr('Pubkey'),
+                               'renewed': lambda: self.tr('Renewed'),
+                               'expiration': lambda: self.tr('Expiration'),
+                               'publication': lambda: self.tr('Publication'),
+                               'validation': lambda: self.tr('Validation'),}
         self.columns_ids = ('uid', 'pubkey', 'renewed', 'expiration', 'publication')
         self.identities_data = []
         self._sig_validity = 0
@@ -165,7 +163,7 @@ class IdentitiesTableModel(QAbstractTableModel):
     def headerData(self, section, orientation, role):
         if role == Qt.DisplayRole:
             col_id = self.columns_ids[section]
-            return self.columns_titles[col_id]
+            return self.columns_titles[col_id]()
 
     def data(self, index, role):
         if role == Qt.DisplayRole:
diff --git a/src/sakia/models/network.py b/src/sakia/models/network.py
index 20a6e7872ee1e67dfec620063209c88333569b84..b2a39de1a640c33e697c3d0156881ead5c9a9db2 100644
--- a/src/sakia/models/network.py
+++ b/src/sakia/models/network.py
@@ -132,10 +132,10 @@ class NetworkTableModel(QAbstractTableModel):
             Node.CORRUPTED: QColor(Qt.lightGray)
         }
         self.node_states = {
-            Node.ONLINE: self.tr('Online'),
-            Node.OFFLINE: self.tr('Offline'),
-            Node.DESYNCED: self.tr('Unsynchronized'),
-            Node.CORRUPTED: self.tr('Corrupted')
+            Node.ONLINE: lambda: self.tr('Online'),
+            Node.OFFLINE: lambda: self.tr('Offline'),
+            Node.DESYNCED: lambda: self.tr('Unsynchronized'),
+            Node.CORRUPTED: lambda: self.tr('Corrupted')
         }
         self.nodes_data = []
 
@@ -214,7 +214,7 @@ class NetworkTableModel(QAbstractTableModel):
         if role == Qt.BackgroundColorRole:
             return self.node_colors[node[self.columns_types.index('state')]]
         if role == Qt.ToolTipRole:
-            return self.node_states[node[self.columns_types.index('state')]]
+            return self.node_states[node[self.columns_types.index('state')]]()
 
         return QVariant()
 
diff --git a/src/sakia/models/txhistory.py b/src/sakia/models/txhistory.py
index de5d3adc44113296f1768ab9bfbfe45eb8da3b6e..7285a72ae91d775c417202983724c75d7919c92a 100644
--- a/src/sakia/models/txhistory.py
+++ b/src/sakia/models/txhistory.py
@@ -204,15 +204,15 @@ class HistoryTableModel(QAbstractTableModel):
         )
 
         self.column_headers = (
-            self.tr('Date'),
-            self.tr('UID/Public key'),
-            self.tr('Payment'),
-            self.tr('Deposit'),
-            self.tr('Comment'),
-            'State',
-            'TXID',
-            'Pubkey',
-            'Block Number'
+            lambda: self.tr('Date'),
+            lambda: self.tr('UID/Public key'),
+            lambda: self.tr('Payment'),
+            lambda: self.tr('Deposit'),
+            lambda: self.tr('Comment'),
+            lambda: 'State',
+            lambda: 'TXID',
+            lambda: 'Pubkey',
+            lambda: 'Block Number'
         )
 
     def change_account(self, account):
@@ -337,11 +337,11 @@ class HistoryTableModel(QAbstractTableModel):
             if role == Qt.DisplayRole:
                 if self.columns_types[section] == 'payment' or self.columns_types[section] == 'deposit':
                     return '{:}\n({:})'.format(
-                        self.column_headers[section],
+                        self.column_headers[section](),
                         self.account.current_ref.diff_units(self.community.short_currency)
                     )
 
-                return self.column_headers[section]
+                return self.column_headers[section]()
 
     def data(self, index, role):
         row = index.row()