diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedFunctionButton.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedFunctionButton.qml
index 3f2956c93a0352b9716ebfc0ace19c42becd3014..b943e395d39f37e6da8eb299121f250a23752f40 100644
--- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedFunctionButton.qml
+++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedFunctionButton.qml
@@ -11,8 +11,12 @@ AnimatedToolButton {
     function setIcon() {
         if (backendValue == null)
             extendedFunctionButton.iconFromFile = "images/placeholder.png"
-        else if (backendValue.isBound) {
-            extendedFunctionButton.iconFromFile = "images/expression.png"
+        else if (backendValue.isBound ) {
+            if (backendValue.isTranslated) { //translations are a special case
+                extendedFunctionButton.iconFromFile = "images/placeholder.png"
+            } else {
+                extendedFunctionButton.iconFromFile = "images/expression.png"
+            }
         } else {
             if (backendValue.complexNode != null && backendValue.complexNode.exists) {
                 extendedFunctionButton.iconFromFile = "images/behaivour.png"
@@ -26,11 +30,16 @@ AnimatedToolButton {
         setIcon();
     }
     property bool isBoundBackend: backendValue.isBound;
+    property string backendExpression: backendValue.expression;
 
     onIsBoundBackendChanged: {
         setIcon();
     }
 
+    onBackendExpressionChanged: {
+        setIcon();
+    }
+
     toolButtonStyle: "Qt::ToolButtonIconOnly"
     popupMode: "QToolButton::InstantPopup";
     property bool active: false;
diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/LineEdit.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/LineEdit.qml
index e1bb4c72384a8f8ff60ad5a0cd294fdc343f18fc..0909caf84663f7075c8e90c9736e26b4172d4d3d 100644
--- a/share/qtcreator/qmldesigner/propertyeditor/Qt/LineEdit.qml
+++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/LineEdit.qml
@@ -9,6 +9,7 @@ QWidget {
     property variant baseStateFlag
     property alias text: lineEditWidget.text
     property alias readOnly: lineEditWidget.readOnly
+    property alias translation: trCheckbox.visible
 
     minimumHeight: 24;
 
@@ -68,7 +69,11 @@ QWidget {
         }
 
         onEditingFinished: {
-            backendValue.value = text
+            if (backendValue.isTranslated) {
+                backendValue.expression = "qsTr(\"" + text + "\")"
+            } else {
+                backendValue.value = text
+            }
             evaluate();
         }
 
@@ -87,4 +92,30 @@ QWidget {
         x: 0
         visible: lineEdit.enabled
     }
+    QCheckBox {
+        id: trCheckbox
+        y: 2
+        styleSheetFile: "checkbox_tr.css";
+        toolTip: qsTr("Translate this string")
+        x: lineEditWidget.width - 22
+        height: lineEdit.height - 2;
+        width: 24
+        visible: false
+        checked: backendValue.isTranslated
+        onToggled: {
+            if (trCheckbox.checked) {
+                backendValue.expression = "qsTr(\"" + lineEditWidget.text + "\")"
+            } else {
+                backendValue.value = lineEditWidget.text
+            }
+            evaluate();
+        }
+
+        onVisibleChanged: {
+            if (trCheckbox.visible) {
+                trCheckbox.raise();
+                lineEditWidget.styleSheet =  "QLineEdit { padding-left: 32; padding-right: 62;}"
+            }
+        }
+    }
 }
diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextGroupBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextGroupBox.qml
index 1662a2419e2c1e083e5cb170977815ff19a7361a..3f29936cbfbf3236524dd3fdedc3f6c4e32b5e0c 100644
--- a/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextGroupBox.qml
+++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextGroupBox.qml
@@ -18,6 +18,7 @@ GroupBox {
                 LineEdit {
                     backendValue: backendValues.text
                     baseStateFlag: isBaseState;
+                    translation: true
                 }
             }
         }
diff --git a/src/libs/qmleditorwidgets/images/checkbox_tr_checked.png b/src/libs/qmleditorwidgets/images/checkbox_tr_checked.png
new file mode 100644
index 0000000000000000000000000000000000000000..af0cedd9765432aecf1bd77f13f7c4816232f285
Binary files /dev/null and b/src/libs/qmleditorwidgets/images/checkbox_tr_checked.png differ
diff --git a/src/libs/qmleditorwidgets/images/checkbox_tr_checked_hover.png b/src/libs/qmleditorwidgets/images/checkbox_tr_checked_hover.png
new file mode 100644
index 0000000000000000000000000000000000000000..5815357d255b688d6a6aba88f83178421473a9c8
Binary files /dev/null and b/src/libs/qmleditorwidgets/images/checkbox_tr_checked_hover.png differ
diff --git a/src/libs/qmleditorwidgets/images/checkbox_tr_checked_pressed.png b/src/libs/qmleditorwidgets/images/checkbox_tr_checked_pressed.png
new file mode 100644
index 0000000000000000000000000000000000000000..b4a3be55c3376e2fa0c3245821ff2d52adc9ff6c
Binary files /dev/null and b/src/libs/qmleditorwidgets/images/checkbox_tr_checked_pressed.png differ
diff --git a/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked.png b/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked.png
new file mode 100644
index 0000000000000000000000000000000000000000..528d1f9afe41d92642eb9ae65c63f6b01b812c58
Binary files /dev/null and b/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked.png differ
diff --git a/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked_hover.png b/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked_hover.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d038b0e6dab4b6291d0087af24e1a548a40ce70
Binary files /dev/null and b/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked_hover.png differ
diff --git a/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked_pressed.png b/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked_pressed.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b731b2e98e127bbfb85b2563136c3eb78c82c8d
Binary files /dev/null and b/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked_pressed.png differ
diff --git a/src/libs/qmleditorwidgets/resources.qrc b/src/libs/qmleditorwidgets/resources.qrc
index ee4949f2dc2ee3c51e321a58664ce5944ac58f1d..16575214fc0b2d4b398fcacdc6c2e460ad618f1f 100644
--- a/src/libs/qmleditorwidgets/resources.qrc
+++ b/src/libs/qmleditorwidgets/resources.qrc
@@ -6,6 +6,12 @@
         <file>images/checkbox_unchecked.png</file>
         <file>images/checkbox_unchecked_hover.png</file>
         <file>images/checkbox_unchecked_pressed.png</file>
+        <file>images/checkbox_tr_checked.png</file>
+        <file>images/checkbox_tr_checked_hover.png</file>
+        <file>images/checkbox_tr_checked_pressed.png</file>
+        <file>images/checkbox_tr_unchecked.png</file>
+        <file>images/checkbox_tr_unchecked_hover.png</file>
+        <file>images/checkbox_tr_unchecked_pressed.png</file>
         <file>images/eye_open.png</file>
         <file>images/eye_crossed.png</file>
         <file>images/lock.png</file>
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp
index 2ac8ce14900cdb2b00b93318090ed031840e6e9f..a6d7019858ff48408836428f2070470a38da36c3 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp
@@ -31,6 +31,7 @@
 **************************************************************************/
 
 #include "propertyeditorvalue.h"
+#include <QRegExp>
 #include <abstractview.h>
 #include <nodeabstractproperty.h>
 #include <nodeproperty.h>
@@ -97,7 +98,7 @@ static bool cleverColorCompare(QVariant value1, QVariant value2)
 
 void PropertyEditorValue::setValueWithEmit(const QVariant &value)
 {
-    if (m_value != value) {
+    if (m_value != value || isBound()) {
         QVariant newValue = value;
         if (modelNode().isValid() && modelNode().metaInfo().isValid() && modelNode().metaInfo().hasProperty(name()))
             if (modelNode().metaInfo().propertyTypeName(name()) == QLatin1String("QUrl")) {
@@ -190,6 +191,22 @@ void PropertyEditorValue::setIsValid(bool valid)
     m_isValid = valid;
 }
 
+bool PropertyEditorValue::isTranslated() const
+{
+    if (modelNode().isValid() && modelNode().metaInfo().isValid() && modelNode().metaInfo().hasProperty(name()))
+        if (modelNode().metaInfo().propertyTypeName(name()) == QLatin1String("QString") || modelNode().metaInfo().propertyTypeName(name()) == QLatin1String("string")) {
+            const QmlDesigner::QmlObjectNode objectNode(modelNode());
+            if (objectNode.isValid() && objectNode.hasBindingProperty(name())) {
+                //qsTr()
+                QRegExp rx("qsTr(\"*\")");
+                rx.setPatternSyntax(QRegExp::Wildcard);
+                return rx.exactMatch(expression());
+            }
+            return false;
+        }
+    return false;
+}
+
 QmlDesigner::ModelNode PropertyEditorValue::modelNode() const
 {
     return m_modelNode;
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h
index ac4a35227317ce5e14e0ff8a95ccf99009f38e12..a9bd25cd99faa72586a3f47851c73ff9fc69a541 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h
@@ -86,6 +86,8 @@ class PropertyEditorValue : public QObject
     Q_PROPERTY(bool isInSubState READ isInSubState NOTIFY valueChangedQml FINAL)
     Q_PROPERTY(bool isBound READ isBound NOTIFY isBoundChanged FINAL)
     Q_PROPERTY(bool isValid READ isValid NOTIFY isValidChanged FINAL)
+    Q_PROPERTY(bool isTranslated READ isTranslated NOTIFY valueChangedQml FINAL)
+
     Q_PROPERTY(QString name READ name FINAL)
     Q_PROPERTY(PropertyEditorNodeWrapper* complexNode READ complexNode NOTIFY complexNodeChanged FINAL)
 
@@ -109,6 +111,8 @@ public:
 
     void setIsValid(bool valid);
 
+    bool isTranslated() const;
+
     QString name() const;
     void setName(const QString &name);