{"id":25291,"date":"2016-10-10T12:24:14","date_gmt":"2016-10-10T12:24:14","guid":{"rendered":"https:\/\/dev.railscarma.com\/make-rails-application-multilingual\/"},"modified":"2022-09-06T08:22:58","modified_gmt":"2022-09-06T08:22:58","slug":"rendre-lapplication-rails-multilingue","status":"publish","type":"post","link":"https:\/\/www.railscarma.com\/fr\/blog\/articles-techniques\/rendre-lapplication-rails-multilingue\/","title":{"rendered":"How to make your Rails Application Multilingual"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"25291\" class=\"elementor elementor-25291\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6de2d749 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6de2d749\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1434b12f\" data-id=\"1434b12f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-77cf116d elementor-widget elementor-widget-text-editor\" data-id=\"77cf116d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Rails gem approach, MySQL approach and a Multilingual Rails structure<\/h3>\n<p>Most of the world doesn&#8217;t speak English. That&#8217;s where internationalization and localization come in. Rails has a great i18n API.<br>R\u00e9f\u00e9rence:<a href=\"http:\/\/guides.rubyonrails.org\/i18n.html\"> http:\/\/guides.rubyonrails.org\/i18n.html<\/a><\/p>\n<p>It provides an easy-to-use and extensible framework for translating your application to a single custom language other than English or for providing multi-language support in our application.<\/p>\n<p><strong>I18n API:<\/strong><br>The most important methods of the I18n API are:<br>translate # Lookup text translations<br>localize # Localize Date and Time objects to local formats<\/p>\n<p>These have the aliases #t and #l so you can use them like this:<\/p>\n<pre><code>I18n.t 'app.title'\nI18n.l Time.now<\/code><\/pre>\n<p><strong>Rails-i18n gem:<\/strong><br><strong>Installation:<\/strong><br>Add to the Gemfile:<\/p>\n<pre><code>gem 'rails-i18n', github: 'svenfuchs\/rails-i18n', branch: 'master' # For 5.x<\/code><\/pre>\n<p><strong>Configuration:<\/strong><br>By default rails-i18n loads all locale files, pluralization and transliteration rules available in the gem. This behaviour can be changed, if we specify in config\/environments\/* the locales which have to be loaded via I18n.available_locales option:<\/p>\n<pre><code>config.i18n.available_locales = ['es-CO', :de]<\/code><\/pre>\n<p>ou<\/p>\n<pre><code>config.i18n.available_locales = :nl<\/code><\/pre>\n<p>We can use another gem also:<\/p>\n<p><strong>Globalize gem:<\/strong><br>Rails I18n de-facto standard library for ActiveRecord model\/data translation. Globalize builds on the I18n API in Ruby on Rails to add model translations to ActiveRecord models.<\/p>\n<p><strong>Installation:<\/strong><br>When using bundler put this in our Gemfile:<\/p>\n<pre><code>gem 'globalize', '~&gt; 5.0.0'\nTo use globalize with Rails 5 add this in our Gemfile\ngem 'activemodel-serializers-xml'<\/code><\/pre>\n<p><b>2. Documentation: <\/b><a href=\"https:\/\/github.com\/globalize\/globalize\">https:\/\/github.com\/globalize\/globalize<\/a><br><\/p>\n<p><strong style=\"font-size: 16px; color: var( --e-global-color-text );\">DB Design for Multilingual App (English and Arabic):<\/strong><\/p>\n<p>Approach for supporting 2 or 3 languages:<\/p>\n<p><strong>1. Column Approach:<\/strong><\/p>\n<pre><code>Create column approach model with language columns;\n`title_en` varchar(255) NOT NULL,\n`title_ar` varchar(255) NOT NULL,<\/code><\/pre>\n<p>Now, the way you would query it is also simple enough. We may do it by automatically selecting the right columns according to the chosen language.<\/p>\n<p><strong>Avantages :<\/strong><\/p>\n<ul>\n<li>Simplicity &#8211; easy to implement<\/li>\n<li>Easy querying &#8211; no JOINs required<\/li>\n<li>No duplicates &#8211; doesn&#8217;t have duplicate content<\/li>\n<\/ul>\n<p><strong>D\u00e9savantages:<\/strong><\/p>\n<ul>\n<li>Hard to maintain &#8211; works in easy way for 2-3 languages, but it becomes a really hard when you have a lot of columns or a lot of languages<\/li>\n<li>Hard to add a new language<\/li>\n<\/ul>\n<p><strong>2. Translation table Approach:<\/strong><br>Having a related translation table for each translatable table.<\/p>\n<pre><code>CREATE TABLE PRODUCT (id int, PRICE NUMBER(18, 2))\nCREATE TABLE PRODUCT_tr (id int, product_id INT FK, languagecode varchar, name text, description text)<\/code><\/pre>\n<p>This way if we have multiple translatable column it would only require a single join to get it and it may be easier to import items together with their related translations.<\/p>\n<ul>\n<li>Doesn&#8217;t require altering the database schema for new languages (and thus limiting code changes)<\/li>\n<li>Doesn&#8217;t require a lot of space for unimplemented languages or translations of a particular item<br>Provides the most flexibility<\/li>\n<li>We don&#8217;t end up with sparse tables<\/li>\n<li>We don&#8217;t have to worry about null keys and checking that we\u2019re displaying an existing translation instead of some null entry.<\/li>\n<\/ul>\n<p><strong>Multilingual App with Rails-5 (English and Arabic):<\/strong><br>The approach for multilingual Rails applications is very similar to the monolingual. Here we need to define YAML language files for all required languages and tell the Rails application which language it should currently use. We do this via <strong>I18n.locale.<\/strong><\/p>\n<p>Setting I18n.locale via URL Path Prefix<br>We want http:\/\/0.0.0.0:3000\/ar to display the Arabic version and http:\/\/0.0.0.0:3000\/en the English version.<\/p>\n<p>config\/routes.rb<\/p>\n<pre><code>Myapp::Application.routes.draw do\n scope \"(:locale)\", :locale =&gt; \/en|ar\/ do\n  root :to =&gt; 'page#index'\n  get \"page\/index\"\n end\nend<\/code><\/pre>\n<p>Set a <strong>before_filter<\/strong> in the app\/controllers\/application_controller.rb.<\/p>\n<pre><code>class ApplicationController &lt; ActionController::Base\n  protect_from_forgery\n  before_filter :set_locale\n\n  private\n  def set_locale\n  I18n.locale = params[:locale] || I18n.default_locale\n end\nend<\/code><\/pre>\n<p>To test it, Go to the URL;<\/p>\n<pre><code>http:\/\/0.0.0.0:3000\/ar<\/code><\/pre>\n<p>Or<\/p>\n<pre><code>http:\/\/0.0.0.0:3000\/ar\/page\/index<\/code><\/pre>\n<p><strong>Setting a default language:<\/strong><\/p>\n<pre><code>app\/controllers\/application_controller.rb:\nclass ApplicationController &lt; ActionController::Base\n  protect_from_forgery\n  before_filter :set_locale\n\n  private\n  def set_locale\n  I18n.locale = params[:locale] || I18n.default_locale\n  Rails.application.routes.default_url_options[:locale]= I18n.locale\n end\nend<\/code><\/pre>\n<p>As a result, We do not need to do anything else. All links generated via the scaffold generator are automatically changed accordingly.<\/p>\n<p><strong>Setting I18n.locale via Accept Language HTTP Header of Browser:<\/strong><\/p>\n<pre><code>app\/controllers\/application_controller.rbclass \nApplicationController &lt; ActionController::Base \n  protect_from_forgery \n  before_filter :set_locale \n  private \n  def extract_locale_from_accept_language_header \n   request.env['HTTP_ACCEPT_LANGUAGE'].scan(\/^[a-z]{2}\/).first \n  end \n  def set_locale \n   I18n.locale = extract_locale_from_accept_language_header || I18n.default_locale \n  end \n end<\/code><\/pre>\n<p>Here we can change clean our routes file:<\/p>\n<pre><code>config\/routes.rb: \nMyapp::Application.routes.draw do \n get \"page\/index\" \n root :to =&gt; 'page#index'\nend<\/code><\/pre>\n<p><strong>Storing I18n.locale in Session<\/strong><\/p>\n<pre><code>app\/controllers\/set_mylanguage_controller.rb:\nclass SetMylanguageController &lt; ApplicationController\n #English\n def en\n  I18n.locale = :en\n  set_session_and_redirect\n end\n\n #Arabic\n def ar\n  I18n.locale = :ar\n  set_session_and_redirect\n end\n\n private\n def set_session_and_redirect\n  session[:locale] = I18n.locale\n  redirect_to :back\n  rescue ActionController::RedirectBackError\n  redirect_to :root\n end\nend<\/code><\/pre>\n<p><strong>Change in application controller:<\/strong><\/p>\n<pre><code>app\/controllers\/application_controller.rb:\nclass ApplicationController &lt; ActionController::Base\n protect_from_forgery\n before_filter :set_locale\n\n private\n def set_locale\n  I18n.locale = session[:locale] || I18n.default_locale\n  session[:locale] = I18n.locale\n end\nend<\/code><\/pre>\n<p>For setting Arabic:<\/p>\n<pre><code>http:\/\/0.0.0.0:3000\/set_mylanguage\/ar<\/code><\/pre>\n<p>For setting English:<\/p>\n<pre><code>http:\/\/0.0.0.0:3000\/set_mylanguage\/en<\/code><\/pre>\n<p><strong>Text Blocks in YAML Format:<\/strong><\/p>\n<p>Create the below directories first:<\/p>\n<pre><code>$ mkdir -p config\/locales\/models\/item\n$ mkdir -p config\/locales\/views\/item<\/code><\/pre>\n<p>Insert the following lines into the file config\/application.rb:<\/p>\n<p># The default locale is :en and all translations from config\/locales\/*.rb,yml are auto loaded.<\/p>\n<pre><code>config.i18n.load_path += Dir[Rails.root.join('config', 'locales', 'models', '*', '*.yml').to_s]\nconfig.i18n.load_path += Dir[Rails.root.join('config', 'locales', 'views', '*', '*.yml').to_s]\nconfig.i18n.default_locale = :en<\/code><\/pre>\n<p>We will have to create a file here; config\/locales\/models\/item<br>config\/locales\/models\/item\/ar.yml for Arabic<br>and make sure that en.yml is present for English.<\/p>\n<p><strong>English YAML:<\/strong><br>As most things are already present in the system for English<br>Insert the below into en.yml file.<\/p>\n<pre><code># ruby encoding: utf-8<\/code><\/pre>\n<pre><code>en:\n views:\n  show: Show\n  edit: Edit\n  destroy: Delete\n  are_you_sure: Are you sure?\n  back: Back\n  item:\n   index:\n     title: List of all items\n   new:\n     title: New Item\n   flash_messages:\n     item_was_successfully_created: \u2018Item was successfully created.'<\/code><\/pre>\n<p><strong>Arabic YAML:<\/strong><br>We will have to insert values\/texts in Arabic into ar.yml like in en.yml<br>Even we can copy a ready-made default translation by Sven Fuchs from his github repository <a href=\"https:\/\/github.com\/svenfuchs\/rails-i18n\">https:\/\/github.com\/svenfuchs\/rails-i18n<\/a>:<\/p>\n<pre><code>$ cd config\/locales<\/code><\/pre>\n<pre><code>$ curl -O https:\/\/raw.github.com\/svenfuchs\/rails-i18n\/master\/rails\/locale\/ar.yml<\/code><\/pre>\n<p><strong>Translating in View:<\/strong><br>We can use human_attribute_name() for the attributes and the links need to be translated with I18n.t. We can use number_to_currency() to show the amount\/price in formatted form:<\/p>\n<p>Exemples :<\/p>\n<pre><code>&nbsp;<\/code><\/pre>\n<h1>&lt;% = t &#8216;views.item.index.listing_items&#8217; %&gt;<\/h1>\n<pre><code>\n&lt;% = link_to I18n.t('views.show'),@item %&gt;\n&lt;%= Item.human_attribute_name(:name) %&gt;&lt;%=Item.human_attribute_name(:description) %&gt; <\/code><\/pre>\n<p><strong>Translating Flash Messages in the Controller<\/strong><\/p>\n<pre><code>if @item.save\n   format.html { redirect_to @item, notice: \nI18n.t('views.item.flash_messages.item_was_successfully_created') }\n   format.json { render json: @item, status: :created, location: @item }\nelse\n   format.html { render action: \"new\" }\n   format.json { render json: @item.errors, status: :unprocessable_entity }\nend<\/code><\/pre>\n<p>For other ready-made language translations:<br><a href=\"https:\/\/github.com\/svenfuchs\/rails-i18n\/tree\/master\/rails\/locale\">https:\/\/github.com\/svenfuchs\/rails-i18n\/tree\/master\/rails\/locale<\/a><\/p>\n<div><strong>LUBAIB CEEJEY<\/strong><\/div>\n<div>D\u00e9veloppeur senior Ruby on Rails<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4c7aa788 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4c7aa788\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-74e0c222\" data-id=\"74e0c222\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7481491d elementor-widget elementor-widget-heading\" data-id=\"7481491d\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Abonnez-vous pour les derni\u00e8res mises \u00e0 jour<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-21b3e2e8 elementor-widget elementor-widget-shortcode\" data-id=\"21b3e2e8\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\t\t\t\t\t<script type=\"text\/javascript\">\n\t\t\t\t\t\tvar gCaptchaSibWidget;\n                        var onloadSibCallbackInvisible = function () {\n\n                            var element = document.getElementsByClassName('sib-default-btn');\n                            var countInvisible = 0;\n                            var indexArray = [];\n                            jQuery('.sib-default-btn').each(function (index, el) {\n                                if ((jQuery(el).attr('id') == \"invisible\")) {\n                                    indexArray[countInvisible] = index;\n                                    countInvisible++\n                                }\n                            });\n\n                            jQuery('.invi-recaptcha').each(function (index, el) {\n                                grecaptcha.render(element[indexArray[index]], {\n                                    'sitekey': jQuery(el).attr('data-sitekey'),\n                                    'callback': sibVerifyCallback,\n                                });\n                            });\n                        };\n\t\t\t\t\t<\/script>\n\t\t\t\t\t                <script src=\"https:\/\/www.google.com\/recaptcha\/api.js?onload=onloadSibCallbackInvisible&render=explicit\" async defer><\/script>\n\t\t\t\t\n\t\t\t<form id=\"sib_signup_form_1\" method=\"post\" class=\"sib_signup_form\" action=\"\">\n\t\t\t\t<div class=\"sib_loader\" style=\"display:none;\"><img\n\t\t\t\t\t\t\tsrc=\"https:\/\/www.railscarma.com\/wp-includes\/images\/spinner.gif\" alt=\"chargeur\"><\/div>\n\t\t\t\t<input type=\"hidden\" name=\"sib_form_action\" value=\"subscribe_form_submit\">\n\t\t\t\t<input type=\"hidden\" name=\"sib_form_id\" value=\"1\">\n                <input type=\"hidden\" name=\"sib_form_alert_notice\" value=\"Please fill out this field\">\n                <input type=\"hidden\" name=\"sib_form_invalid_email_notice\" value=\"Your email address is invalid\">\n                <input type=\"hidden\" name=\"sib_security\" value=\"d7f7626ab9\">\n\t\t\t\t<div class=\"sib_signup_box_inside_1\">\n\t\t\t\t\t<div style=\"\/*display:none*\/\" class=\"sib_msg_disp\">\n\t\t\t\t\t<\/div>\n                                            <div id=\"sib_captcha_invisible\" class=\"invi-recaptcha\" data-sitekey=\"6LdikOAaAAAAAJ6SWrrKVQrtw7TQpQAEnv0HS0G3\"><\/div>\n                    \t\t\t\t\t<p class=\"sib-email-area\">\r\n    <label class=\"sib-email-area\"><\/label>\r\n    <input type=\"email\" class=\"sib-email-area\" name=\"email\" required=\"required\" placeholder=\"Adresse e-mail\">\r\n<\/p>\r\n<p class=\"sib-NAME-area\">\r\n    <label class=\"sib-NAME-area\"><\/label>\r\n    <input type=\"text\" class=\"sib-NAME-area\" name=\"NAME\" placeholder=\"Nom\">\r\n<\/p>\r\n<p>\r\n    <input type=\"submit\" id=\"invisible\" class=\"sib-default-btn\" value=\"S&#039;abonner\">\r\n<\/p>\t\t\t\t<\/div>\n\t\t\t<input type=\"hidden\" name=\"trp-form-language\" value=\"fr\"\/><\/form>\n\t\t\t<style>\n\t\t\t\tform#sib_signup_form_1 p.sib-alert-message {\n    padding: 6px 12px;\n    margin-bottom: 20px;\n    border: 1px solid transparent;\n    border-radius: 4px;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\nform#sib_signup_form_1 p.sib-alert-message-error {\n    background-color: #f2dede;\n    border-color: #ebccd1;\n    color: #a94442;\n}\nform#sib_signup_form_1 p.sib-alert-message-success {\n    background-color: #dff0d8;\n    border-color: #d6e9c6;\n    color: #3c763d;\n}\nform#sib_signup_form_1 p.sib-alert-message-warning {\n    background-color: #fcf8e3;\n    border-color: #faebcc;\n    color: #8a6d3b;\n}\n\t\t\t<\/style>\n\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t  <div class=\"related-post slider\">\r\n        <div class=\"headline\">Articles Similaires<\/div>\r\n    <div class=\"post-list owl-carousel\">\r\n\r\n            <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Gemme de Kaminari\" href=\"https:\/\/www.railscarma.com\/fr\/blog\/articles-techniques\/joyau-kaminari\/?related_post_from=37277\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"joyau kaminari\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Gemme de Kaminari\" href=\"https:\/\/www.railscarma.com\/fr\/blog\/articles-techniques\/joyau-kaminari\/?related_post_from=37277\">\r\n        Gemme de Kaminari  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Pourquoi engager des d\u00e9veloppeurs Ruby on Rails en 2026 ?\" href=\"https:\/\/www.railscarma.com\/fr\/blog\/ror\/pourquoi-embaucher-des-developpeurs-ruby-on-rails\/?related_post_from=30627\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"pourquoi embaucher des d\u00e9veloppeurs Ruby on Rails en 2022\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Pourquoi engager des d\u00e9veloppeurs Ruby on Rails en 2026 ?\" href=\"https:\/\/www.railscarma.com\/fr\/blog\/ror\/pourquoi-embaucher-des-developpeurs-ruby-on-rails\/?related_post_from=30627\">\r\n        Pourquoi engager des d\u00e9veloppeurs Ruby on Rails en 2026 ?  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Importance de l&#039;architecture logicielle dans le d\u00e9veloppement de logiciels d&#039;entreprise\" href=\"https:\/\/www.railscarma.com\/fr\/blog\/ror\/importance-de-larchitecture-logicielle-dans-le-developpement-de-logiciels-dentreprise\/?related_post_from=36250\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"Importance de l&#039;architecture logicielle dans le d\u00e9veloppement de logiciels d&#039;entreprise\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Importance de l&#039;architecture logicielle dans le d\u00e9veloppement de logiciels d&#039;entreprise\" href=\"https:\/\/www.railscarma.com\/fr\/blog\/ror\/importance-de-larchitecture-logicielle-dans-le-developpement-de-logiciels-dentreprise\/?related_post_from=36250\">\r\n        Importance de l&#039;architecture logicielle dans le d\u00e9veloppement de logiciels d&#039;entreprise  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Ruby IDE\u00a0: les meilleurs IDE pour le d\u00e9veloppement Ruby on Rails\" href=\"https:\/\/www.railscarma.com\/fr\/blog\/ror\/ruby-ide-les-meilleures-idees-pour-le-developpement-de-ruby-on-rails\/?related_post_from=36125\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"MEILLEURES ID\u00c9ES POUR LE D\u00c9VELOPPEMENT DE RUBY ON RAILS\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Ruby IDE\u00a0: les meilleurs IDE pour le d\u00e9veloppement Ruby on Rails\" href=\"https:\/\/www.railscarma.com\/fr\/blog\/ror\/ruby-ide-les-meilleures-idees-pour-le-developpement-de-ruby-on-rails\/?related_post_from=36125\">\r\n        Ruby IDE\u00a0: les meilleurs IDE pour le d\u00e9veloppement Ruby on Rails  <\/a>\r\n\r\n        <\/div>\r\n      \r\n  <\/div>\r\n\r\n  <script>\r\n      <\/script>\r\n  <style>\r\n    .related-post {}\r\n\r\n    .related-post .post-list {\r\n      text-align: left;\r\n          }\r\n\r\n    .related-post .post-list .item {\r\n      margin: 10px;\r\n      padding: 10px;\r\n          }\r\n\r\n    .related-post .headline {\r\n      font-size: 14px !important;\r\n      color: #999999 !important;\r\n          }\r\n\r\n    .related-post .post-list .item .post_thumb {\r\n      max-height: 220px;\r\n      margin: 10px 0px;\r\n      padding: 0px;\r\n      display: block;\r\n          }\r\n\r\n    .related-post .post-list .item .post_title {\r\n      font-size: 14px;\r\n      color: #000000;\r\n      margin: 10px 0px;\r\n      padding: 0px;\r\n      display: block;\r\n      text-decoration: none;\r\n          }\r\n\r\n    .related-post .post-list .item .post_excerpt {\r\n      font-size: 12px;\r\n      color: #3f3f3f;\r\n      margin: 10px 0px;\r\n      padding: 0px;\r\n      display: block;\r\n      text-decoration: none;\r\n          }\r\n\r\n    .related-post .owl-dots .owl-dot {\r\n          }\r\n\r\n      <\/style>\r\n      <script>\r\n      jQuery(document).ready(function($) {\r\n        $(\".related-post .post-list\").owlCarousel({\r\n          items: 2,\r\n          responsiveClass: true,\r\n          responsive: {\r\n            0: {\r\n              items: 1,\r\n            },\r\n            768: {\r\n              items: 2,\r\n            },\r\n            1200: {\r\n              items: 2,\r\n            }\r\n          },\r\n                      rewind: true,\r\n                                loop: true,\r\n                                center: false,\r\n                                autoplay: true,\r\n            autoplayHoverPause: true,\r\n                                nav: true,\r\n            navSpeed: 1000,\r\n            navText: ['<i class=\"fas fa-chevron-left\"><\/i>', '<i class=\"fas fa-chevron-right\"><\/i>'],\r\n                                dots: false,\r\n            dotsSpeed: 1200,\r\n                                                    rtl: false,\r\n          \r\n        });\r\n      });\r\n    <\/script>\r\n  <\/div>","protected":false},"excerpt":{"rendered":"<p>Rails gem approach, MySQL approach and a Multilingual Rails structure Most of the world doesn&#8217;t speak English. That&#8217;s where internationalization and localization come in. Rails has a great i18n API.Reference: http:\/\/guides.rubyonrails.org\/i18n.html It provides an easy-to-use and extensible framework for translating your application to a single custom language other than English or for providing multi-language support &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/www.railscarma.com\/fr\/blog\/ruby-regex-match-guide-with-examples\/\"> <span class=\"screen-reader-text\">Guide de correspondance des expressions rationnelles en Ruby (2026) avec exemples<\/span> Lire la suite \u00bb<\/a><\/p>","protected":false},"author":1,"featured_media":31860,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[384],"tags":[],"class_list":["post-25291","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical-articles"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to make your Rails Application Multilingual - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development<\/title>\n<meta name=\"description\" content=\"Rails gem approach, MySQL approach and a Multilingual Rails structure Most of the world doesn&#039;t speak English. That&#039;s where internationalization and\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.railscarma.com\/fr\/blog\/articles-techniques\/rendre-lapplication-rails-multilingue\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to make your Rails Application Multilingual - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\" \/>\n<meta property=\"og:description\" content=\"Rails gem approach, MySQL approach and a Multilingual Rails structure Most of the world doesn&#039;t speak English. That&#039;s where internationalization and\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.railscarma.com\/fr\/blog\/articles-techniques\/rendre-lapplication-rails-multilingue\/\" \/>\n<meta property=\"og:site_name\" content=\"RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/RailsCarma\/\" \/>\n<meta property=\"article:published_time\" content=\"2016-10-10T12:24:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-06T08:22:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Multilingual-1-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@railscarma\" \/>\n<meta name=\"twitter:site\" content=\"@railscarma\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21\"},\"headline\":\"How to make your Rails Application Multilingual\",\"datePublished\":\"2016-10-10T12:24:14+00:00\",\"dateModified\":\"2022-09-06T08:22:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/\"},\"wordCount\":777,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.railscarma.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Multilingual-1-1.jpg\",\"articleSection\":[\"Technical Articles\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/\",\"url\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/\",\"name\":\"How to make your Rails Application Multilingual - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\",\"isPartOf\":{\"@id\":\"https:\/\/www.railscarma.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Multilingual-1-1.jpg\",\"datePublished\":\"2016-10-10T12:24:14+00:00\",\"dateModified\":\"2022-09-06T08:22:58+00:00\",\"description\":\"Rails gem approach, MySQL approach and a Multilingual Rails structure Most of the world doesn't speak English. That's where internationalization and\",\"breadcrumb\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#primaryimage\",\"url\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Multilingual-1-1.jpg\",\"contentUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Multilingual-1-1.jpg\",\"width\":800,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.railscarma.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to make your Rails Application Multilingual\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.railscarma.com\/#website\",\"url\":\"https:\/\/www.railscarma.com\/\",\"name\":\"RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\",\"description\":\"RailsCarma is a Ruby on Rails Development Company in Bangalore. We specialize in Offshore Ruby on Rails Development based out in USA and India. Hire experienced Ruby on Rails developers for the ultimate Web Experience.\",\"publisher\":{\"@id\":\"https:\/\/www.railscarma.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.railscarma.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.railscarma.com\/#organization\",\"name\":\"RailsCarma\",\"url\":\"https:\/\/www.railscarma.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png\",\"contentUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png\",\"width\":200,\"height\":46,\"caption\":\"RailsCarma\"},\"image\":{\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/RailsCarma\/\",\"https:\/\/x.com\/railscarma\",\"https:\/\/www.linkedin.com\/company\/railscarma\/\",\"https:\/\/myspace.com\/railscarma\",\"https:\/\/in.pinterest.com\/railscarma\/\",\"https:\/\/www.youtube.com\/channel\/UCx3Wil-aAnDARuatTEyMdpg\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/www.railscarma.com\/hire-ruby-on-rails-developer\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to make your Rails Application Multilingual - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development","description":"Rails gem approach, MySQL approach and a Multilingual Rails structure Most of the world doesn't speak English. That's where internationalization and","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.railscarma.com\/fr\/blog\/articles-techniques\/rendre-lapplication-rails-multilingue\/","og_locale":"fr_FR","og_type":"article","og_title":"How to make your Rails Application Multilingual - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development","og_description":"Rails gem approach, MySQL approach and a Multilingual Rails structure Most of the world doesn't speak English. That's where internationalization and","og_url":"https:\/\/www.railscarma.com\/fr\/blog\/articles-techniques\/rendre-lapplication-rails-multilingue\/","og_site_name":"RailsCarma - Ruby on Rails Development Company specializing in Offshore Development","article_publisher":"https:\/\/www.facebook.com\/RailsCarma\/","article_published_time":"2016-10-10T12:24:14+00:00","article_modified_time":"2022-09-06T08:22:58+00:00","og_image":[{"width":800,"height":300,"url":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Multilingual-1-1.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_creator":"@railscarma","twitter_site":"@railscarma","twitter_misc":{"\u00c9crit par":"admin","Dur\u00e9e de lecture estim\u00e9e":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#article","isPartOf":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/"},"author":{"name":"admin","@id":"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21"},"headline":"How to make your Rails Application Multilingual","datePublished":"2016-10-10T12:24:14+00:00","dateModified":"2022-09-06T08:22:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/"},"wordCount":777,"commentCount":0,"publisher":{"@id":"https:\/\/www.railscarma.com\/#organization"},"image":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#primaryimage"},"thumbnailUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Multilingual-1-1.jpg","articleSection":["Technical Articles"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/","url":"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/","name":"How to make your Rails Application Multilingual - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development","isPartOf":{"@id":"https:\/\/www.railscarma.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#primaryimage"},"image":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#primaryimage"},"thumbnailUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Multilingual-1-1.jpg","datePublished":"2016-10-10T12:24:14+00:00","dateModified":"2022-09-06T08:22:58+00:00","description":"Rails gem approach, MySQL approach and a Multilingual Rails structure Most of the world doesn't speak English. That's where internationalization and","breadcrumb":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#primaryimage","url":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Multilingual-1-1.jpg","contentUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2016\/10\/Multilingual-1-1.jpg","width":800,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/make-rails-application-multilingual\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.railscarma.com\/"},{"@type":"ListItem","position":2,"name":"How to make your Rails Application Multilingual"}]},{"@type":"WebSite","@id":"https:\/\/www.railscarma.com\/#website","url":"https:\/\/www.railscarma.com\/","name":"RailsCarma - Soci\u00e9t\u00e9 de d\u00e9veloppement Ruby on Rails sp\u00e9cialis\u00e9e dans le d\u00e9veloppement offshore","description":"RailsCarma est une soci\u00e9t\u00e9 de d\u00e9veloppement Ruby on Rails \u00e0 Bangalore. Nous sommes sp\u00e9cialis\u00e9s dans le d\u00e9veloppement offshore Ruby on Rails, bas\u00e9s aux \u00c9tats-Unis et en Inde. Embauchez des d\u00e9veloppeurs Ruby on Rails exp\u00e9riment\u00e9s pour une exp\u00e9rience Web ultime.","publisher":{"@id":"https:\/\/www.railscarma.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.railscarma.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.railscarma.com\/#organization","name":"RailsCarma","url":"https:\/\/www.railscarma.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png","contentUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png","width":200,"height":46,"caption":"RailsCarma"},"image":{"@id":"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/RailsCarma\/","https:\/\/x.com\/railscarma","https:\/\/www.linkedin.com\/company\/railscarma\/","https:\/\/myspace.com\/railscarma","https:\/\/in.pinterest.com\/railscarma\/","https:\/\/www.youtube.com\/channel\/UCx3Wil-aAnDARuatTEyMdpg"]},{"@type":"Person","@id":"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21","name":"administrateur","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.railscarma.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/www.railscarma.com\/hire-ruby-on-rails-developer\/"]}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.railscarma.com\/fr\/wp-json\/wp\/v2\/posts\/25291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.railscarma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.railscarma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/fr\/wp-json\/wp\/v2\/comments?post=25291"}],"version-history":[{"count":0,"href":"https:\/\/www.railscarma.com\/fr\/wp-json\/wp\/v2\/posts\/25291\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/fr\/wp-json\/wp\/v2\/media\/31860"}],"wp:attachment":[{"href":"https:\/\/www.railscarma.com\/fr\/wp-json\/wp\/v2\/media?parent=25291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.railscarma.com\/fr\/wp-json\/wp\/v2\/categories?post=25291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.railscarma.com\/fr\/wp-json\/wp\/v2\/tags?post=25291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}