Mam pewien problem z zapisem tłumaczeń za pomocą globalize. Chodzi o to, że cała moja aplikacja używa lokalizacji ustalanej na początku jej działania za pomocą I18n.locale (w AplicationController). Ta zmienna określa, w którym języku aktualnie działa aplikacja. Następnie mam formularz, w którym zapisuje pola w określonym tłumaczeniu (pole wyboru języka) i tutaj pojawia się problem np. mam dwa języki en i pl, aktualnie aplikacja używa języka pl, w formularzu (wspomnianym powyżej) ustawiam, że chce napisać tłumaczenie dla języka en i wypełniam pole. Następnie zapisuję to:
# przykładowy kod zapisu
I18n.locale = @edit_locale # ustawiam wybrany język z formularza
@page = Page.new(page_params)
respond_to do |format|
if @page.save
format.html { redirect_to pages_path, notice: 'Page was successfully created.' }
else
format.html { render :new }
end
end
I tu pojawia się problem, ponieważ po zapisie cała aplikacja zmienia język na en i zmieniają się tłumaczenia. Oczywiście ten problem można obejść poprzez tymczasową zmienną, która będzie przechowywała ten aktualnie używany język i na końcu po zapisie przywrócić ten język, ale nie da się tego zrobić lepiej? Z góry dzięki za pomoc.
Próbowałem tego, ale wtedy walidacja nie przechodzi (robiłem walidację dla wszystkich tłumaczeń) - chodzi o to, że w modelu nie mam dostępu do zmiennej params skąd mógłbym ściągnąć ten wybrany język, więc nie mogę ustalić które tłumaczenie aktualnie walidować (np. title_pl i title_en), a chce walidować w jednym momencie albo title_pl albo title_en. Problem rozwiązałem trochę inaczej:
<% Globalize.with_locale(edit_locale) do %>
#odpowiedni kod
<% end %>
wybacz, ale nie rozumiem, jaki problem masz z ustawieniem walidacji ? w params z formularza przekazujesz stringi, i poźniej w modelu ustawiasz walidacje. Wykorzystując globalize-accessors pojawiaja ci sie pola title_pl, title_en, które możesz poddać walidacji. Ogólnie przy korzystaniu z globalize trzeba się trochę natrudzić żeby nie robiło ogromnej ilości zapytań do bazy, ale się da.
Tak, właśnie o tym piszę - mam pola title_pl, title_en, ale w 1 momencie chce walidować tylko 1 z tych pól czyli:
title_#{params[:edit_locale]}
Ale nie mogę tego zrobić, ponieważ w modelu nie mam dostępu do params.
Mógłbym użyć do walidacji samego pola title, ale wtedy będzie walidowane tłumaczenie na podstawie języka aplikacji, a nie na podstawie wybranego języka z formularza np. język aplikacji to pl, język z formularza to en to wtedy będzie walidowane tłumaczenie pl, a nie en. Tak było do momentu, jak użyłem podanego przeze mnie rozwiązania.