diff --git modules/product/commerce_product.info modules/product/commerce_product.info
index c7003db..f4cd802 100644
--- modules/product/commerce_product.info
+++ modules/product/commerce_product.info
@@ -21,3 +21,9 @@ files[] = includes/views/handlers/commerce_product_handler_field_product_operati
 
 ; Simple tests
 files[] = tests/commerce_product.test
+
+; Translation handler
+files[] = includes/translation.handler.commerce_product.inc
diff --git modules/product/commerce_product_ui.module modules/product/commerce_product_ui.module
index 72e130d..4bde536 100644
--- modules/product/commerce_product_ui.module
+++ modules/product/commerce_product_ui.module
@@ -431,6 +431,18 @@ function commerce_product_ui_form_commerce_product_ui_product_form_alter(&$form,
   // Add a submit handler to the save button to add a redirect.
   $form['actions']['submit']['#submit'][] = 'commerce_product_ui_product_form_submit';
 
+  // If translation support is enabled - provide the suitable languages
+  if (module_invoke('translation', 'enabled', 'commerce_product')) {
+    $form['language'] = array(
+      '#type' => 'select',
+      '#title' => t('Language'),
+      '#default_value' => (isset($form_state['commerce_product']->language) ? $form_state['commerce_product']->language : ''),
+      '#options' => array(LANGUAGE_NONE => t('Language neutral')) + locale_language_list('name'),
+      '#weight' => -10,
+    );
+    array_unshift($form['actions']['submit']['#submit'], 'commerce_product_ui_product_form_translation_processing');
+  }
+
   // Add the save and continue button for new products.
   if (empty($form_state['commerce_product']->product_id)) {
     $form['actions']['save_continue'] = array(
@@ -452,6 +464,7 @@ function commerce_product_ui_form_commerce_product_ui_product_form_alter(&$form,
  * @see commerce_product_ui_form_commerce_product_ui_product_form_alter()
  */
 function commerce_product_ui_product_form_submit($form, &$form_state) {
+
   // Set the redirect based on the button clicked.
   if ($form_state['clicked_button']['#parents'][0] == 'save_continue') {
     $form_state['redirect'] = 'admin/commerce/products/add/' . strtr($form_state['commerce_product']->type, array('_' => '-'));
@@ -462,6 +475,33 @@ function commerce_product_ui_product_form_submit($form, &$form_state) {
 }
 
 /**
+ * Special submit callback for commerce_product_ui_product_form().
+ *
+ * Checks if translation is enabled and handle possible language changes.
+ * Enter description here ...
+ */
+function commerce_product_ui_product_form_translation_processing($form, &$form_state) {
+  // If translation support is enabled - make sure language changes are handled.
+  if (module_invoke('translation', 'enabled', 'commerce_product')) {
+    $available_languages = field_content_languages();
+    list(, , $bundle) = entity_extract_ids('commerce_product', $form_state['commerce_product']);
+
+    foreach (field_info_instances('commerce_product', $bundle) as $instance) {
+      $field_name = $instance['field_name'];
+      $field = field_info_field($field_name);
+      $previous_language = $form[$field_name]['#language'];
+
+      // Handle a possible language change: new language values are inserted,
+      // previous ones are deleted.
+      if ($field['translatable'] && $previous_language != $form_state['values']['language']) {
+        $form_state['values'][$field_name][$form_state['values']['language']] = $form_state['commerce_product']->{$field_name}[$previous_language];
+        $form_state['values'][$field_name][$previous_language] = array();
+      }
+    }
+  }
+}
+
+/**
  * Implements hook_form_FORM_ID_alter().
  *
  * The Product UI module instantiates the Product delete form at a particular
@@ -516,3 +556,26 @@ function commerce_product_ui_set_breadcrumb($product_types = FALSE) {
 
   drupal_set_breadcrumb($breadcrumb);
 }
+
+/**
+ * Implements hook_translation_info().
+ *
+ * Translation handler is already registered in the commerce_product module.
+ * @see includes/translation.handler.commerce_product.inc
+ */
+function commerce_product_translation_info($types = NULL) {
+  $info = array();
+
+  $info['commerce_product'] = array(
+    'translation' => array(
+      'translation' => array(
+        'class' => 'TranslationCommerceProductHandler',
+        'path' => 'admin/commerce/products/%commerce_product',
+        'access callback' => 'commerce_product_access',
+        'access arguments' => array('update', 3),
+        'edit form' => TRUE,
+      ),
+    ),
+  );
+  return $info;
+}
diff --git modules/product/includes/commerce_product.controller.inc modules/product/includes/commerce_product.controller.inc
index 5e689e7..eef3750 100644
--- modules/product/includes/commerce_product.controller.inc
+++ modules/product/includes/commerce_product.controller.inc
@@ -32,6 +32,7 @@ class CommerceProductEntityController extends DrupalDefaultEntityController {
       'status' => 1,
       'created' => '',
       'changed' => '',
+      'language' => LANGUAGE_NONE,
     );
   }
 
diff --git modules/product/includes/commerce_product.forms.inc modules/product/includes/commerce_product.forms.inc
index 9f80853..64cb631 100644
--- modules/product/includes/commerce_product.forms.inc
+++ modules/product/includes/commerce_product.forms.inc
@@ -41,7 +41,7 @@ function commerce_product_product_form($form, &$form_state, $product) {
 
   // Add the field related form elements.
   $form_state['commerce_product'] = $product;
-  field_attach_form('commerce_product', $product, $form, $form_state);
+  field_attach_form('commerce_product', $product, $form, $form_state, $product->language);
 
   $form['status'] = array(
     '#type' => 'radios',
@@ -62,6 +62,12 @@ function commerce_product_product_form($form, &$form_state, $product) {
     '#weight' => 40,
   );
 
+  // Simply use default language
+  $form['language'] = array(
+    '#type' => 'value',
+    '#value' => $product->language,
+  );
+
   // We add the form's #submit array to this button along with the actual submit
   // handler to preserve any submit handlers added by a form callback_wrapper.
   $submit = array();
@@ -128,6 +134,7 @@ function commerce_product_product_form_submit($form, &$form_state) {
   $product->sku = $form_state['values']['sku'];
   $product->title = $form_state['values']['title'];
   $product->status = $form_state['values']['status'];
+  $product->language = $form_state['values']['language'];
 
   // Set the product's uid if it's being created at this time.
   if (empty($product->product_id)) {
diff --git modules/product/includes/translation.handler.commerce_product.inc modules/product/includes/translation.handler.commerce_product.inc
new file mode 100644
index 0000000..a07312c
--- /dev/null
+++ modules/product/includes/translation.handler.commerce_product.inc
@@ -0,0 +1,47 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Commerce product translation handler for the translation module.
+ */
+
+
+/**
+ * Commerce product translation handler.
+ *
+ * Override the default behaviours to provide the needed commerce product
+ * properties.
+ *
+ * This class is registered in the commerce_product_ui.module. If you want to
+ * use it without the commerce_product_ui.module make sure you register it
+ * on your own by using hook_translation_info().
+ * @see hook_translation_info()
+ * @see commerce_product_ui.module
+ */
+class TranslationCommerceProductHandler extends TranslationDefaultHandler {
+
+  public function __construct($entity_type, $entity_info, $entity, $entity_id) {
+    parent::__construct('commerce_product', $entity_info, $entity, $entity_id);
+  }
+
+  public function isRevision() {
+    return !empty($this->entity->revision);
+  }
+
+  public function getHumanReadableId() {
+    return $this->entity->title;
+  }
+
+  public function getLanguage() {
+    return $this->entity->language;
+  }
+
+  public function getAccess($op) {
+    return commerce_product_access($op, $this->entity);
+  }
+
+  protected function getStatus() {
+    return (boolean) $this->entity->status;
+  }
+}