Języki i tłumaczenia
UI gry może działać w 9 językach: en, pt, de, pl, tr, es, fr, it, ru. Nie każdy tekst jest już przetłumaczony, to, czego brakuje, wraca do angielskiego.
Jak to działa
Dział zatytułowany „Jak to działa”- Wybór każdego gracza jest zapisywany per konto (
bs_users.language, dodane migracją030_user_language.sql) i publikowany w state bagu graczabs_lang. - Pusty wybór oznacza “podążaj za domyślnym serwera”. Domyślny pochodzi z F1
Global.defaultLanguage, inaczej z convarabs_defaultLanguage, inaczejen. Jest wGlobalState.bs_defaultLang. - Gracze zmieniają go w zakładce Settings ekwipunku. To odpala
bs_core:setLanguage, a każdy resource aktualizuje się na żywo, bez ponownego łączenia. exports.bs_core:GetLanguage(src)daje język gracza po stronie serwera.
Tłumaczenie resource’a
Dział zatytułowany „Tłumaczenie resource’a”Resource’y z folderem locales/ na razie: bs_admin, bs_bodily, bs_boosters, bs_building, bs_chat, bs_cinecam, bs_core, bs_crafting, bs_drugs, bs_economy, bs_emotes, bs_events, bs_extraction, bs_faction_bases, bs_factions, bs_gadgets, bs_gates, bs_interactions, bs_inventory, bs_jobs, bs_medical, bs_menu, bs_mining, bs_multichar, bs_radial, bs_recycler, bs_scenes, bs_scoreboard, bs_skills, bs_stash, bs_tester, bs_traders, bs_ui, bs_vehicles, bs_vip, bs_weapons, bs_zombies.
Funkcje Lua i NUI są w API locale.
1. fxmanifest
Dział zatytułowany „1. fxmanifest”shared_script '@bs_core/shared/sh_locale.lua'files { 'locales/*.lua' }2. locales/<lang>.lua
Dział zatytułowany „2. locales/<lang>.lua”Każdy plik zwraca płaską tabelę. {name} to placeholder.
-- locales/en.luareturn { ['ui.level'] = 'LEVEL', ['msg.picked_up'] = 'You picked up {item}.',}Skopiuj en.lua do pt.lua (i tak dalej) i przetłumacz wartości. Nigdy nie tłumacz kluczy. Brakujący klucz wraca do angielskiego, potem do samego klucza, więc na wpół gotowy plik jest w porządku.
-- client: the local player's languagelocal s = L('msg.picked_up', { item = 'Bandage' })
-- server: L(src, key, vars) or Lp(src, key, vars) uses that player's languageTriggerClientEvent('chat:addMessage', src, { args = { L(src, 'msg.picked_up', { item = 'Bandage' }) } })
-- server without a source: the server defaultprint(L('msg.picked_up', { item = 'Bandage' }))BSLocale.OnChange(function(lang) ... end) odpala się na kliencie, gdy język się zmienia, dla tekstu, który zbudowałeś sam.
Jeśli resource ma ui_page, skrypt locale wysyła scaloną tabelę do strony. Załaduj wspólny helper przed skryptem swojej strony:
<script src="nui://bs_ui/html/js/i18n.js"></script>Potem oznacz HTML. Angielski tekst w znacznikach to fallback:
<span data-i18n="ui.level">LEVEL</span><p data-i18n-html="ui.help_html">Press <b>E</b></p><input data-i18n-attr="placeholder:ui.search;title:ui.search_tip" placeholder="Search">W JS używaj t('key', { name: 'x' }) i BSI18n.onChange(fn), żeby przerysować dynamiczny tekst.
Wskazówki
Dział zatytułowany „Wskazówki”- Trzymaj klucze stabilne i pogrupowane (
ui.,msg.,err.). Zmiana klucza psuje wszystkie jego tłumaczenia. - Nie wpisuj tekstu o balansie z liczbami na sztywno, używaj placeholderów, żeby liczba podążała za configiem.
bs19.org · Privacy · Terms · Cookie settings
Cookies and outside content
The site only needs two essential cookies to keep you logged in and protect forms. Videos and streams from YouTube and Twitch load from their servers, which can set their own cookies, so they stay off until you say yes. Nothing is pre-ticked and you can change your mind any time with "Cookie settings" at the bottom of every page. Details.
Questions about the server, the framework or the site? A real person reads this, usually within a day.