Witam! Zmagam się z problemem - w Windowsie nie ma domyślnie polskich znaków w konsoli. Jednak wystarczy, że zmienimy kodowanie na utf-8 za pomocą:
# encoding: utf-8
system('chcp 65001')
I mamy polskie znaki. Problem jest jednak taki, że w każdym pliku, który includujemy musi się na początku znajdować taka linijka (w każdym pliku, który wyświetla polskie znaki). A ja mam dużo plików, w tym moduły i tak dalej - ale wszystkie są łączane w jednym pliku poprzez includowanie pętlą. I teraz pytanie - czy w momencie includowania mogę do tych plików dodawać na początku ww linijki? Jeśli tak - to w jaki sposób?
To nie jest czasem tylko na Rails? Ja tutaj mówię o czystym Rubim i konsoli CMD.
Nie do końca mi odpowiedziałeś na moje pytanie. Fakt - potrzebuję do wyświetlania tekstów w konsoli, ale mimo to, pytanie brzmiało: czy można dodawać linijki do includowanych plików.
[quote=soanvig]To nie jest czasem tylko na Rails? Ja tutaj mówię o czystym Rubim i konsoli CMD.
Nie do końca mi odpowiedziałeś na moje pytanie. Fakt - potrzebuję do wyświetlania tekstów w konsoli, ale mimo to, pytanie brzmiało: czy można dodawać linijki do includowanych plików.[/quote]
Wiem, że nie odpowiedziałem na Twoje pytanie, powiedziałem Ci za to jak ten problem się powinno rozwiązać. To jest ogólnie dobra technika, żeby używać I18n, po pierwsze dlatego, że nie masz problemów z kodowaniem, a po drugie, jeśli chciałbyś kiedyś wypuścić to co piszesz w innym języku, to zadanie to staje się banalnie proste.
Poza tym, nie napisałeś, że to nie są railsy, a ja nie jestem wróżką.
Gemów możesz jak najbardziej używać poza railsami i to się często robi (bo za darmo masz mnóstwo ciekawych rozwiązań). Możesz por prostu zainstalować gema I18n i zrobić require, możesz też użyć bundlera, zrobić Gemfile i nawet zainstalować I18n w katalogu aplikacji.
domyślnie jeśli w pliku chcesz mieć utf-8 to na początku każdego pliku musi być linijka że tam są znaki utf-8, jak nie chcesz pisać kodowania utf-8 w każdym pliku to zrób pliki yml którę będą przechowywać tłumaczenia
Dobra, rozumiem, że nie ma jak dodawać linijki przy includowaniu?
Mógłby mi ktoś pokrótce wyjaśnić jak używać i18n w Rubim? Stworzyłem sobie plik *.yml, załadowałem go:
pl:
hello: "Hello World!"
require "i18n"
I18n.load_path = "localization.yml"
I18n.default_locale = :pl
Nie wiem czy powyższe zrobiłem dobrze. Błędu nie wyrzuca, więc chyba dobrze. Tylko nie mam pojęcia, jak jakiś klucz wczytać. Jedyne tutoriale co znajduje to do Railsów, a w Railsach jest to wbudowane w helper.
No właśnie, to już próbowałem i otrzymałem: http://scr.hu/4bx/l2b5j
Dlatego pomyślałem, że może metoda zła. Próbowałem przeinstalować gem (instalowałem gem install i18n), ale to i tak nie działa, poza tym przy instalacji wszystko jest OK.
IMHO to coś mam zepsute z gemem. Zmieniłem load_path na tablicę tak jak w przykładzie, ale nadal nie działa:
require "i18n"
I18n.load_path = ["localization.yml"]
I18n.locale = :pl
puts I18n.t('hello') http://scr.hu/4bx/yg3wc
Teraz błąd, że nie znaleziono pliku. Próbowałem z “./” - też nie działa, a plik jest w tym samym katalogu co skrypt i tym samym katalogu, na którym mam ustawioną ścieżkę w konsoli. Po prostu nie mam pojęcia, co jest źle.
require ‘psych’
p Psych.load_file(Dir[’*.yml’].first)[/code]
D:/Ruby/lib/ruby/1.9.1/psych.rb:203:in `parse': (localization.yml): found charac
ter that cannot start any token while scanning for the next token at line 2 colu
mn 1 (Psych::SyntaxError)
from D:/Ruby/lib/ruby/1.9.1/psych.rb:203:in `parse_stream'
from D:/Ruby/lib/ruby/1.9.1/psych.rb:151:in `parse'
from D:/Ruby/lib/ruby/1.9.1/psych.rb:127:in `load'
from D:/Ruby/lib/ruby/1.9.1/psych.rb:297:in `block in load_file'
from D:/Ruby/lib/ruby/1.9.1/psych.rb:297:in `open'
from D:/Ruby/lib/ruby/1.9.1/psych.rb:297:in `load_file'
from a.rb:7:in `<main>'
Myślałem, że podstawowe rzeczy jeszcze da się na Windowsie robić w Rubim (Win to mój główny system), ale najwyraźniej nie daje rady x,x
Any ideas?
Good for you, ale
nie wierze, że syntax error w yml manifestuje sie jako ENOENT. Nawet w Win. Napewno nie zamieszałeś czegoś ze stacktracem (http://scr.hu/4bx/yg3wc) @soanvig ?