Jump to content

Zamiana w stringu


Recommended Posts

Witam.

Myślę nad pewną rzeczą, teoretycznie wiem jak ją zrobić, ale w praktyce z tym już gorzej.

Potrzebuję zamienić w stringu pewną rzecz w klamrach na wartość z tablicy.

Pokażę to na przykładzie, najprościej będzie to wytłumaczyć.

local table = {  
["cos"] = "Wygrałeś", 
["money"] = 1000 } 

Teraz ze stringu:

local str = "GRATULACJE! {cos} {money} 
  
  
 

Ma być:

local str = "GRATULACJE! Wygrałeś 1000 
  
  
 

Pozdrawiam i czekam na jakieś sugestie co do wykonania tego, kod, inne...

Link to comment
  
wartosci = { 
 ["cos"] = "Wygrales", 
 ["money"] = 1000  
} 
  
function r(text, podmiany) 
    for k,v in pairs(podmiany) do 
        text=string.gsub(text, "{"..k.."}", v) 
    end 
    return text 
end 
  

Tak na szybko - nie będzie działac prawidłowo z kluczami zawierającymi znaki uznawane za pattern. Klucz składające się z liter i znaków bedą działać bez zarzutu. Zwróć też uwagę, że ten kod iteruje przez wszystkie elementy tabeli podmian, więc dobrze aby nie bylo tam wartości które nie są używane.

Swoją drogą, czy string.format Ci nie wystarczy?

  
string.format("Gracz %s wygral %d!", nickGracza, ileWygral) 
  

Link to comment

Właśnie string.format mi nie wystarczy, chcę zrobić gamemode nie tylko w języku polskim, dlatego czasem argumenty będą w innej kolejności wynikające z innego ułożenia zdania.

A co do twojej pierwszej propozycji, miałem coś podobnego, działało. Myślałem, że da się to zrobić jakoś lepiej :P

Link to comment

Pewnie to już nieaktualne, ale co tam:

  
local tab={ 
    eng={ 
        grat="Congratulations!", 
        cos="You won", 
        money="1000", 
        }, 
    pl={ 
        grat="Gratulacje!", 
        cos="wygrales", 
        money="1000", 
        }, 
    } 
local lang="eng" 
print(tab[lang].grat.." "..tab[lang].cos.." "..tab[lang].money) 
lang="pl" 
print(tab[lang].grat.." "..tab[lang].cos.." "..tab[lang].money) 
  

http://luachunks.com/chunk/F216vf0a6m

Link to comment

Tylko mi nie mów że te szpagaty z pętlą i sting.gsub to lepsze rozwiązanie?

Fakt – tłumaczenie pojedynczych słów nie ma sensu, najlepiej jest przetłumaczyć całe zdanie formułując je tak żeby w każdym języku argument był na końcu:

„Wygrałeś następującą ilość kasy: 1000”

wykorzystując tą metodę można sprawić że każdy gracz będzie widział tylko tekst w języku, który zadeklarował przy wejściu na serwer, więc chyba jakiś problem to rozwiązuje ;)

Link to comment

Rozwiązanie z pętla dla mnie i dla rozwoju mojego skryptu jest lepsze.

  
langStrings = {  
    ["Polski"] = {  
        ["CHOOSED_LANG"] = "Wybrałeś język: $1!", 
        ["LOGIN_LAST_VISIT"] = "Ostatnio na serwerze byłeś $1-$2-$3 o godzinie $4:$5", 
        ... 
        } 
    ... 
} 
  

Sprawdza się bardzo dobrze, nawet jeżeli argumentów jest więcej niż jeden, lub ułożenie argumentów w innym języku się zmienia.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...