globalize
A JavaScript library for internationalization and localization that leverages the official Unicode CLDR JSON data
I have small table:
create_table :cities do |t|
t.string :name
end
I need to internationalize "name" column and I don't want create separate table for this. Is it possible to add columns for translations to "cities" table? In result I want that migration of this table looks like this:
create_table :cities do |t|
t.string :en_name
t.string :de_name
t.string :fr_name
end
Currently I'm trying to use "globalize" gem, maybe I should use some other solution for this, please, advise.
Source: (StackOverflow)
I've been scratching my head for the last few hours, looking for an answer but I can't find it anywhere.
My gem file:
# Use globalize for translating models
gem "globalize", github: "ncri/globalize" # for Rails 4.2
gem 'globalize-accessors', '~> 0.1.5'
# Use friendly_id for slugs
gem 'friendly_id', '~> 5.1.0'
gem 'friendly_id-globalize', '~> 1.0.0.alpha1'
Here's the situation:
I have two languages "en" and "fr"
2 models : pages and pages_translations pages has a slug column, pages_translations also has a slug column.
if I view the page -> en/pages/slug-en, it works.
if I view the page -> fr/pages-slug-fr, it works.
So I assume friendly_id and globalize are properly configured.
However my problem is that I can't make a language switcher work using:
<% if I18n.locale != :en %>
<li>
<%= link_to t('menu.languages.short_en'), url_for(locale: 'en') %>
</li>
<% end %>
The route becomes en/pages/slug-fr (i.e. the language changes but not the slug).
I have activated config.use :finders in the initializer.
My page model:
translates :title, :slug, :blurb, :content, :seo_title, :seo_description, :seo_keywords
globalize_accessors :locales => [:en, :fr], :attributes => [:title, :slug, :blurb, :content, :seo_title, :seo_description, :seo_keywords]
extend FriendlyId
friendly_id :slug, :use => :globalize
validates :slug, presence: true, uniqueness: { case_sensitive: false }
So what do I need to do to have the proper path on my language switcher?
Ideally, I'd like this to work with any models, not just the Page model.
Thanks!
- Vincent
Source: (StackOverflow)
I upgraded to Rails 4 and globalize (instead of globalize3) and translations are not working correctly since.
Steps:
create english record
change the locale to :es
then call update_attributes on just created object
This used to create a new translation in es.
But, now, it is modifying the English record instead!!! Please help?
Gemfile:
gem "rails", "4.0.1"
gem "globalize", "~> 4.0.0.alpha.1"
Model:
class GlossaryTerm < ActiveRecord::Base
translates :term, :definition
accepts_nested_attributes_for :translations
has_many :glossary_term_translations
belongs_to :section
validates_presence_of :term
validates_presence_of :definition
**after_create :create_spanish_placeholder**
def create_spanish_placeholder
term = self.term
definition = self.definition
I18n.locale = :es
self.update_attributes(:term => "SPANISH placeholder for #{term}", :definition => "SPANISH placeholder for #{definition}")
I18n.locale = :en
end
#...
end
Controller:
class Admin::GlossaryTermsController < ApplicationController
before_filter :authorize_sysadmin!
def create
find_models
@glossary_term = @section.glossary_terms.new(glossary_term_params)
if @glossary_term.save
redirect_to edit_admin_section_url(@section, program_id: @program.id)
else
render :action => "new"
end
end
#...
protected
def glossary_term_params
params.require(:glossary_term).permit(:term, :definition, :glossary_image, :glossary_image_file_name,
:translations_attributes => [:id, :term, :definition])
end
#...
end
Source: (StackOverflow)
i'm currently working on a project which has 2 different locals (nl/fr).
We're facing this problem : How can I get the translated url for the current page when I display fr/nl button
I'm currently working with friendly_id and globalize
we've tried :
= link_to "nl", params.merge(locale: "nl")
= link_to "nl", url_for(:locale => :nl)
both work to change the current language but as we've friendly_url, when the page is loaded in french (localhost:3000/c/animaux)
we should have
localhost:3000/nl/c/dieren
instead of
localhost:3000/nl/c/animaux
I've so many link to translate so I wish there's a railsway to do this.
Source: (StackOverflow)
Since I have a model with localized fields (using Globalize, I'd like to make localized search. I set up two indices on my model :
ThinkingSphinx::Index.define :document, name: "document_fr", :with => :active_record, :delta => true do
indexes translations.name, :as => :options
indexes translations.description
where "(#{Document.translations_table_name}.locale='fr' OR #{Document.translations_table_name}.locale IS NULL)"
has created_at, updated_at
end
ThinkingSphinx::Index.define :document, name: "document_nl", :with => :active_record, :delta => true do
indexes translations.name, :as => :options
indexes translations.description
where "(#{Document.translations_table_name}.locale='nl' OR #{Document.translations_table_name}.locale IS NULL)"
has created_at, updated_at
end
How can I make a search on one index, using the delta ?
I tried to use the indices
options but it does not really work :
Document.search 'something', {
indices: ["document_fr_core", "document_fr_delta"]
}
=> If I change a Document instance and save it, delta indexing happens and the change are indexed in *_delta. But since I am also searching on *_core, the modified instance is still found even when the has no match for the search anymore :-(
Edit (24/04/2015)
Alternative solution may be to use facets search for the translations. But I am not really sure how to use them. If you think it's a better solution, please let me know :-)
Source: (StackOverflow)
I have a rails project that needs to be multi-lingual. I ran into a few issues while enabling globalize for my rails project.
I was wondering if there is a thorough checklist / recipe for enabling internationalisation for a rails app.
Please note that I use ActiveAdmin which needs to be part of this as well.
Source: (StackOverflow)
I have bulgarian short date pattern string from calendar control how can I create date object without removing 'г.' from it.
new Date('26.6.2015 г.')
I wanted to compare the date selected from calender with today's date
if (($.datepicker.formatDate('yy/mm/dd', new Date()))
($.datepicker.formatDate('yy/mm/dd', new Date('26.6.2015 г.'))))
{ alert('success')}
Source: (StackOverflow)
How am I supposed to write the forms for my models where I'm using rails 4 and https://github.com/globalize/globalize for translations. i want to display all translations in one form like below example. i have found a solution here https://github.com/rilla/batch_translations but i don't know how do i implement this. is this "batch translation" a gem or what? and how can i install it.
<h1>Editing post</h1>
<% form_for(@post) do |f| %>
<%= f.error_messages %>
<h2>English (default locale)</h2>
<p><%= f.text_field :title %></p>
<p><%= f.text_field :teaser %></p>
<p><%= f.text_field :body %></p>
<hr/>
<h2>Spanish translation</h2>
<% f.globalize_fields_for :es do |g| %>
<p><%= g.text_field :title %></p>
<p><%= g.text_field :teaser %></p>
<p><%= g.text_field :body %></p>
<% end %>
<hr/>
<h2>French translation</h2>
<% f.globalize_fields_for :fr do |g| %>
<p><%= g.text_field :title %></p>
<p><%= g.text_field :teaser %></p>
<p><%= g.text_field :body %></p>
<% end %>
<% end %>
Source: (StackOverflow)
Someon are using globalize3 with rails4.
How you configure it?
i tryed to install, on my Gemfile:
gem 'globalize3', github: 'svenfuchs/globalize3', branch: 'rails4'
but i have these errors:
Bundler could not find compatible versions for gem "railties":
In Gemfile:
globalize3 (>= 0) ruby depends on
railties (~> 3.0) ruby
coffee-rails (~> 4.0.0) ruby depends on
railties (4.0.0)
Bundler could not find compatible versions for gem "rails":
In Gemfile:
globalize3 (>= 0) ruby depends on
rails (~> 3) ruby
rails (4.0.0)
Bundler could not find compatible versions for gem "actionpack":
In Gemfile:
rails (= 4.0.0) ruby depends on
actionpack (= 4.0.0) ruby
simple_form (~> 3.0.0.rc) ruby depends on
actionpack (4.0.0.rc1)
Source: (StackOverflow)
I am using rails 4.0.2 and globalize 4.0.0.alpha.3, but i can not get the thing to write the data into the translation databases with a list of strong parameters.
I have an offer model and a concern (OfferTranslationConcern)
class Offer < ActiveRecord::Base
include OfferTranslationConcern
end
The concern
module OfferTranslationConcern
extend ActiveSupport::Concern
included do
attr_accessor :attribute_translations
translates :name, :city, :includes, :notes, :description, :slug
end
end
The controller
def update
respond_to do |format|
if @offer.update(offer_params)
format.html { redirect_to @offer, notice: 'Offer was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @offer.errors, status: :unprocessable_entity }
end
end
end
And the definition of the strong parameters
params.require(:user).permit('a lot of offer parameters', :attribute_translations => [:id, :name, :city, :includes, :notes, :description, :slug]
)
For the translations I am using for example the spanish and italian language (it and es). When I update the offer I get Unpermitted parameters: it, es
The parameters looks like this:
"offer"=>{"attribute_translations"=>{"it"=>{"name"=>"dsfdsf", "city"=>"sdf", "includes"=>"sdfsdf", "notes"=>"sdfsd", "description"=>"fsdf"}, "es"=>{"name"=>"", "city"=>"", "includes"=>"", "notes"=>"", "description"=>""}}, "provider_id"=>"1",...a bunch of other stuff
Right now I made it work with this definition of strong parameters
def offer_params
params.require(:offer).permit!
end
This work, but I don't think this is the best way. So, my question is if there is a way to define the list of parameters and make this work?
Source: (StackOverflow)
I'm using the globalize gem to support multiple locales.
config/locales directory have three file
en.yml, ja.yml, ch-HK.yml
and my routing file is
....
root :to => 'main#index', :locale => :en
scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
namespace(:api){ resources :badges }
namespace(:api){
resources :events do
get :list, :on => :collection
end
}
end
....
my root path (/) is setting default locales
but I don't know how to setting default locales in api_controller
I wanna
/api/events.json ->> /en/api/event.json
/ja/api/events.json ->> /ja/api/events.json
is it not accept in rails Project?
must add /:locales/api~~ ?
Source: (StackOverflow)
I have a multilingual website. For translations I use globalize
gem.
I want to give an user two text fields on the same page.
User can fill one of them, or both.
I want to save records for all locales on submit button clicked.
Say, there are two text fields named username
.
I can type Ivan
for English one, and Иван
for Russian one.
When I click Submit
button, I want to see two records in my user_translations
table for en
and ru
respectively.
What's the most elegant way to get that worked?
ps: batch_translations seems to be outdated.
Source: (StackOverflow)
I have configured I18n, Globalize and FriendlyId in a Multilingual Rails Application.
Moreover, I pretend to translate url according locale.
For example:
http://localhost:3000/es/micontroller/mi-casa
http://localhost:3000/en/mycontroller/my-house
Those urls already exists, the translation works as expected.
These are the language switcher links I have added:
= link_to_unless I18n.locale == :es, "Español", locale: :es
= link_to_unless I18n.locale == :en, "English", locale: :en
My issue is that when I switch languages, the url only changes the locale parameter, instead of changing slug.
For example, toggling from English to Spanish results in something like:
http://localhost:3000/es/mycontroller/my-house
PD: Is a good practice what I pretend to do with my urls? I have searched some time with no results.
Source: (StackOverflow)
I wanted to make a form for creating and updating a model, with support for adding/editing translations for multiple languages inline.
This is how my form looks like:
<%= form_for([:admin, @category], remote: true) do |f| %>
<% Category.globalize_attribute_names.each do |lang| %>
<div class="field">
<%= f.label lang %><br>
<%= f.text_field lang %>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Strangely, everything works fine when I`m creating a model. But when I try to edit it I get this error:
undefined method `name_en' for #Category::Translation:0x007f3ce896afd8>
I said strangely, because it works fine in the console. When i type:
Category.friendly.find("men-shoes").name_en
everything works fine. (I`m using friendlyID gem).
I have no idea what the problem could be. I even don`t know why is it fetching Category::Translation, should`n it be just Category?
Thanks
Source: (StackOverflow)