diff --git a/i18nviews.info b/i18nviews.info
index f9d8fbe..9cd83d0 100644
--- a/i18nviews.info
+++ b/i18nviews.info
@@ -19,10 +19,12 @@ files[] = includes/i18nviews_handler_field_taxonomy_term_description.inc
 files[] = includes/i18nviews_handler_field_taxonomy_term_language.inc
 files[] = includes/i18nviews_handler_field_taxonomy_term_name.inc
 files[] = includes/i18nviews_handler_field_term_node_tid.inc
+files[] = includes/i18nviews_handler_field_node_type.inc
 files[] = includes/i18nviews_handler_filter_field_list.inc
 files[] = includes/i18nviews_handler_filter_taxonomy_index_tid.inc
 files[] = includes/i18nviews_handler_filter_taxonomy_term_name.inc
 files[] = includes/i18nviews_handler_filter_taxonomy_term_language.inc
 files[] = includes/i18nviews_handler_filter_term_node_tid_depth.inc
+files[] = includes/i18nviews_handler_filter_node_type.inc
 files[] = includes/i18nviews_plugin_argument_validate_i18n_taxonomy_term.inc
 files[] = includes/i18nviews_plugin_localization_i18nstrings.inc
diff --git a/includes/i18nviews.views.inc b/includes/i18nviews.views.inc
index 364687a..8be3aef 100644
--- a/includes/i18nviews.views.inc
+++ b/includes/i18nviews.views.inc
@@ -7,6 +7,10 @@ function i18nviews_views_data_alter(&$data) {
   if (module_exists('i18n_taxonomy')) {
     i18nviews_views_data_alter_i18n_taxonomy($data);
   }
+
+  if (module_exists('i18n_node')) {
+    i18nviews_views_data_alter_i18n_node($data);
+  }
 }
 
 /**
@@ -165,6 +169,11 @@ function i18nviews_views_data_alter_i18n_taxonomy(&$data) {
   */
 }
 
+function i18nviews_views_data_alter_i18n_node(&$data) {
+  $data['node']['type']['field']['handler'] = 'i18nviews_handler_field_node_type';
+  $data['node']['type']['filter']['handler'] = 'i18nviews_handler_filter_node_type';
+}
+
 /**
  * Implementation of hook_field_views_data_alter().
  */
diff --git a/includes/i18nviews_handler_field_node_type.inc b/includes/i18nviews_handler_field_node_type.inc
new file mode 100644
index 0000000..ec9c602
--- /dev/null
+++ b/includes/i18nviews_handler_field_node_type.inc
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @file
+ * Definition of i18nviews_handler_field_node_type.
+ */
+
+/**
+ * Field handler to translate a node type into its readable form.
+ *
+ * @ingroup views_field_handlers
+ */
+class i18nviews_handler_field_node_type extends views_handler_field_node_type {
+  /**
+    * Render node type as human readable name, unless using machine_name option.
+    */
+  function render_name($data, $values) {
+    if ($this->options['machine_name'] != 1 && $data !== NULL && $data !== '') {
+     return $this->sanitize_value(i18n_node_type_name($data, node_type_get_name($data)));
+    }
+    return $this->sanitize_value($data);
+  }
+}
diff --git a/includes/i18nviews_handler_filter_node_type.inc b/includes/i18nviews_handler_filter_node_type.inc
new file mode 100644
index 0000000..8005921
--- /dev/null
+++ b/includes/i18nviews_handler_filter_node_type.inc
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @file
+ * Definition of i18views_handler_filter_node_type.
+ *
+ * This is a copy of views_handler_filter_node_type but replaces a call to t()
+ * with the proper i18n_node_type_name().
+ */
+
+/**
+ * Filter by node type.
+ *
+ * @ingroup views_filter_handlers
+ */
+class i18nviews_handler_filter_node_type extends views_handler_filter_in_operator {
+  function get_value_options() {
+    if (!isset($this->value_options)) {
+      $this->value_title = t('Content types');
+      $types = node_type_get_types();
+      $options = array();
+      foreach ($types as $type => $info) {
+        $options[$type] = i18n_node_type_name($type, $info->name);
+      }
+      asort($options);
+      $this->value_options = $options;
+    }
+  }
+}
