diff --git a/manifests/site.pp b/manifests/site.pp
index fd62719869..acaf468658 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -944,11 +944,36 @@ node 'ask-staging.openstack.org' {
   }
 }
 
+# Node-OS: trusty
+node 'translate.openstack.org' {
+  class { 'openstack_project::server':
+    iptables_public_tcp_ports => [80, 443],
+    sysadmins                 => hiera('sysadmins', []),
+  }
+  class { 'openstack_project::translate':
+    admin_users             => 'camunoz,cboylan,daisyycguo,infra,jaegerandi,lyz,mordred,stevenk',
+    openid_url              => 'https://openstackid.org',
+    listeners               => ['ajp'],
+    from_address            => 'noreply@openstack.org',
+    mysql_host              => hiera('translate_mysql_host', 'localhost'),
+    mysql_password          => hiera('translate_mysql_password', 'XXX'),
+    zanata_server_user      => hiera('proposal_zanata_user', 'XXX'),
+    zanata_server_api_key   => hiera('proposal_zanata_api_key', 'XXX'),
+    zanata_wildfly_version  => '9.0.1',
+    zanata_url              => 'https://sourceforge.net/projects/zanata/files/webapp/zanata-war-3.7.1.war',
+    zanata_checksum         => 'b741fac8cf7d11c9b15189e6899051eb',
+    project_config_repo     => 'https://git.openstack.org/openstack-infra/project-config',
+    ssl_cert_file_contents  => hiera('translate_ssl_cert_file_contents', 'XXX'),
+    ssl_key_file_contents   => hiera('translate_ssl_key_file_contents', 'XXX'),
+    ssl_chain_file_contents => hiera('translate_ssl_chain_file_contents', 'XXX'),
+  }
+}
+
 # Node-OS: trusty
 node 'translate-dev.openstack.org' {
   class { 'openstack_project::translate_dev':
     sysadmins               => hiera('sysadmins', []),
-    admin_users             => 'camunoz,daisyycguo,infra,jaegerandi,lyz,stevenk',
+    admin_users             => 'camunoz,cboylan,daisyycguo,infra,jaegerandi,lyz,mordred,stevenk',
     openid_url              => 'https://openstackid.org',
     listeners               => ['ajp'],
     from_address            => 'noreply@openstack.org',
diff --git a/modules/openstack_project/manifests/translate.pp b/modules/openstack_project/manifests/translate.pp
new file mode 100644
index 0000000000..ad0b139445
--- /dev/null
+++ b/modules/openstack_project/manifests/translate.pp
@@ -0,0 +1,128 @@
+# Copyright 2015 Hewlett-Packard Development Company, L.P.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# == Class: openstack_project::translate
+#
+class openstack_project::translate(
+  $mysql_host = 'localhost',
+  $mysql_port = '3306',
+  $mysql_user = 'zanata',
+  $mysql_password,
+  $admin_users = '',
+  $zanata_server_user = '',
+  $zanata_server_api_key = '',
+  $zanata_wildfly_version = '',
+  $zanata_url = '',
+  $zanata_checksum = '',
+  $project_config_repo = '',
+  $openid_url = '',
+  $vhost_name = $::fqdn,
+  $ssl_cert_file = "/etc/ssl/certs/${::fqdn}.pem",
+  $ssl_key_file = "/etc/ssl/private/${::fqdn}.key",
+  $ssl_chain_file = '/etc/ssl/certs/intermediate.pem',
+  $ssl_cert_file_contents = '', # If left empty puppet will not create file.
+  $ssl_key_file_contents = '', # If left empty puppet will not create file.
+  $ssl_chain_file_contents = '', # If left empty puppet will not create file.
+  $listeners = [],
+  $from_address,
+  ) {
+
+  class { 'project_config':
+    url  => $project_config_repo,
+  }
+
+  class { '::zanata':
+    mysql_host                  => $mysql_host,
+    mysql_port                  => $mysql_port,
+    zanata_db_username          => $mysql_user,
+    zanata_db_password          => $mysql_password,
+    zanata_openid_provider_url  => $openid_url,
+    zanata_listeners            => $listeners,
+    zanata_admin_users          => $admin_users,
+    zanata_default_from_address => $from_address,
+    zanata_wildfly_version      => $wildfly_version,
+    zanata_url                  => $zanata_url,
+    zanata_checksum             => $zanata_checksum,
+  }
+
+  class { '::zanata::apache':
+    vhost_name              => $vhost_name,
+    ssl_cert_file           => $ssl_cert_file,
+    ssl_key_file            => $ssl_key_file,
+    ssl_chain_file          => $ssl_chain_file,
+    ssl_cert_file_contents  => $ssl_cert_file_contents,
+    ssl_key_file_contents   => $ssl_key_file_contents,
+    ssl_chain_file_contents => $ssl_chain_file_contents,
+    require                 => Class['::zanata']
+  }
+
+  include logrotate
+  logrotate::file { 'console.log':
+    log     => '/var/log/wildfly/console.log',
+    options => [
+                'daily',
+                'rotate 30',
+                'missingok',
+                'dateext',
+                'copytruncate',
+                'compress',
+                'delaycompress',
+                'notifempty',
+                'maxage 30',
+                ],
+    require => Service['wildfly'],
+  }
+
+  file { '/home/wildfly/projects.yaml':
+    ensure  => present,
+    owner   => 'wildfly',
+    group   => 'wildfly',
+    mode    => '0444',
+    source  => $::project_config::jeepyb_project_file,
+    replace => true,
+    require => User['wildfly'],
+  }
+
+  include jeepyb
+  exec { 'register-zanata-projects':
+    command     => '/usr/local/bin/register-zanata-projects -v -l /var/log/register-zanata-projects.log',
+    timeout     => 900, # 15 minutes
+    subscribe   => File['/home/wildfly/projects.yaml'],
+    refreshonly => true,
+    logoutput   => true,
+    environment => [
+        "PROJECTS_YAML=/home/wildfly/projects.yaml",
+        "ZANATA_URL=https://${vhost_name}/",
+        "ZANATA_USER=${zanata_server_user}",
+        "ZANATA_KEY=${zanata_server_api_key}",
+    ],
+    require     => [
+        File['/home/wildfly/projects.yaml'],
+        Class['jeepyb'],
+      ],
+  }
+
+  logrotate::file { 'register-zanata-projects.log':
+    log     => '/var/log/register-zanata-projects.log',
+    options => [
+      'compress',
+      'missingok',
+      'rotate 30',
+      'daily',
+      'notifempty',
+      'copytruncate',
+    ],
+    require => Exec['register-zanata-projects'],
+  }
+}