سلام سال نو مبارک:smile:
من میخوام وقتی یه فرم validate میکنم مثلا اگه گفتم 255 کارکتر بیشتر نشه پیغام
Name is too long (maximum is 255 characters)
نده و هر پیغامی که دوست دارمو نمایش بدم.
چطور این کار ممکنه؟؟
سلام سال نو مبارک:smile:
من میخوام وقتی یه فرم validate میکنم مثلا اگه گفتم 255 کارکتر بیشتر نشه پیغام
Name is too long (maximum is 255 characters)
نده و هر پیغامی که دوست دارمو نمایش بدم.
چطور این کار ممکنه؟؟
اینطوری:
validates_length_of :text, in: 0..255, message: "This is too big"
یا اینطوری:
validates_length_of :user_name, within: 6..20, too_long: 'pick a shorter name', too_short: 'pick a longer name'
مثال
validates_presence_of :name , message: "Plase insert subject name !"
اینم میشه خروجیش
Name Plase insert subject name !
حالا من میخوام اون name اول ام عوض کنم اصلا فارسی بزارم اینو چه کنم که از همون اتریبیوت استفاده کنم ولی اسمشو برا نمایش خطا عوض کنم
باید از I18n ریلز استفاده کنید و زبان دیفالت رو بزارید روی فارسی.
# config/application.rb
config.i18n.default_locale = :fa
بعد میتونید از جم rails-i18n استفاده کنید یا محتویات این فایل رو بریزید تو آدرس config/locales/fa.yml
. برای اینکه اسم مشخصههای مدل رو به فارسی ترجمه کنید، به فرض اینکه یک مدل Post و یک مدل Comment داشته باشید، میتونید داخل fa.yml اینها رو اضافه کنید:
fa:
activerecord:
models:
post: "پست"
comment: "نظرات"
attributes:
post:
title: "عنوان"
body: "پست"
comment:
sender: "ارسال کننده"
body: "متن"
برای اطلاعات بیشتر مستندات ریلز رو بخونید.
این سوال خوبیه و @TheArashM جواب رو دادن.
حالا یک سوال دیگه پیش میاد;
به نظر من اینکه ما هم باید مدل و در کل schema خوبی طراحی کنیم و هم تک تک فیلد ها رو validate کنیم یکمی کار رو کند و پیچیده میکنه. مثلا اگر فیلدی داریم که CHAR 255 هست خوب دیگه یعنی منظورمون همین بوده که کرکترها بیشتر نباشن پس چرا بازم نیاز داریم که دستی Validate کنیم؟!! برای رفع این مشکل جمی هست به نام valhammer که وقتی schema یا همون database را خوب طراهی کرده باشیم, این جم به صورت خودکار validation را انجام میده و ما وقتمون رو برای بهبود دیتا بیس صرف می کنیم . مگر اینکه validation های پیچیده تری لازم داشته باشیم و اون موقع هست که دستی عمل میکنیم.
من هر روز از این جم استفاده میکنم و هر سوالی در موردش باشد را میتونم پاسخ بدم.
من برای اجرا این به error میخورم
ActionView::Template::Error (can not load translations from /home/moh/sites/Cms/config/locales/en.yml: expects it to return a hash, but does not):
1: <%= error_messages_for (@subject) %>
2: <div class="form-group">
3: <%= jex.label(:name, class: "col-sm-2 control-label") %>
4: <div class="col-sm-10 form-padding "><%= jex.text_field(:name ,:class => "form-control") %></div>
5: </div>
6:
app/views/subjects/_form.html.erb:3:in `_app_views_subjects__form_html_erb___413945265320941701_70097390338460'
app/views/subjects/edit.html.erb:5:in `block in _app_views_subjects_edit_html_erb___4003724572555808626_70097389847960'
app/views/subjects/edit.html.erb:4:in `_app_views_subjects_edit_html_erb___4003724572555808626_70097389847960'
Rendered /home/moh/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/templates/rescues/_source.erb (73.7ms)
Rendered /home/moh/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (33.3ms)
Rendered /home/moh/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (3.4ms)
Rendered /home/moh/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (175.0ms)
Rendered /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/templates/_markup.html.erb (1.5ms)
Rendered /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/templates/_inner_console_markup.html.erb within layouts/inlined_string (1.0ms)
Rendered /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/templates/_prompt_box_markup.html.erb within layouts/inlined_string (2.6ms)
Rendered /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/templates/style.css.erb within layouts/inlined_string (1.3ms)
Rendered /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/templates/console.js.erb within layouts/javascript (1563.4ms)
Rendered /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/templates/index.html.erb (1596.0ms)
ActionView::Template::Error: can not load translations from /home/moh/sites/Cms/config/locales/en.yml: expects it to return a hash, but does not
اینم fa.yml
fa:
activerecord:
models:
admin_user: "مدیر"
page: "صفحه"
section: "قسمت"
subject: "موضوع"
attributes:
subject:
name: "نام"
position: "موقیعت"
این دستورم تو config اضافه کردم.
config.i18n.default_locale = :fa
خیلی خوب میشه یکی از دوستان یه sample project درست کنه که توش همه ترفندای فارسی کردن باشه تا بعد ها هم کسی خواست کارکنه لینکش بدیم به اون
#config/application.rb
config.i18n.default_locale = :fa
config/locales/fa.yml
fa.yml
اونا رو کانفیگ کردم
از طرفی وقتی همین fa.yml تو سایت http://www.yamllint.comبررسی میکنیم میگه مشکل داره
models باید زیر activerecord باشه. ضمن اینکه فایل config/locales/en.yml باید از قبل وجود داشته باشه. اگه فایل en.yml وجود داره و هنوز خطا داری سرور رو ریاستارت کن.
models که زیر اونه en.yml از قبل بود سرور ام ریستارت کردم ارور هست
ActionView::Template::Error: can not load translations from /home/moh/sites/Cms/config/locales/fa.yml: #<Psych::SyntaxError: (/home/moh/sites/Cms/config/locales/fa.yml): did not find expected key while parsing a block mapping at line 2 column 3>
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n/backend/base.rb:184:in `rescue in load_yml'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n/backend/base.rb:181:in `load_yml'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n/backend/base.rb:165:in `load_file'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n/backend/base.rb:15:in `block in load_translations'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n/backend/base.rb:15:in `each'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n/backend/base.rb:15:in `load_translations'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n/backend/simple.rb:57:in `init_translations'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n/backend/simple.rb:40:in `available_locales'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n/config.rb:43:in `available_locales'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n/config.rb:49:in `available_locales_set'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n.rb:278:in `locale_available?'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n.rb:284:in `enforce_available_locales!'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/i18n-0.7.0/lib/i18n.rb:151:in `translate'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/helpers/translation_helper.rb:69:in `translate'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/view.rb:34:in `t'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/templates/console.js.erb:95:in `__home_moh__rvm_gems_ruby_______gems_web_console_______lib_web_console_templates_console_js_erb__3504662335268964650_69948868269060'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/template.rb:145:in `block in render'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/notifications.rb:166:in `instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/template.rb:333:in `instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/template.rb:143:in `render'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/template_renderer.rb:54:in `block (2 levels) in render_template'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/abstract_renderer.rb:39:in `block in instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/notifications.rb:164:in `block in instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/notifications.rb:164:in `instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/abstract_renderer.rb:39:in `instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/template_renderer.rb:53:in `block in render_template'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/template_renderer.rb:61:in `render_with_layout'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/template_renderer.rb:52:in `render_template'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/template_renderer.rb:14:in `render'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/renderer.rb:42:in `render_template'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/renderer.rb:23:in `render'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/helpers/rendering_helper.rb:32:in `render'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/view.rb:17:in `render_javascript'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/templates/index.html.erb:3:in `__home_moh__rvm_gems_ruby_______gems_web_console_______lib_web_console_templates_index_html_erb__1171156280810062560_69948868364380'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/template.rb:145:in `block in render'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/notifications.rb:166:in `instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/template.rb:333:in `instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/template.rb:143:in `render'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/template_renderer.rb:54:in `block (2 levels) in render_template'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/abstract_renderer.rb:39:in `block in instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/notifications.rb:164:in `block in instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/notifications.rb:164:in `instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/abstract_renderer.rb:39:in `instrument'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/template_renderer.rb:53:in `block in render_template'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/template_renderer.rb:61:in `render_with_layout'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/template_renderer.rb:52:in `render_template'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/template_renderer.rb:14:in `render'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/renderer.rb:42:in `render_template'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/renderer/renderer.rb:23:in `render'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionview-4.2.5.1/lib/action_view/helpers/rendering_helper.rb:32:in `render'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/template.rb:20:in `render'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/middleware.rb:42:in `block in call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/middleware.rb:18:in `catch'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/web-console-2.3.0/lib/web_console/middleware.rb:18:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/rack/logger.rb:38:in `call_app'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/rack/logger.rb:20:in `block in call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/tagged_logging.rb:68:in `block in tagged'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/tagged_logging.rb:26:in `tagged'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/tagged_logging.rb:68:in `tagged'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/rack/logger.rb:20:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/request_id.rb:21:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/methodoverride.rb:22:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/runtime.rb:18:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.5.1/lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/lock.rb:17:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.5.1/lib/action_dispatch/middleware/static.rb:116:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/sendfile.rb:113:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/engine.rb:518:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/application.rb:165:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/lock.rb:17:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/content_length.rb:15:in `call'
from /home/moh/.rvm/gems/ruby-2.2.1/gems/rack-1.6.4/lib/rack/handler/webrick.rb:88:in `service'
from /home/moh/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
from /home/moh/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
from /home/moh/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
تو فایل fa.yml اون models باید زیر activerecord باشه. به پست دومم که نمونه رو گذاشتم دقت کن. indentهات اشتباهه. attributes هم زیر models نیست.
اینو توی console اجرا کن و error بگو
rails c
YAML.load(File.open('config/locales/fa.yml'))`
با @TheArashM موافقم.
خط های زیرو هم اگه به کارت میاد به user settings تو sublime اضافه کن
"trim_trailing_white_space_on_save": true,
"tab_size": 2,
"ensure_newline_at_eof_on_save": true,
"translate_tabs_to_spaces": true,
"detect_indentation": true
اوکی شد و دیگه ارور نداشتم نمیدونستم ایندنت هام مهمن ممنون
ولی الان خودش اتومات ارور ها رو فارسی کرد بدونه اینکه من بش بگم شاید بخاطر (gem ‘rails-i18n’) ولی اتریبیوتشو نه من میخوام اون اتریبیوتم عوض بشه به همون نامی که گذاشتم
دقت نمیکنی کلا. تو پست قبلی هم گفتم attributes نباید parentش models باشه. indentهات رو چک کن درست باشن.
شرمنده .اره درست میگی ایندنت ها باید دوتا دوتا باش من رعایت نکردم الان همچی اوکی شد بسیار ممنون از @TheArashM و @toomaj واقعا کمک خوبی بود .دمتون گرم
من که شخصا روزی صدتا مشکل اینجوری دارم , مهم اینه که بتونی درستشون کنی.