fix: language bug, store custom object

This commit is contained in:
Qwreey 2023-02-23 14:13:15 +09:00
parent 29b3f26d89
commit 049ee5b60a
8 changed files with 240 additions and 199 deletions

View file

@ -1,48 +1,48 @@
**Default** (default)
**English** (en_us)
**Spanish** (es_es)
**French** (fr_fr)
**Indonesian** (id_id)
**Italian** (it_it)
**Japanese** (ja_jp)
**Korean** (ko_kr)
**Russian** (ru_ru)
**Thai** (th_th)
**Turkish** (tr_tr)
**Vietnamese** (vi_vn)
**Portuguese** (pt_br)
**German** (de_de)
**ChineseSimplified** (zh_cn)
**ChineseTraditional** (zh_tw)
**Bulgarian** (bg_bg)
**Bengali** (bn_bd)
**Czech** (cs_cz)
**Danish** (da_dk)
**Greek** (el_gr)
**Estonian** (et_ee)
**Finnish** (fi_fi)
**Hindi** (hi_in)
**Croatian** (hr_hr)
**Hungarian** (hu_hu)
**Georgian** (ka_ge)
**Kazakh** (kk_kz)
**Khmer** (km_kh)
**Lithuanian** (lt_lt)
**Latvian** (lv_lv)
**Malay** (ms_my)
**Burmese** (my_mm)
**Bokmal** (nb_no)
**Dutch** (nl_nl)
**Filipino** (fil_ph)
**Polish** (pl_pl)
**Romanian** (ro_ro)
**Ukrainian** (uk_ua)
**Sinhala** (si_lk)
**Slovak** (sk_sk)
**Slovenian** (sl_sl)
**Albanian** (sq_al)
**Bosnian** (bs_ba)
**Serbian** (sr_rs)
**Swedish** (sv_se)
**Arabic** (ar_001)
**English** (en-us)
**Spanish** (es-es)
**French** (fr-fr)
**Indonesian** (id-id)
**Italian** (it-it)
**Japanese** (ja-jp)
**Korean** (ko-kr)
**Russian** (ru-ru)
**Thai** (th-th)
**Turkish** (tr-tr)
**Vietnamese** (vi-vn)
**Portuguese** (pt-br)
**German** (de-de)
**ChineseSimplified** (zh-cn)
**ChineseTraditional** (zh-tw)
**Bulgarian** (bg-bg)
**Bengali** (bn-bd)
**Czech** (cs-cz)
**Danish** (da-dk)
**Greek** (el-gr)
**Estonian** (et-ee)
**Finnish** (fi-fi)
**Hindi** (hi-in)
**Croatian** (hr-hr)
**Hungarian** (hu-hu)
**Georgian** (ka-ge)
**Kazakh** (kk-kz)
**Khmer** (km-kh)
**Lithuanian** (lt-lt)
**Latvian** (lv-lv)
**Malay** (ms-my)
**Burmese** (my-mm)
**Bokmal** (nb-no)
**Dutch** (nl-nl)
**Filipino** (fil-ph)
**Polish** (pl-pl)
**Romanian** (ro-ro)
**Ukrainian** (uk-ua)
**Sinhala** (si-lk)
**Slovak** (sk-sk)
**Slovenian** (sl-sl)
**Albanian** (sq-al)
**Bosnian** (bs-ba)
**Serbian** (sr-rs)
**Swedish** (sv-se)
**Arabic** (ar-001)

View file

@ -53,6 +53,8 @@ local myClass = Class.Extend()
-- 일반 오브젝트와 똑같이 id 를 넣고 GetObject 로
-- 가져올 수도 있습니다
local main = myClass "main" {
-- 이 테이블은 모듈의 :Init(props) 에 제공됩니다.
-- :Render(props) 에도 이 테이블이 제공됩니다.
Testing = 1;
Text = "Test";
-- 레지스터 값을 넘겨줄 수도 있습니다.

View file

@ -31,12 +31,21 @@ myStore.color = Color3.fromRGB(0,0,0)
???+ Warning "주의"
구현의 복잡성의 이유로 레지스터는 오브젝트 생성시에만 등록할 수 있습니다.
```lua
local myFrame = Frame{}
Frame.BackgroundColor3 = myStore "color"
```
위처럼 사용할 수 없습니다.
```lua
local myFrame = Frame{}
Apply (myFrame) {
BackgroundColor3 = myStore "color";
}
```
> 1. 스토어를 생성함.
> 2. 기본 값을 설정함.
> 3. 스토어를 호출해 레지스터를 얻어 등록함.

View file

@ -12,7 +12,7 @@
Quad 에는 귀찮은 언어관리를 자동으로 해주는 기능이 내장되어 있습니다. 이 기능은 register 와 연동해 적은 줄의 코드로 변하는 텍스트도 언어에 맞게 출력되도록 만들 수 있습니다.
번역 테이블은 `#!ts Lang.New(LangName:string,{ [Locale]: string|(options)->string })` 다음을 이용해 만들 수 있으며.
`Lang(LangName:string)(options)` 로 UI 에 적용시킬 수 있습니다.
`#!ts Lang(LangName:string)(options)->register` 로 UI 에 적용시킬 수 있습니다.
=== "용법"
@ -78,6 +78,27 @@ Quad 에는 귀찮은 언어관리를 자동으로 해주는 기능이 내장되
end
```
???+ Warning "주의"
구현의 복잡성의 이유로 Lang 은 레지스터와 같은 제약을 가집니다 (오브젝트 생성시에만 등록할 수 있습니다)
```lua
local myLabel = TextLabel{}
Lang.new("Test",{ [Lang.Locales.Default] = "{lang}" })
myLabel.Text = Lang "Test" { lang = 1 }
```
위처럼 사용할 수 없습니다.
대신에 `#!ts :Register` 문법을 사용하여 등록할 수 있습니다.
```lua
local myLabel = TextLabel{}
Lang.new("Test",{ [Lang.Locales.Default] = "{lang}" })
Apply (myLabel) {
Text = Lang "Test" { lang = 1 };
}
```
---
## Locale 목록

View file

@ -27,6 +27,7 @@ function module.init(shared)
local round = shared.Round ---@type quad_module_round
local signal = shared.Signal ---@type quad_module_signal
local bindable = signal.Bindable
local PcallGetProperty = store.PcallGetProperty
local function InstanceNewWithName(classname,parent,name)
local item = InstanceNew(classname,parent)
@ -108,16 +109,6 @@ function module.init(shared)
end
new.SetProperty = SetProperty
local function RawGetProperty(item,index)
return item[index]
end
local function PcallGetProperty(item,index)
local ok,err = pcall(RawGetProperty,item,index)
if ok then return err end
return nil
end
new.PcallGetProperty = PcallGetProperty
local function Link(linker,item,index,indexType)
local target = linker.target
local name = linker.name
@ -550,6 +541,11 @@ function module.init(shared)
return this
end
local function Apply()
end
new.Apply = Apply
return new
end

View file

@ -13,52 +13,52 @@ function module.init(shared)
new.Locales = {
["Default"] = "default";
["English"] = "en_us";
["Spanish"] = "es_es";
["French"] = "fr_fr";
["Indonesian"] = "id_id";
["Italian"] = "it_it";
["Japanese"] = "ja_jp";
["Korean"] = "ko_kr";
["Russian"] = "ru_ru";
["Thai"] = "th_th";
["Turkish"] = "tr_tr";
["Vietnamese"] = "vi_vn";
["Portuguese"] = "pt_br";
["German"] = "de_de";
["ChineseSimplified"] = "zh_cn";
["ChineseTraditional"] = "zh_tw";
["Bulgarian"] = "bg_bg";
["Bengali"] = "bn_bd";
["Czech"] = "cs_cz";
["Danish"] = "da_dk";
["Greek"] = "el_gr";
["Estonian"] = "et_ee";
["Finnish"] = "fi_fi";
["Hindi"] = "hi_in";
["Croatian"] = "hr_hr";
["Hungarian"] = "hu_hu";
["Georgian"] = "ka_ge";
["Kazakh"] = "kk_kz";
["Khmer"] = "km_kh";
["Lithuanian"] = "lt_lt";
["Latvian"] = "lv_lv";
["Malay"] = "ms_my";
["Burmese"] = "my_mm";
["Bokmal"] = "nb_no";
["Dutch"] = "nl_nl";
["Filipino"] = "fil_ph";
["Polish"] = "pl_pl";
["Romanian"] = "ro_ro";
["Ukrainian"] = "uk_ua";
["Sinhala"] = "si_lk";
["Slovak"] = "sk_sk";
["Slovenian"] = "sl_sl";
["Albanian"] = "sq_al";
["Bosnian"] = "bs_ba";
["Serbian"] = "sr_rs";
["Swedish"] = "sv_se";
["Arabic"] = "ar_001";
["English"] = "en-us";
["Spanish"] = "es-es";
["French"] = "fr-fr";
["Indonesian"] = "id-id";
["Italian"] = "it-it";
["Japanese"] = "ja-jp";
["Korean"] = "ko-kr";
["Russian"] = "ru-ru";
["Thai"] = "th-th";
["Turkish"] = "tr-tr";
["Vietnamese"] = "vi-vn";
["Portuguese"] = "pt-br";
["German"] = "de-de";
["ChineseSimplified"] = "zh-cn";
["ChineseTraditional"] = "zh-tw";
["Bulgarian"] = "bg-bg";
["Bengali"] = "bn-bd";
["Czech"] = "cs-cz";
["Danish"] = "da-dk";
["Greek"] = "el-gr";
["Estonian"] = "et-ee";
["Finnish"] = "fi-fi";
["Hindi"] = "hi-in";
["Croatian"] = "hr-hr";
["Hungarian"] = "hu-hu";
["Georgian"] = "ka-ge";
["Kazakh"] = "kk-kz";
["Khmer"] = "km-kh";
["Lithuanian"] = "lt-lt";
["Latvian"] = "lv-lv";
["Malay"] = "ms-my";
["Burmese"] = "my-mm";
["Bokmal"] = "nb-no";
["Dutch"] = "nl-nl";
["Filipino"] = "fil-ph";
["Polish"] = "pl-pl";
["Romanian"] = "ro-ro";
["Ukrainian"] = "uk-ua";
["Sinhala"] = "si-lk";
["Slovak"] = "sk-sk";
["Slovenian"] = "sl-sl";
["Albanian"] = "sq-al";
["Bosnian"] = "bs-ba";
["Serbian"] = "sr-rs";
["Swedish"] = "sv-se";
["Arabic"] = "ar-001";
}
local function GetLocale()
@ -75,6 +75,7 @@ function module.init(shared)
local weak = {__mode = "v"}
local lang = {}
local langList = {}
lang.__index = lang
function lang.New(id,handlers)
local this = {
@ -84,7 +85,7 @@ function module.init(shared)
index=1;
registers = setmetatable({},weak);
}
lang[id] = this
langList[id] = this
if not handlers[new.Locales.Default] then
warn(("Localization %s have no Default value, Did you missed '[Lang.Locales.Default] = ...' ? It may make Localization fail on other languages"))
end
@ -205,7 +206,7 @@ function module.init(shared)
end
function new.Update()
for _,this in pairs(lang) do
for _,this in pairs(langList) do
this:UpdateAll()
end
end
@ -213,7 +214,7 @@ function module.init(shared)
setmetatable(new,{
__call = function(_,id)
return function (options)
local data = lang[id]
local data = langList[id]
if not data then
error(("Localization %s is not definded"):format(id))
end

View file

@ -40,6 +40,16 @@ function module.init(shared)
local items = {}
new.Items = items
local function RawGetProperty(item,index)
return item[index]
end
local function PcallGetProperty(item,index)
local ok,err = pcall(RawGetProperty,item,index)
if ok then return err end
return nil
end
new.PcallGetProperty = PcallGetProperty
-- id space (array of object)
local objectListClass = {__type = "quad_objectlist"}
function objectListClass:EachAsync(func)
@ -290,7 +300,7 @@ function module.init(shared)
end
function store:__newindex(key,value)
-- if got register, just copy data to self and connect
if type(value) == "table" and value.__type == "quad_register" then
if PcallGetProperty(value,"__type") == "quad_register" then
-- warn "[Quad] adding register value on store is only allowed when init store. set value request was ignored"
local selfValues = self.__self

View file

@ -218,100 +218,102 @@ export type langHandler = {
export type Locale = string
export type module_lang = {
New: (id:string,handlers:{
en_us: langHandler;
es_es: langHandler;
fr_fr: langHandler;
id_id: langHandler;
it_it: langHandler;
ja_jp: langHandler;
ko_kr: langHandler;
ru_ru: langHandler;
th_th: langHandler;
tr_tr: langHandler;
vi_vn: langHandler;
pt_br: langHandler;
de_de: langHandler;
zh_cn: langHandler;
zh_tw: langHandler;
bg_bg: langHandler;
bn_bd: langHandler;
cs_cz: langHandler;
da_dk: langHandler;
el_gr: langHandler;
et_ee: langHandler;
fi_fi: langHandler;
hi_in: langHandler;
hr_hr: langHandler;
hu_hu: langHandler;
ka_ge: langHandler;
kk_kz: langHandler;
km_kh: langHandler;
lt_lt: langHandler;
lv_lv: langHandler;
ms_my: langHandler;
my_mm: langHandler;
nb_no: langHandler;
nl_nl: langHandler;
fil_ph: langHandler;
pl_pl: langHandler;
ro_ro: langHandler;
uk_ua: langHandler;
si_lk: langHandler;
sk_sk: langHandler;
sl_sl: langHandler;
sq_al: langHandler;
bs_ba: langHandler;
sr_rs: langHandler;
sv_se: langHandler;
ar_001: langHandler;
["default"]: langHandler;
["en-us"]: langHandler;
["es-es"]: langHandler;
["fr-fr"]: langHandler;
["id-id"]: langHandler;
["it-it"]: langHandler;
["ja-jp"]: langHandler;
["ko-kr"]: langHandler;
["ru-ru"]: langHandler;
["th-th"]: langHandler;
["tr-tr"]: langHandler;
["vi-vn"]: langHandler;
["pt-br"]: langHandler;
["de-de"]: langHandler;
["zh-cn"]: langHandler;
["zh-tw"]: langHandler;
["bg-bg"]: langHandler;
["bn-bd"]: langHandler;
["cs-cz"]: langHandler;
["da-dk"]: langHandler;
["el-gr"]: langHandler;
["et-ee"]: langHandler;
["fi-fi"]: langHandler;
["hi-in"]: langHandler;
["hr-hr"]: langHandler;
["hu-hu"]: langHandler;
["ka-ge"]: langHandler;
["kk-kz"]: langHandler;
["km-kh"]: langHandler;
["lt-lt"]: langHandler;
["lv-lv"]: langHandler;
["ms-my"]: langHandler;
["my-mm"]: langHandler;
["nb-no"]: langHandler;
["nl-nl"]: langHandler;
["fil-ph"]: langHandler;
["pl-pl"]: langHandler;
["ro-ro"]: langHandler;
["uk-ua"]: langHandler;
["si-lk"]: langHandler;
["sk-sk"]: langHandler;
["sl-sl"]: langHandler;
["sq-al"]: langHandler;
["bs-ba"]: langHandler;
["sr-rs"]: langHandler;
["sv-se"]: langHandler;
["ar-001"]: langHandler;
})->();
Locales: {
English: Locale & "en_us";
Spanish: Locale & "es_es";
French: Locale & "fr_fr";
Indonesian: Locale & "id_id";
Italian: Locale & "it_it";
Japanese: Locale & "ja_jp";
Korean: Locale & "ko_kr";
Russian: Locale & "ru_ru";
Thai: Locale & "th_th";
Turkish: Locale & "tr_tr";
Vietnamese: Locale & "vi_vn";
Portuguese: Locale & "pt_br";
German: Locale & "de_de";
ChineseSimplified: Locale & "zh_cn";
ChineseTraditional: Locale & "zh_tw";
Bulgarian: Locale & "bg_bg";
Bengali: Locale & "bn_bd";
Czech: Locale & "cs_cz";
Danish: Locale & "da_dk";
Greek: Locale & "el_gr";
Estonian: Locale & "et_ee";
Finnish: Locale & "fi_fi";
Hindi: Locale & "hi_in";
Croatian: Locale & "hr_hr";
Hungarian: Locale & "hu_hu";
Georgian: Locale & "ka_ge";
Kazakh: Locale & "kk_kz";
Khmer: Locale & "km_kh";
Lithuanian: Locale & "lt_lt";
Latvian: Locale & "lv_lv";
Malay: Locale & "ms_my";
Burmese: Locale & "my_mm";
Bokmal: Locale & "nb_no";
Dutch: Locale & "nl_nl";
Filipino: Locale & "fil_ph";
Polish: Locale & "pl_pl";
Romanian: Locale & "ro_ro";
Ukrainian: Locale & "uk_ua";
Sinhala: Locale & "si_lk";
Slovak: Locale & "sk_sk";
Slovenian: Locale & "sl_sl";
Albanian: Locale & "sq_al";
Bosnian: Locale & "bs_ba";
Serbian: Locale & "sr_rs";
Swedish: Locale & "sv_se";
Arabic: Locale & "ar_001";
Default: "default";
English: Locale & "en-us";
Spanish: Locale & "es-es";
French: Locale & "fr-fr";
Indonesian: Locale & "id-id";
Italian: Locale & "it-it";
Japanese: Locale & "ja-jp";
Korean: Locale & "ko-kr";
Russian: Locale & "ru-ru";
Thai: Locale & "th-th";
Turkish: Locale & "tr-tr";
Vietnamese: Locale & "vi-vn";
Portuguese: Locale & "pt-br";
German: Locale & "de-de";
ChineseSimplified: Locale & "zh-cn";
ChineseTraditional: Locale & "zh-tw";
Bulgarian: Locale & "bg-bg";
Bengali: Locale & "bn-bd";
Czech: Locale & "cs-cz";
Danish: Locale & "da-dk";
Greek: Locale & "el-gr";
Estonian: Locale & "et-ee";
Finnish: Locale & "fi-fi";
Hindi: Locale & "hi-in";
Croatian: Locale & "hr-hr";
Hungarian: Locale & "hu-hu";
Georgian: Locale & "ka-ge";
Kazakh: Locale & "kk-kz";
Khmer: Locale & "km-kh";
Lithuanian: Locale & "lt-lt";
Latvian: Locale & "lv-lv";
Malay: Locale & "ms-my";
Burmese: Locale & "my-mm";
Bokmal: Locale & "nb-no";
Dutch: Locale & "nl-nl";
Filipino: Locale & "fil-ph";
Polish: Locale & "pl-pl";
Romanian: Locale & "ro-ro";
Ukrainian: Locale & "uk-ua";
Sinhala: Locale & "si-lk";
Slovak: Locale & "sk-sk";
Slovenian: Locale & "sl-sl";
Albanian: Locale & "sq-al";
Bosnian: Locale & "bs-ba";
Serbian: Locale & "sr-rs";
Swedish: Locale & "sv-se";
Arabic: Locale & "ar-001";
};
CurrentLocale: Locale;
FailedMessage: string;