←  Tutoriale

AMXX.pl: Support AMX Mod X i SourceMod

»

Piszemy wielojęzyczny plugin!

  • +
  • -
FakeNick - zdjęcie FakeNick 14.09.2008

Słowem wstępu
W tym krótkim tutorialu postaram pokazać się Wam jak stworzyć wielojęzyczny plugin (np. po angielsku oraz polsku).
Przedstawione tu treści są dla troszeczkę bardziej zaawansowanych, więc jeżeli nigdy nie miałeś do czynienia z pisaniem plugin'ów, zabierz się za moje wcześniejsze tutoriale ;].
Zaczynamy!

Piszemy wielojęzyczny plugin!
Najpierw musimy sporządzić jakiś słownik (plik .txt z którego plugin będzie brał teksty wyświetlane graczowi).
Przykładowy słownik może wyglądać tak :
[pl]
MSG_DEAD_PLAYER = cos

Będą to wiadomości wyświetlane, czy język gracza to polski.
Dla języka angielskiego będzie to :
[en]
MSG_DEAD_PLAYER = something

Jak już pewnie zauważyliście wiadomość zapisana w słowniku składa się z jej nazwy (MSG_DEAD_PLAYER) i treści (cos).
Teraz możecie stworzyć już własny słownik :).

Aby nasz plugin mógł być wielojęzyczny, musimy najpierw zarejestrować słownik dla niego.
Robimy to dzięki komendzie :
register_dictionary("nazwa_słownika.txt")
nazwa_slownika to nazwa pliku słownika.
Plik .txt musi znajdować się a w
addons/amxmodx/data/lang
Teraz chcemy, aby wiadomość wypisywana dla gracza była pobierana z naszego słownika.
Robimy to wywołując instrukcję :
client_print(id,print_center,"%L",LANG_PLAYER,"MSG_DEAD_PLAYER")
Pewnie po obejrzeniu tego kawałka kodu złapaliście się za głowę, ale już spieszę z wyjaśnieniem go.
Instrukcję client_print zapewne już znacie. id to identyfikator gracza. %L mówi silnikowi gry, że ta wiadomość ma zostać pobrana ze słownika.
LANG_PLAYER to instrukcja określająca, że wiadomość ma być w takim języku, jaki gracz ma ustawiony w amx_langmenu.
Ostatni, ale najważniejszy parametr ("JAKAS_WIAD") to nazwa wiadomości w słowniku :).

Słowem zakończenia
Mam nadzieję, że ten krótki tutorial pomógł Wam i rozjaśnij sprawę pisania plugin'ów wielojęzycznych.
Odpowiedz

  • +
  • -
berix - zdjęcie berix 16.11.2008

wszstko spoko dopubi to tylko odnosi sie do
client_print
a co z innymi metodami wyświetlania:

register_menucmd(register_menuid())

len += format()

show_hudmessage()
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 20.12.2008

Działa ze wszystkimi funkcjami operującymi na ciągach formatujących.

Warto też wspomnieć o pliku common.txt, zawiera przetłumaczone na wiele języków różne przydatne słowa/komunikaty - głównie do menu.

Słownikowe frazy mogą też zawierać instrukcje formatujące.

[pl]
MSG_NR_1 = Wiadomosc nr 1 do gracza o nicku %s

Wtedy musimy pamiętać tylko o kolejności:
new playerName[40];
get_user_name(id,playerName,39);
client_print(id,print_center,"%L",LANG_PLAYER,"MSG_NR_1", playerName);
Odpowiedz

GT Team - zdjęcie GT Team 23.04.2013

Jeszcze jedno pytanie, co się stanie gdy zamiast tak :

new playerName[40];
get_user_name(id,playerName,39)
client_print(id,print_center,"%L",LANG_PLAYER,"MSG_NR_1", playerName)
 

 

dam tak :

new playerName[40];
get_user_name(id,playerName,39);
client_print(id,print_center,"%L", id ,"MSG_NR_1", playerName)
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 23.04.2013

Jeszcze jedno pytanie, co się stanie gdy zamiast tak :
 

new playerName[40];
get_user_name(id,playerName,39)
client_print(id,print_center,"%L",LANG_PLAYER,"MSG_NR_1", playerName)
 
 
dam tak :
 
new playerName[40];
get_user_name(id,playerName,39);
client_print(id,print_center,"%L", id ,"MSG_NR_1", playerName)

Nic, wyświetli to samo.
Odpowiedz

GT Team - zdjęcie GT Team 25.04.2013

A ma to wpływ na "przemienianie" języka z eng na pl co np. X sec ?
Odpowiedz