———————————————————————————————–
ZFrame Quick Help
Sample Query
Java script
Language Tag
———————————————————————————————–
Query Parameter Type
@str str => setString
@bya bya => setBytes
@lng lng => setLong
@int int => setInt
@bln bln => setBoolean
@dat dat => dd/MM/yyyy => setDate
@tis tis => dd/MM/yyyy:hh:mm:ss => setTimestamp
@tim tim => hh:mm:ss => setTime
@dec dec => setBigDecimal
@byt byt => setByte
@sho sho => setShort
@dbl dbl => setDouble
@flt flt => setfloat
@clo clo => setAsciiStream
———————————————————————————————————
———————————————-Form Query————————————————-
———————————————————————————————————
———————————————————————————————————
— Grid Source Query
— in this query you can user where keyword and order
— for big data table you must user search form for access to record data
SELECT
DBO.ACCOUNT.ACCOUNT_ID
, DBO.ACCOUNT.ACCOUNT_NAME
, DBO.ACCOUNT.ACCOUNT_CODE
, DBO.ACCOUNT.ACCOUNTTITLE_COMPLETE
, DBO.ACCOUNT.DEBIT_TOTAL
, DBO.ACCOUNT.CREDIT_TOTAL
, DBO.ACCOUNT.ACCOUNT_GROUP_ID
FROM DBO.ACCOUNT
— Record Source Query
— in this query you can’t use where query
— zframe database access engine make where condition on your data set
— your query must cover all data object in your form
SELECT * FROM DBO.ACCOUNT
———————————————————————————————————
———————————————————————————————————
———————————————————————————————————
———————————————————————————————————
———————————————————————————————————-
———————————————-Control Query———————————————–
———————————————————————————————————-
———————————————————————————————————-
— DataSource
— Data Combo Control
—-DataSource :
SELECT DBO.LT_CURRENCY.LT_CURRENCY_ID
, DBO.LT_CURRENCY.CURRENCY
FROM DBO.LT_CURRENCY
———————————————————————————————————-
———————————————————————————————————-
— FindObjectBox
SELECT PARTIES_ENTITIES_ID,PARTIES_ENTITIES_NAME FROM PARTIES_ENTITIES WHERE PARTIES_ENTITIES_ID =
———————————————————————————————————-
———————————————————————————————————-
–DropDownTreeView
— Like As TableID , ParentID , ObjectName
—-DataSource :
SELECT DBO.ACCOUNT_GROUP.ACCOUNT_GROUP_ID
, DBO.ACCOUNT_GROUP.PARENT_CODE
, DBO.ACCOUNT_GROUP.ACCOUNT_GROUP_NAME
FROM DBO.ACCOUNT_GROUP
———————————————————————————————————-
———————————————————————————————————-
— CheckBoxList
—-DataSource :
SELECT SYS_USERGROUP_ID,USERGROUPNAME FROM SYS_USERGROUP
———————————————————————————————————-
—-Delete Query :
DELETE FROM SYS_USERGROUPLIST WHERE SYS_USER_ID =
———————————————————————————————————-
—-Fill Query :
SELECT SYS_USERGROUP_ID FROM SYS_USERGROUPLIST WHERE SYS_USER_ID =
———————————————————————————————————-
—-Update Query :
INSERT INTO SYS_USERGROUPLIST
(SYS_USER_ID , SYS_USERGROUP_ID)
VALUES
( @KEY , @ID )
———————————————————————————————————-
———————————————————————————————————-
———————————————————————————————————-
—- Binding Form DataSource In Parent Form — you need to Define Access Form And DataBase Key
—-DataSource :
SELECT DBO.ACCOUNTING_DOCU_DETAIL.ACCOUNTING_DOCU_DETAIL_ID
, DBO.ACCOUNTING_DOCU_DETAIL.ACCOUNTING_DOCU_ID
FROM DBO.ACCOUNTING_DOCU_DETAIL
———————————————————————————————————-
———————————————————————————————————-
—– On Change Event Query
IF (LEN(@STRACCOUNT)>0)
BEGIN
SELECT DBO.ACCOUNT.ACCOUNT_ID
, ACCOUNT_CODE + ‘ — ‘ + ACCOUNT_NAME
, DBO.ACCOUNT.ACCOUNT_DESCRIPTION
, DBO.ACCOUNT.CREAT_DATE
FROM DBO.ACCOUNT
WHERE ACCOUNT_CODE LIKE N’%’ + @STRACCOUNT + ‘%’
OR ACCOUNT_NAME LIKE N’%’ + @STRACCOUNT + ‘%’
END
ELSE IF (LEN(@INTACCOUNT_GROUP_ID)>0)
BEGIN
SELECT DBO.ACCOUNT.ACCOUNT_ID
, ACCOUNT_CODE + ‘ ‘ + ACCOUNT_NAME
, DBO.ACCOUNT.ACCOUNT_DESCRIPTION
, DBO.ACCOUNT.CREAT_DATE
FROM DBO.ACCOUNT
WHERE ACCOUNT_GROUP_ID = @INTACCOUNT_GROUP_ID
END
———————————————————————————————————-
———————————————————————————————————-
—- Child Form ( Query Model )
SELECT
DBO.COMPANY.COMPANY_ID,
DBO.COMPANY.DATE_OF_ESTABLISHMENT,
DBO.COMPANY.REGISTER_DATE,
DBO.COMPANY.REGISTERNUMBER
FROM
DBO.COMPANY
WHERE
PARTIES_ENTITIES_ID =
———————————————————————————————————
———————————————————————————————————
———————————————————————————————————
———————————————————————————————————
— Insert Query
INSERT INTO ACCOUNT
(
ACCOUNT_GROUP_ID
, ACCOUNT_NAME
, ACCOUNT_CODE
, ACCOUNTTITLE_COMPLETE
, ACCOUNT_DESCRIPTION
, CREAT_DATE
, DEBIT_VERIFY
)
VALUES
(
@INTACCOUNT_GROUP_ID
, @STRACCOUNT_NAME
, @STRACCOUNT_CODE
, @STRACCOUNTTITLE_COMPLETE
, @STRACCOUNT_DESCRIPTION
, @STRCREAT_DATE
, @LNGDEBIT_VERIFY
)
———————————————————————————————————
———————————————————————————————————
— Update Query
UPDATE ACCOUNT
SET
ACCOUNT_GROUP_ID = @INTACCOUNT_GROUP_ID
, ACCOUNT_NAME = @STRACCOUNT_NAME
, ACCOUNT_CODE = @STRACCOUNT_CODE
, ACCOUNTTITLE_COMPLETE = @STRACCOUNTTITLE_COMPLETE
, ACCOUNT_DESCRIPTION = @STRACCOUNT_DESCRIPTION
, CREAT_DATE = @STRCREAT_DATE
WHERE
ACCOUNT_ID = @INTACCOUNT_ID
———————————————————————————————————
———————————————————————————————————
— Delete Query
DELETE FROM ACCOUNT
WHERE
ACCOUNT_ID = @INTACCOUNT_ID
———————————————————————————————————
———————————————————————————————————
— Constraint Query
SELECT * FROM Account WHERE
[ACCOUNT_CODE] = @STRACCOUNT_CODE
———————————————————————————————————
———————————————————————————————————
— In Repeat From Set DataSource Query For Form Control
— RepeatForm Quey -> This Query Use In Parent Form
Select
AR.AssessmentResultID,
AF.AssessmentFormID ,
Q.QuestionID ,
CAST( Q.QuestionNumber AS NVARCHAR(50)) AS QuestionNumber ,
Q.QuestionText ,
AC.ComponentName ,
CM.ModuleName ,
AR.Description ,
ISNULL( AR.FormPersonnelID ,#ENTITY_ID ) AS FormPersonnelID,
ISNULL( AR.ToPresonnelID, @intPersonnelID ) AS ToPresonnelID ,
AR.AnswerID
from [dbo].[AssessmentForm] AS AF
Inner join Question AS Q
On Q.AssessmentFormID = AF.AssessmentFormID
inner join [dbo].[ComponentModule] AS CM
On CM.ComponentModuleID = Q.ComponentModuleID
Inner Join AssessmentComponent AS AC
on AC.AssessmentComponentID = CM.AssessmentComponentID
LEFT OUTER JOIN AssessmentResult AS AR
On AF.AssessmentFormID = AR.AssessmentFormID And Q.QuestionID = AR.QuestionID AND AR.ToPresonnelID = @intPersonnelID And AR.FormPersonnelID = #ENTITY_ID
Where
AF.AssessmentFormID = #KEYID
And ( AR.FormPersonnelID = #ENTITY_ID Or AR.FormPersonnelID is null )
And ( AR.ToPresonnelID = @intPersonnelID Or AR.ToPresonnelID is null )
— #KEYID is Value From Parent Form Select In Child Form Object #KEYID Is Not Session Value
— #ENTITY_ID Is Session Value
— @intPersonnelID is Value From Object
— Repeat From In Curent Form Use Select Recored_Source Query if Value is Not 0
================================================================================
— In Tab From
–Set DataSource for Form Control
Select
dbo.Parties_Entities.Parties_Entities_ID
From dbo.Parties_Entities
Where
( dbo.Parties_Entities.Parties_Entities_ID= #MUSER )
— #MUSER is Session Value
================================================================================
/* CSS Class
PriceMode Text Box = PriceText
Form Child Grid = FROMCGRID
Left Text Align = InputTextLeft
*/
–Query For Get All WorkFlow (Menu) With User_Id
================================================================================
–Start
SELECT DISTINCT W.* FROM SYS_WORKFLOW W
INNER JOIN SYS_WORKFLOWUSERGROUP WU
ON W.SYS_WORKFLOW_ID = WU.SYS_WORKFLOW_ID
INNER JOIN SYS_USERGROUPLIST UG
ON UG.SYS_USERGROUP_ID = WU.SYS_USERGROUP_ID
WHERE UG.SYS_USER_ID = #USER_ID
— End
================================================================================
— Query For Get All WorkFlowForm Access With User_ID
–Start
SELECT DISTINCT WF.* FROM SYS_WORKFLOW W
Inner Join Sys_WorkflowForm WF
on WF.Sys_Workflow_ID = W.Sys_Workflow_ID
INNER JOIN SYS_WORKFLOWUSERGROUP WU
ON W.SYS_WORKFLOW_ID = WU.SYS_WORKFLOW_ID
INNER JOIN SYS_USERGROUPLIST UG
ON UG.SYS_USERGROUP_ID = WU.SYS_USERGROUP_ID
WHERE UG.SYS_USER_ID = 1
–End
================================================================================
–Call Rest Function In SQL Query
–Start
REST
http://localhost:8080/ZWCEE/info/getfp.zjs
or
http://{PROXY:1}/ZWCEE/info/getfp.zjs
POST
V1 = @LNGTEXT1
V2 = #USER_ID
V3 = Test
V4 = {sql=> select 5*4 from dual }
–End
//
================================================================================
–PLSQL Call In Zframe
–Sample Query (Only In Rest And ResultSet Data )
–Start
plsql
declare
p_id varchar2(20) := null ;
l_rc sys_refcursor ;
begin
p_id := @STRVALUEID ;
if ( p_id = ’12’ ) then
open l_rc for
select 1 id, ‘Test Value 1’ name from dual
union
select 2, ‘Data1’ from dual;
else
open l_rc for
select 1 id, ‘Test Value 2’ name from dual
union
select 2, ‘Data2’ from dual;
end if ;
? := l_rc ;
end;
–End
================================================================================
–PLSQL Call In Zframe With Parameter
–Sample Query (Only In Rest And ResultSet Data )
–Start
ppsql
CALL PROC1( @ILNGIDV , @OLNGAMOUNT )
–End
================================================================================
// ZFrame Engine Management Address
//attention! This Url List Active When In Config.Xml (Debug = 1)
ZFrameDiagnostic.jsp?KeyID=Remove&CashName=All //Remove All Cashe Data
ZFrameDiagnostic.jsp?KeyID=cash //View Cash
ZFrameDiagnostic.jsp?KeyID=terminaltrace&value=0 //View Terminal Log
ZFrameDiagnostic.jsp?KeyID=terminaltrace&value=10000 //Stop Terminal Log
ZFrameDiagnostic.jsp?KeyID=session //View User Activity
ZFrameDiagnostic.jsp?KeyID=Trace&Active=0 //Disable User Activity With Action Information
ZFrameDiagnostic.jsp?KeyID=Trace&Active=1 //Enable User Activity With Action Information
================================================================================
// Sample Code for Grid Datasource and Create Control
SELECT GUILD_ID, GUILD_CODE, GUILD_NAME, MAIN_GUILD_NAME, ALIAS, OFFICE_ADDRESS ,
TEL, WEBSITE FROM GUILD
START_GRID_STYLE
GUILD_CODE:<input type=”button” value=”@GUILD_CODE@” class=”InputText”>#
MAIN_GUILD_NAME:<input type=”text” value=”@MAIN_GUILD_NAME@” style=”width:300px” class=”InputText”>#
ALIAS:<span class=”title”> @ALIAS@ </span>#
RECIVED_COUNT:<input type=”text” id=”txtid@INVENTORY_ORDER_ITEM_ID@” onchange=”changeData(this,@INVENTORY_ORDER_ITEM_ID@)” value =”@RECIVED_COUNT@” style=”width:100px;” >#
SERIAL : <input type=”button” value =”ثبت سریال” onclick=”saveserial(@SERIAL@)” class=”command” ZVS=@IS_SERIAL_TRACKING@ > #
INSPECTION_REQUIRED : <span class=”qccheck” value=”@INSPECTION_REQUIRED@”>@INSPECTION_REQUIRED@</span>#
SAMPLE_QUANTITY:<input type=”text” id=”txtidSAMPLE@INVENTORY_ORDER_ITEM_ID@” onchange=”changeDataSample(this,@INVENTORY_ORDER_ITEM_ID@)” value =”@SAMPLE_QUANTITY@” style=”width:100px;” >#
LOT_LOCATION: <hidden id=”location_lot_id@INVENTORY_ORDER_ITEM_ID@” value=”0″><hidden id=”location_lot_id@INVENTORY_ORDER_ITEM_ID@txt” value=”0″><input type=”button” class=”command” value= “موقعیت مکانی در انبار” onclick=”select_location_io( @LOT_LOCATION@ , @INVENTORY_ORDER_ITEM_ID@ ,’location_lot_id@INVENTORY_ORDER_ITEM_ID@’)” ZVS=@IS_LOT_LOCATION@ >#
IS_SERIAL_TRACKING: ZVS=false #
IS_LOT_LOCATION : ZVS=false #
================================================================================
Related Control Management
Control Datasource :
Select
SmallPart_ID, Goods_Code
From dbo.VIEW_EXTERNAL_SMALLPART
Related Condition Query:
Select SmallPart_ID,Goods_Code FROM DBO.FX_SOURCE_GOOD(@LNGActivity_Action_ID , @LNGWork_Report_ID , @INTGoods_ID , 1) where Goods_Code like @STRCODE
Related Control Property:
Activity_Action_ID,Work_Report_ID,Goods_ID
================================================================================
//ZFrame Rest Api For Get Form Data Structure
GetFormDataSource
Url : formdatasource.ZF_DataSource
Param
{
param.push({name:’id’, value:FormId});
param.push({name:’key_Id’, value:KeyId});
}
================================================================================
getDataComboDataSourceSolver
Url : Control.ZF_CDS
Param
{
param.push({name:’id’, value:FormId});
param.push({name:’control_id’, value:Control_Id});
}
================================================================================
GetFormStruct
Url : formstruct.ZF_Control
Param
{
param.push({name:’id’, value:FormId});
}
================================================================================
GetControl_Relation
Url: formstruct.ZF_LCM
Param
{
param.push({name:’id’, value:FormId});
}
================================================================================
FillFindObjectBoxAndTextSearch
Url: Search.ZF_COMPLEX
Param
{
param.push({name:’rule_id’, value:”0″});
param.push({name:’form_id’, value:form_id});
param.push({name:’control_id’, value:control_id});
param.push({name:’content’, value:value});
param.push({name:’te’, value:”null”});
}
================================================================================
GetContenetWithID
Url:Search.ZF_COMPLEX
Param
{
param.push({name:’rule_id’, value:”2″});
param.push({name:’form_id’, value:form_id});
param.push({name:’control_id’, value:control_id});
param.push({name:’content’, value:value});
param.push({name:’te’, value:”null”});
}
================================================================================
Get_BinddingForm_Raw_DataSource
Url:Search.ZF_COMPLEX
{
param.push({name:’rule_id’, value:”3″});
param.push({name:’form_id’, value:form_id});
param.push({name:’control_id’, value:control_id});
param.push({name:’content’, value:value});
param.push({name:’te’, value:”null”});
}
================================================================================
GetFormInformation
Url:info.ZF_Form
param
{
/*
* Mode = 0 form Information sys_object
* Mode = 1 Sys_Object_Rule
* Mode = 2 ZFrameFormRuleControl
* Mode = 3 JavaScript Need to convert Base64
* Mode = 4 Template
*/
var param= [];
param.push({name:’id’, value:FormID});
param.push({name:’mode’, value:ModeID});
}
================================================================================
Rest Service Query In ZFrame
================================================================================
async function GetFormDataSource (FormId , KeyId){
try
{
var param= [];
param.push({name:’id’, value:FormId});
param.push({name:’key_Id’, value:KeyId});
var pototcol = window.location.protocol;
var hostname= window.location.host+ ApplicationName
baseapplicationsrc = pototcol+”//”+ hostname+”//”;
var fucname = “formdatasource.ZF_DataSource”;
var address =pototcol+”//”+ hostname + “/getformdatasource/”+ fucname;
let s= await nativecallZf_jslib(address,param,2);
return s;
}
catch (e)
{
return null;
}
}
================================================================================
async function getDataComboDataSourceSolver (FormId , Control_Id,fn){
try
{
var param= [];
param.push({name:’id’, value:FormId});
param.push({name:’control_id’, value:Control_Id});
var pototcol = window.location.protocol;
var hostname= window.location.host+ ApplicationName
var fucname = “Control.ZF_CDS”;
var address =pototcol+”//”+ hostname + “/getcontroldatasource/”+ fucname;
let s= await nativecallZf_jslib(address,param,2);
fn(s);
return s;
}
catch (e)
{
return null;
}
}
================================================================================
async function GetFormStruct (FormId){
try
{
var param= [];
param.push({name:’id’, value:FormId});
var pototcol = window.location.protocol;
var hostname= window.location.host+ ApplicationName
var fucname = “formstruct.ZF_Control”;
var address =pototcol+”//”+ hostname + “/getformstaruct/”+ fucname;
let s= await nativecallZf_jslib(address,param,2);
return s;
}
catch (e)
{
return null;
}
}
================================================================================
async function GetControl_Relation (FormId){
try
{
var param= [];
param.push({name:’id’, value:FormId});
var pototcol = window.location.protocol;
var hostname= window.location.host+ ApplicationName
var fucname = “formstruct.ZF_LCM”;
var address =pototcol+”//”+ hostname + “/getformstaruct/”+ fucname;
let s= await nativecallZf_jslib(address,param,2);
return s;
}
catch (e)
{
return null;
}
}
================================================================================
async function FillFindObjectBoxAndTextSearch(control_id,content)
{
try
{
var form_id = GetUrlParameter(‘ID’);
var value = content.value;
var param= [];
param.push({name:’rule_id’, value:”0″});
param.push({name:’form_id’, value:form_id});
param.push({name:’control_id’, value:control_id});
param.push({name:’content’, value:value});
param.push({name:’te’, value:”null”});
var pototcol = window.location.protocol;
var hostname= window.location.host+ ApplicationName
var fucname = “Search.ZF_COMPLEX”;
var address =pototcol+”//”+ hostname + “/searchEngine/”+ fucname;
let s= await nativecallZf_jslib(address,param,2);
return s;
}
catch (e)
{
return null;
}
}
================================================================================
async function GetContenetWithID(control_id,content_id)
{
try
{
var form_id = GetUrlParameter(‘ID’);
var value = content_id;
var param= [];
param.push({name:’rule_id’, value:”2″});
param.push({name:’form_id’, value:form_id});
param.push({name:’control_id’, value:control_id});
param.push({name:’content’, value:value});
param.push({name:’te’, value:”null”});
var pototcol = window.location.protocol;
var hostname= window.location.host+ ApplicationName
var fucname = “Search.ZF_COMPLEX”;
var address =pototcol+”//”+ hostname + “/searchEngine/”+ fucname;
let s= await nativecallZf_jslib(address,param,2);
var keys = Object.keys(s[0]);
var Key_Id = keys[0];
var key_value = keys[1];
return s[0][key_value];
}
catch (e)
{
}
return null;
}
================================================================================
async function Get_BinddingForm_Raw_DataSource(control_id,content_id)
{
try
{
var form_id = GetUrlParameter(‘ID’);
var value = content_id;
var param= [];
param.push({name:’rule_id’, value:”3″});
param.push({name:’form_id’, value:form_id});
param.push({name:’control_id’, value:control_id});
param.push({name:’content’, value:value});
param.push({name:’te’, value:”null”});
var pototcol = window.location.protocol;
var hostname= window.location.host+ ApplicationName
var fucname = “Search.ZF_COMPLEX”;
var address =pototcol+”//”+ hostname + “/searchEngine/”+ fucname;
let s= await nativecallZf_jslib(address,param,2);
return s;
}
catch (e)
{
}
return null;
}
================================================================================
async function GetFormInformation(FormID,ModeID)
{
try
{
/*
* Mode = 0 form Information sys_object
* Mode = 1 Sys_Object_Rule
* Mode = 2 ZFrameFormRuleControl
* Mode = 3 JavaScript Need to convert Base64
* Mode = 4 Template
*/
var param= [];
param.push({name:’id’, value:FormID});
param.push({name:’mode’, value:ModeID});
var pototcol = window.location.protocol;
var hostname= window.location.host+ ApplicationName
var fucname = “info.ZF_Form”;
var address =pototcol+”//”+ hostname + “/FormInfo/”+ fucname;
let s= await nativecallZf_jslib(address,param,2);
return s;
}
catch (e)
{
}
return null;
}
================================================================================
ZFrame Standard package ;
package ZFrame_FormRuleCode; // Form UI Rule
package ZFrame_RestApiRuleCode; // Rest API Rule Code
package ZFrame_CustomControlRuleCode; // Custom Control Rule Code
package ZFrame_InitRule; // Init Rule Code
================================================================================
package ZFrame_InitRule;
/**
*
* @author Siavash Rafiei
*/
public class TestStart extends Z_Framework.Rule.Engine_Init_Rule
{
public TestStart()
{
}
@Override
public void Start()
{
System.out.println(“Start My Application With This Line “);
}
}
================================================================================
Regular Expression
Fix len For TextBox
=>^(?=.{10,15}$).*
====
language tags
hl=af Afrikaans
hl=ak Akan
hl=sq Albanian
hl=am Amharic
hl=ar Arabic
hl=hy Armenian
hl=az Azerbaijani
hl=eu Basque
hl=be Belarusian
hl=bem Bemba
hl=bn Bengali
hl=bh Bihari
hl=xx-bork Bork, bork, bork!
hl=bs Bosnian
hl=br Breton
hl=bg Bulgarian
hl=km Cambodian
hl=ca Catalan
hl=chr Cherokee
hl=ny Chichewa
hl=zh-CN Chinese (Simplified)
hl=zh-TW Chinese (Traditional)
hl=co Corsican
hl=hr Croatian
hl=cs Czech
hl=da Danish
hl=nl Dutch
hl=xx-elmer Elmer Fudd
hl=en English
hl=eo Esperanto
hl=et Estonian
hl=ee Ewe
hl=fo Faroese
hl=tl Filipino
hl=fi Finnish
hl=fr French
hl=fy Frisian
hl=gaa Ga
hl=gl Galician
hl=ka Georgian
hl=de German
hl=el Greek
hl=gn Guarani
hl=gu Gujarati
hl=xx-hacker Hacker
hl=ht Haitian Creole
hl=ha Hausa
hl=haw Hawaiian
hl=iw Hebrew
hl=hi Hindi
hl=hu Hungarian
hl=is Icelandic
hl=ig Igbo
hl=id Indonesian
hl=ia Interlingua
hl=ga Irish
hl=it Italian
hl=ja Japanese
hl=jw Javanese
hl=kn Kannada
hl=kk Kazakh
hl=rw Kinyarwanda
hl=rn Kirundi
hl=xx-klingon Klingon
hl=kg Kongo
hl=ko Korean
hl=kri Krio (Sierra Leone)
hl=ku Kurdish
hl=ckb Kurdish (Soranî)
hl=ky Kyrgyz
hl=lo Laothian
hl=la Latin
hl=lv Latvian
hl=ln Lingala
hl=lt Lithuanian
hl=loz Lozi
hl=lg Luganda
hl=ach Luo
hl=mk Macedonian
hl=mg Malagasy
hl=ms Malay
hl=ml Malayalam
hl=mt Maltese
hl=mi Maori
hl=mr Marathi
hl=mfe Mauritian Creole
hl=mo Moldavian
hl=mn Mongolian
hl=sr-ME Montenegrin
hl=ne Nepali
hl=pcm Nigerian Pidgin
hl=nso Northern Sotho
hl=no Norwegian
hl=nn Norwegian (Nynorsk)
hl=oc Occitan
hl=or Oriya
hl=om Oromo
hl=ps Pashto
hl=fa Persian
hl=xx-pirate Pirate
hl=pl Polish
hl=pt-BR Portuguese (Brazil)
hl=pt-PT Portuguese (Portugal)
hl=pa Punjabi
hl=qu Quechua
hl=ro Romanian
hl=rm Romansh
hl=nyn Runyakitara
hl=ru Russian
hl=gd Scots Gaelic
hl=sr Serbian
hl=sh Serbo-Croatian
hl=st Sesotho
hl=tn Setswana
hl=crs Seychellois Creole
hl=sn Shona
hl=sd Sindhi
hl=si Sinhalese
hl=sk Slovak
hl=sl Slovenian
hl=so Somali
hl=es Spanish
hl=es-419 Spanish (Latin American)
hl=su Sundanese
hl=sw Swahili
hl=sv Swedish
hl=tg Tajik
hl=ta Tamil
hl=tt Tatar
hl=te Telugu
hl=th Thai
hl=ti Tigrinya
hl=to Tonga
hl=lua Tshiluba
hl=tum Tumbuka
hl=tr Turkish
hl=tk Turkmen
hl=tw Twi
hl=ug Uighur
hl=uk Ukrainian
hl=ur Urdu
hl=uz Uzbek
hl=vi Vietnamese
hl=cy Welsh
hl=wo Wolof
hl=xh Xhosa
hl=yi Yiddish
hl=yo Yoruba
hl=zu Zulu