Jump to content

Zamiana w stringu


Recommended Posts

Posted

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...

Posted
  
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) 
  

Posted

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

Posted

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

Posted (edited)

To w żaden sposób nie rozwiązuje przedstawionego problemu: w niektórych tłumaczeniach kolejność argumentów musi być inna.

Edited by Guest
Posted

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 ;)

Posted

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.

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...