Dołączanie linijki konfiguracyjnej do każdego includowanego pliku

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?

Użyj I18n i trzymaj tłumaczenia w pliku yml.

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

Np. ‘’# encoding: utf-8"

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.

Używasz dokładnie tak samo jak w railsach, tylko musisz wywołać metodę na klasie I18n:

puts I18n.t('hello')

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.

Proszę, krok po kroku: http://titusd.co.uk/2010/03/04/i18n-internationalization-without-rails/

Still does not work.

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.

typo?
wrzuć na początku pliku

p Dir['*.yml']

Znajduje plik

"ścieżka do folderu głównego aplikacji" > irb irb > Dir['*.yml'] => ["localization.yml"] irb > _
Plik localization.yml

pl: hello: "Hello World!"
(nie działa czy jest, czy nie ma cudzysłowu)

wywala się na YAML.load_file(filename) gdzie filename to “localization.yml”

wskocz do źródeł gema (odpal gem which i18n, żeby zobaczyć ścieżke do źródeł) i dodaj przed tą linijką https://github.com/svenfuchs/i18n/blob/2553ed29fdbfde801392b0cab9be9fff851cf9c1/lib/i18n/backend/base.rb#L172

p Dir.pwd p Dir['*.yml']
potem powtórz to co robisz i zobacz co wypisze

Podaje poprawny folder i wykrywa ten plik yml. Wynik taki sam, jak w przypadku uruchamiania powyższych poleceń z głównego skryptu.

ach te windowsy…

a jak odpalisz w tym katalogu ręczne parsowanie ymla:

require 'psych' p Psych.load_file(Dir['*.yml'].first)
to daje radę?

[code]#require “i18n”
#I18n.load_path = [“localization.yml”]
#I18n.locale = :pl
#puts I18n.t(‘hello’)

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?

google podpowiada, że w pliku .yml użyłeś w drugiej linii taba, zamiast spacji (dwóch spacji).
Zobacz, może to to :slight_smile:

OSZ, ty :smiley:
Masz rację! Nie wiedziałem, że to ma znaczenie, a już byłem zbyt znużony, żeby sprawdzać błąd wyrzucony przez psycha

OK. temat rozwiązany, wielkie dzięki wszyscy: @maciekd. @cube, @rubytree, @sarniak. Od każdego się czegoś dowiedziałem :slight_smile:

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 ?