DGS Multilingual: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:


==<span style="color:#000000;text-shadow:0.05em 0.05em 0.2em #00000099;">Description</span>==
==<span style="color:#000000;text-shadow:0.05em 0.05em 0.2em #00000099;">Description</span>==
*1. DGS has a built-in multilingul (multi-languae) system.
*1. DGS has a built-in multilingual (multi-language) system.
*2. Multilingul allows dynamic language changing and prevents non-essential GUI recreating or text reset by code.
*2. multilingual allows dynamic language changing and prevents non-essential GUI recreating or text reset by code.
*3. DGS Multilingul system will specify the structure of '''Translation Table''' (Dictionary).
*3. DGS multilingual system will specify the structure of '''Translation Table''' (Dictionary).


==<span style="color:#000000;text-shadow:0.05em 0.05em 0.2em #00000099;">Usage 1</span>==
==<span style="color:#000000;text-shadow:0.05em 0.05em 0.2em #00000099;">Usage 1 (Basic usage)</span>==
*0. Don't forget to '''import DGS Head''' or use '''export.dgs:'''.
*0. Don't forget to '''import DGS Head''' or use "'''export.dgs:'''".
*1. A '''Translation Table''' (Dictionary) should be specified:
*1. A '''Translation Table''' (Dictionary) should be specified:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 29: Line 29:
</syntaxhighlight>
</syntaxhighlight>


==<span style="color:#000000;text-shadow:0.05em 0.05em 0.2em #00000099;">Usage 2</span>==
==<span style="color:#000000;text-shadow:0.05em 0.05em 0.2em #00000099;">Usage 2 (Basic usage)</span>==
*0. Don't forget to '''import DGS Head''' or use '''export.dgs:'''.
*0. Don't forget to '''import DGS Head''' or use "'''export.dgs:'''".
*1. A '''Translation Table''' (Dictionary) should be specified:
*1. A '''Translation Table''' (Dictionary) should be specified:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 55: Line 55:
</syntaxhighlight>
</syntaxhighlight>


==<span style="color:#000000;text-shadow:0.05em 0.05em 0.2em #00000099;">Usage 3</span>==
==<span style="color:#000000;text-shadow:0.05em 0.05em 0.2em #00000099;">Usage 3 (With parameters)</span>==
*0. Don't forget to '''import DGS Head''' or use '''export.dgs:'''.
*0. Don't forget to '''import DGS Head''' or use "'''export.dgs:'''".
*1. A '''Translation Table''' (Dictionary) should be specified. And here we have an extra '''%rep%''' that takes the place of '''parameter''':
*1. A '''Translation Table''' (Dictionary) should be specified. And here we have an extra '''%rep%''' that takes the place of '''parameter''':
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Line 82: Line 82:
</syntaxhighlight>
</syntaxhighlight>


==<span style="color:#000000;text-shadow:0.05em 0.05em 0.2em #00000099;">Usage 4</span>==
==<span style="color:#000000;text-shadow:0.05em 0.05em 0.2em #00000099;">Usage 4 (High Level Translation)</span>==
*0. Don't forget to '''import DGS Head''' or use '''export.dgs:'''.
*0. Don't forget to '''import DGS Head''' or use "'''export.dgs:'''".
*1. A '''Translation Table''' (Dictionary) should be specified. And DGS parameter support 2nd level translation:
*1. A '''Translation Table''' (Dictionary) should be specified. And DGS parameter support 2nd level translation:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
Dict = {
Dict = {
TestText1="Welcome To %rep%. Have a good time %rep%",
TestText="Welcome To %rep%. Have a good time %rep%",
Smile=":)",
Smile=":)",
}
}
Line 102: Line 102:
</syntaxhighlight>
</syntaxhighlight>


*4. Create a label, and use 2nd translation:
*4. Create a label, and use 2nd level translation:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, {"TestText1","DGS", {"Smile"}}, true )
label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, {"TestText","DGS", {"Smile"}}, true )
</syntaxhighlight>
or more
<syntaxhighlight lang="lua">
label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, {"TestText","DGS", {"TestText",{"TestText","Smile","Smile"},"Smile"}}, true )
</syntaxhighlight>
 
==<span style="color:#000000;text-shadow:0.05em 0.05em 0.2em #00000099;">Usage 5 (Conditional Translation)</span>==
*0. Don't forget to '''import DGS Head''' or use "'''export.dgs:'''".
*1. A '''Translation Table''' (Dictionary) should be specified. And the translation item should be a table includes ''condition''s and ''result''s.
<syntaxhighlight lang="lua">
testDict = {
exampleTranslation = {
"health == 'Superman'",    "You are a superman",
"find({0}, health)",              "Your health is 0",
"health <= 40",                  "Your health is low",
"health <= 60",                  "Your health is medium",
"health <= 80",                  "Your health is high",
"Your health is $health",
}
}
</syntaxhighlight>
 
*2. The table seems to be hard to understand. But actually, you can understand it like this:
<syntaxhighlight lang="lua">
if health == 'Superman' then          --condition 1
return "You are a superman"      --result 1
elseif find({0}, health) then              --condition 2
return "Your health is 0"              --result 2
elseif health <= 40 then                  --condition 3
return "Your health is low"          --result 3
elseif health <= 60 then                  --condition 4
return "Your health is medium"  --result 4
elseif health <= 80 then                  --condition 5
return "Your health is high"        --result 5
else
return "Your health is "..health    --result if not matched (this must exist)
end
</syntaxhighlight>
 
*3. In the condition, we provides [[string]], [[table]] and following functions:
<syntaxhighlight lang="lua">
bool find( table matchTable, mixed anythingToMatch )
</syntaxhighlight>
 
*4. Then send the dictionary into DGS:
<syntaxhighlight lang="lua">
dgsSetTranslationTable("testDict",testDict) --Name,Dictionary.
</syntaxhighlight>
 
*5. Now, DGS knows that dictionary, tell DGS we want to use it:
<syntaxhighlight lang="lua">
dgsSetAttachTranslation("testDict")
</syntaxhighlight>
 
*6. Create a label, and use conditional translation:
<syntaxhighlight lang="lua">
label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, { "TestText", health=40 }, true )
</syntaxhighlight>
With DGS translation property listener, you can also do this:
<syntaxhighlight lang="lua">
label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, {"TestText", health=20 }, true )
dgsTranslationAddPropertyListener(label,"health") --Properties have higher priority than the items in text table
dgsSetProperty(label,"health","Superman")
setTimer(function()
dgsSetProperty(label,"health",60)
end,1000,1)
</syntaxhighlight>
 
==<span style="color:#000000;text-shadow:0.05em 0.05em 0.2em #00000099;">Usage 6 (Language Change)</span>==
*0. Don't forget to '''import DGS Head''' or use "'''export.dgs:'''".
*1. A '''Translation Table''' (Dictionary) should be specified:
<syntaxhighlight lang="lua">
Dict1 = {
TestText="Welcome To DGS",
}
Dict2 = {
TestText="SGD oT emocleW",
}
</syntaxhighlight>
 
*2. And, send the dictionary into DGS:
<syntaxhighlight lang="lua">
dgsSetTranslationTable("testDict",Dict1) --Name,Dictionary.
</syntaxhighlight>
 
*3. Now, DGS knows that dictionary, tell DGS we want to use it:
<syntaxhighlight lang="lua">
dgsSetAttachTranslation("testDict")
</syntaxhighlight>
 
*4. Create a label:
<syntaxhighlight lang="lua">
label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, {"TestText"}, true )
</syntaxhighlight>
 
*4. Replace the dictionary (language changed), and you will see the text changed automatically:
<syntaxhighlight lang="lua">
dgsSetTranslationTable("testDict",Dict2)
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 14:16, 28 January 2023

Description

  • 1. DGS has a built-in multilingual (multi-language) system.
  • 2. multilingual allows dynamic language changing and prevents non-essential GUI recreating or text reset by code.
  • 3. DGS multilingual system will specify the structure of Translation Table (Dictionary).

Usage 1 (Basic usage)

  • 0. Don't forget to import DGS Head or use "export.dgs:".
  • 1. A Translation Table (Dictionary) should be specified:
Dict = {
	TestText1="Welcome To DGS",
}
  • 2. And, send the dictionary into DGS:
dgsSetTranslationTable("testDict",Dict) --Name,Dictionary.
  • 3. Now, DGS knows that dictionary, we need to tell DGS we want to use it:
dgsSetAttachTranslation("testDict") --This is global setting to one resource
  • 3. Create a label:
label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, {"TestText"}, true )

Usage 2 (Basic usage)

  • 0. Don't forget to import DGS Head or use "export.dgs:".
  • 1. A Translation Table (Dictionary) should be specified:
Dict = {
	TestText1="Welcome To DGS",
}
  • 2. And, send the dictionary into DGS:
dgsSetTranslationTable("testDict",Dict) --Name,Dictionary.
  • 3. Now, DGS knows that dictionary, we can create a label and attach its text to the dictionary:
label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, {"TestText"}, true )
dgsAttachToTranslation(label,"testDict") --Only attach one element to the dictionary.

Or you can also do:

label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, "", true )
dgsAttachToTranslation(label,"testDict") --Only attach one element to the dictionary.
dgsSetText(label,{"TestText"})

Usage 3 (With parameters)

  • 0. Don't forget to import DGS Head or use "export.dgs:".
  • 1. A Translation Table (Dictionary) should be specified. And here we have an extra %rep% that takes the place of parameter:
Dict = {
	TestText1="Welcome To %rep%",
	TestText2="Welcome To %rep% %rep%",
}
  • 2. And, send the dictionary into DGS:
dgsSetTranslationTable("testDict",Dict) --Name,Dictionary.
  • 3. Now, DGS knows that dictionary, tell DGS we want to use it:
dgsSetAttachTranslation("testDict")
  • 4. Create a label, pass "DGS" as the argument
label1 = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, {"TestText1","DGS"}, true )
label2 = dgsCreateLabel (0.51, 0.64, 0.16, 0.14, {"TestText2","DGS",":D"}, true )  -- 2 parameters.
label3 = dgsCreateLabel (0.51, 0.74, 0.16, 0.14, {"TestText2","DGS"}, true )  -- the rest unused '''%rep%''' will be deleted.

Usage 4 (High Level Translation)

  • 0. Don't forget to import DGS Head or use "export.dgs:".
  • 1. A Translation Table (Dictionary) should be specified. And DGS parameter support 2nd level translation:
Dict = {
	TestText="Welcome To %rep%. Have a good time %rep%",
	Smile=":)",
}
  • 2. And, send the dictionary into DGS:
dgsSetTranslationTable("testDict",Dict) --Name,Dictionary.
  • 3. Now, DGS knows that dictionary, tell DGS we want to use it:
dgsSetAttachTranslation("testDict")
  • 4. Create a label, and use 2nd level translation:
label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, {"TestText","DGS", {"Smile"}}, true )

or more

label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, {"TestText","DGS", {"TestText",{"TestText","Smile","Smile"},"Smile"}}, true )

Usage 5 (Conditional Translation)

  • 0. Don't forget to import DGS Head or use "export.dgs:".
  • 1. A Translation Table (Dictionary) should be specified. And the translation item should be a table includes conditions and results.
testDict = {
	exampleTranslation = {
		"health == 'Superman'",     "You are a superman",
		"find({0}, health)",               "Your health is 0",
		"health <= 40",                   "Your health is low",
		"health <= 60",                   "Your health is medium",
		"health <= 80",                   "Your health is high",
		"Your health is $health",
	}
}
  • 2. The table seems to be hard to understand. But actually, you can understand it like this:
if health == 'Superman' then          --condition 1
	return "You are a superman"       --result 1
elseif find({0}, health) then              --condition 2
	return "Your health is 0"              --result 2
elseif health <= 40 then                  --condition 3
	return "Your health is low"          --result 3
elseif health <= 60 then                  --condition 4
	return "Your health is medium"   --result 4
elseif health <= 80 then                  --condition 5
	return "Your health is high"         --result 5
else
	return "Your health is "..health     --result if not matched (this must exist)
end
  • 3. In the condition, we provides string, table and following functions:
	bool find( table matchTable, mixed anythingToMatch )
  • 4. Then send the dictionary into DGS:
dgsSetTranslationTable("testDict",testDict) --Name,Dictionary.
  • 5. Now, DGS knows that dictionary, tell DGS we want to use it:
dgsSetAttachTranslation("testDict")
  • 6. Create a label, and use conditional translation:
label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, { "TestText", health=40 }, true )

With DGS translation property listener, you can also do this:

label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, {"TestText", health=20 }, true )
dgsTranslationAddPropertyListener(label,"health")		--Properties have higher priority than the items in text table
dgsSetProperty(label,"health","Superman")
setTimer(function()
	dgsSetProperty(label,"health",60)
end,1000,1)

Usage 6 (Language Change)

  • 0. Don't forget to import DGS Head or use "export.dgs:".
  • 1. A Translation Table (Dictionary) should be specified:
Dict1 = {
	TestText="Welcome To DGS",
}
Dict2 = {
	TestText="SGD oT emocleW",
}
  • 2. And, send the dictionary into DGS:
dgsSetTranslationTable("testDict",Dict1) --Name,Dictionary.
  • 3. Now, DGS knows that dictionary, tell DGS we want to use it:
dgsSetAttachTranslation("testDict")
  • 4. Create a label:
label = dgsCreateLabel (0.51, 0.54, 0.16, 0.14, {"TestText"}, true )
  • 4. Replace the dictionary (language changed), and you will see the text changed automatically:
dgsSetTranslationTable("testDict",Dict2)