Rails Insights

Rails I18n: En Guide till Internationalisering i Ruby on Rails

Ruby on Rails är en kraftfull ramverk för webbutveckling som gör det enkelt att bygga dynamiska webbapplikationer. En av de mest användbara funktionerna i Rails är dess stöd för internationalisering (I18n), vilket gör det möjligt för utvecklare att skapa applikationer som kan anpassas för olika språk och kulturer. I denna artikel kommer vi att utforska hur man implementerar I18n i Ruby on Rails, med exempel och bästa praxis.

Vad är Internationalisering (I18n)?

Internationalisering, ofta förkortat som I18n, är processen att designa en applikation så att den kan anpassas till olika språk och regioner utan att behöva ändra koden. Detta innebär att man separerar text och andra kulturella element från applikationens logik, vilket gör det enklare att översätta och anpassa applikationen för olika användare.

Komma igång med I18n i Rails

Rails har inbyggt stöd för I18n, vilket gör det enkelt att implementera. Här är stegen för att komma igång:

1. Skapa en ny Rails-applikation

Om du inte redan har en Rails-applikation, kan du skapa en ny med följande kommando:

rails new my_i18n_app

2. Lägg till översättningar

Översättningar lagras i YAML-filer i mappen config/locales. Rails kommer automatiskt att ladda dessa filer. Skapa en fil för varje språk du vill stödja. Till exempel, för svenska och engelska, skapa följande filer:

config/locales/sv.yml
config/locales/en.yml

Fyll i dessa filer med översättningar. Här är ett exempel på hur sv.yml kan se ut:

sv:
  hello: "Hej"
  goodbye: "Adjö"

Och för en.yml:

en:
  hello: "Hello"
  goodbye: "Goodbye"

3. Använda översättningar i dina vyer

För att använda översättningarna i dina vyer, kan du använda t-metoden. Här är ett exempel på hur du kan använda översättningarna i en vy:

<%= t('hello') %>

Detta kommer att visa "Hej" om språket är inställt på svenska, eller "Hello" om det är inställt på engelska.

Ställa in standard språk

Du kan ställa in standard språk för din applikation i application.rb filen. Lägg till följande rad:

config.i18n.default_locale = :sv

Detta kommer att ställa in svenska som standard språk för din applikation.

Byta språk dynamiskt

För att låta användare byta språk dynamiskt, kan du skapa en metod i din ApplicationController. Här är ett exempel:

class ApplicationController < ActionController::Base
  before_action :set_locale

  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end
end

Du kan sedan lägga till länkar i dina vyer för att byta språk:

<%= link_to 'Svenska', url_for(locale: 'sv') %>
<%= link_to 'English', url_for(locale: 'en') %>

Översätta strängar i modeller och kontroller

Du kan också använda översättningar i dina modeller och kontroller. Här är ett exempel på hur du kan använda översättningar i en modell:

class User < ApplicationRecord
  validates :name, presence: { message: I18n.t('errors.messages.blank') }
end

Detta gör att du kan använda översättningar för valideringsmeddelanden, vilket gör dem mer flexibla och anpassningsbara.

Hantera pluralisering

Rails I18n har också stöd för pluralisering, vilket gör det möjligt att hantera olika former av substantiv beroende på antal. Här är ett exempel på hur du kan definiera pluralisering i din YAML-fil:

sv:
  apples:
    one: "1 äpple"
    other: "%{count} äpplen"

För att använda detta i din vy kan du göra följande:

<%= t('apples', count: @apple_count) %>

Detta kommer att visa "1 äpple" om @apple_count är 1, eller "%{count} äpplen" för andra värden.

Hantera format och datum

Förutom textöversättningar kan du också hantera format och datum. Rails I18n gör det enkelt att anpassa datumformat för olika språk. Här är ett exempel:

sv:
  date:
    formats:
      default: "%Y-%m-%d"

Du kan sedan använda l-metoden för att formatera datum:

<%= l(Date.today) %>

Testa dina översättningar

Det är viktigt att testa dina översättningar för att säkerställa att de fungerar som förväntat. Du kan använda RSpec för att skriva tester för dina översättningar. Här är ett exempel:

RSpec.describe "I18n" do
  it "should translate hello" do
    expect(I18n.t('hello')).to eq("Hej")
  end
end

Slutsats

Internationalisering i Ruby on Rails är en kraftfull funktion som gör det möjligt för utvecklare att skapa applikationer som kan anpassas för olika språk och kulturer. Genom att använda Rails inbyggda I18n-stöd kan du enkelt hantera översättningar, pluralisering och datumformat. Genom att följa de bästa praxis som beskrivs i denna artikel kan du skapa en mer tillgänglig och användarvänlig applikation för en global publik.

Oavsett om du bygger en liten webbplats eller en stor applikation, är det viktigt att tänka på internationalisering från början. Med Rails I18n kan du göra din applikation redo för världen!

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.