Cleanups.

This commit is contained in:
Relintai 2024-04-30 17:58:17 +02:00
parent 486d76d00c
commit b68153e78d
10 changed files with 83 additions and 538 deletions

View File

@ -1,10 +1,8 @@
Internationalizing games
========================
# Internationalizing games
Introduction
------------
## Introduction
Sería excelente que el mundo hablara solo un idioma (It would be great if the
world spoke only one language). Unfortunately for
@ -26,8 +24,7 @@ Note:
We will be using the official demo as an example; you can
`download it from the Asset Library ( https://pandemoniumengine.org/asset-library/asset/134 )`.
Configuring the imported translation
------------------------------------
## Configuring the imported translation
Translations can get updated and re-imported when they change, but
they still have to be added to the project. This is done in
@ -37,8 +34,7 @@ they still have to be added to the project. This is done in
The above dialog is used to add or remove translations project-wide.
Localizing resources
--------------------
## Localizing resources
It is also possible to instruct Pandemonium to use alternate versions of
assets (resources) depending on the current language. The **Remaps** tab
@ -49,8 +45,7 @@ can be used for this:
Select the resource to be remapped, then add some alternatives for each
locale.
Converting keys to text
-----------------------
## Converting keys to text
Some controls, such as `Button`,
will automatically fetch a translation if their text matches a translation key.
@ -94,8 +89,7 @@ translations and convert it if found:
status.set_text(tr("GAME_STATUS_" + str(status_index)))
```
Making controls resizable
--------------------------
### Making controls resizable
The same text in different languages can vary greatly in length. For
this, make sure to read the tutorial on `doc_size_and_anchors`, as
@ -103,16 +97,14 @@ dynamically adjusting control sizes may help.
`Container` can be useful, as well as the text wrapping
options available in `Label`.
TranslationServer
-----------------
## TranslationServer
Pandemonium has a server handling low-level translation management
called the `TranslationServer`.
Translations can be added or removed during run-time;
the current language can also be changed at run-time.
Testing translations
--------------------
## Testing translations
You may want to test a project's translation before releasing it. Pandemonium provides two ways
to do this.
@ -136,8 +128,7 @@ supplied:
pandemonium --language fr
```
Translating the project name
----------------------------
## Translating the project name
The project name becomes the app name when exporting to different
operating systems and platforms. To specify the project name in more

View File

@ -1,7 +1,5 @@
Localization using gettext
==========================
# Localization using gettext
In addition to `doc_importing_translations` in CSV format, Pandemonium
also supports loading translation files written in the GNU gettext
@ -13,8 +11,7 @@ Note:
It's written with C projects in mind, but much of the advice
also applies to Pandemonium (with the exception of `xgettext`).
Advantages
----------
## Advantages
- gettext is a standard format, which can be edited using any text editor
or GUI editors such as `Poedit ( https://poedit.net/ )`.
@ -26,8 +23,7 @@ Advantages
- Multiline strings are more convenient to edit in gettext files compared
to CSV files.
Disadvantages
-------------
## Disadvantages
- gettext is a more complex format than CSV and can be harder to grasp for
people new to software localization.
@ -35,15 +31,13 @@ Disadvantages
on their system. However, as Pandemonium supports using text-based message files
(`.po`), translators can test their work without having to install gettext tools.
Caveats
-------
## Caveats
- As Pandemonium uses its own PO file parser behind the scenes
(which is more limited than the reference GNU gettext implementation),
some features such as pluralization aren't supported.
Installing gettext tools
------------------------
## Installing gettext tools
The command line gettext tools are required to perform maintenance operations,
such as updating message files. Therefore, it's strongly recommended to
@ -60,8 +54,7 @@ install them.
- **Linux:** On most distributions, install the `gettext` package from
your distribution's package manager.
Creating the PO template (POT) manually
---------------------------------------
## Creating the PO template (POT) manually
Pandemonium currently doesn't support extracting source strings using `xgettext`,
so the `.pot` file must be created manually. This file can be placed anywhere
@ -87,8 +80,7 @@ the translated string.
The `msgstr` value in PO template files (`.pot`) should **always** be empty.
Localization will be done in the generated `.po` files instead.
Creating the PO template (POT) using pybabel
--------------------------------------------
## Creating the PO template (POT) using pybabel
The Python tool pybabel has support for Pandemonium and can be used to automatically
create and update the POT file from your scene files and scripts.
@ -122,8 +114,7 @@ arguments to `tr()` will be translated, as well
as properties named "text" (commonly used by Control nodes) and LineEdit's
"placeholder_text" property.
Creating a messages file from a PO template
-------------------------------------------
## Creating a messages file from a PO template
The `msginit` command is used to turn a PO template into a messages file.
For instance, to create a French localization file, use the following command
@ -139,8 +130,7 @@ as the PO template.
Alternatively, you can do that graphically using Poedit, or by uploading the
POT file to your web platform of choice.
Loading a messages file in Pandemonium
--------------------------------
## Loading a messages file in Pandemonium
To register a messages file as a translation in a project, open the
**Project Settings**, then go to the **Localization** tab.
@ -152,8 +142,7 @@ Note:
See `doc_internationalizing_games` for more information on
importing and testing translations in Pandemonium.
Updating message files to follow the PO template
------------------------------------------------
## Updating message files to follow the PO template
After updating the PO template, you will have to update message files so
that they contain new strings, while removing strings that are no longer
@ -179,8 +168,7 @@ Note:
Strings with "fuzzy" comments will **not** be read by Pandemonium until the
translation is updated and the "fuzzy" comment is removed.
Checking the validity of a PO file or template
----------------------------------------------
## Checking the validity of a PO file or template
It is possible to check whether a gettext file's syntax is valid by running
the command below:
@ -192,8 +180,7 @@ the command below:
If there are syntax errors or warnings, they will be displayed in the console.
Otherwise, `msgfmt` won't output anything.
Using binary MO files (useful for large projects only)
------------------------------------------------------
## Using binary MO files (useful for large projects only)
For large projects with several thousands of strings to translate or more,
it can be worth it to use binary (compiled) MO message files instead of text-based

View File

@ -1,739 +1,375 @@
Locales
=======
# Locales
.. Note: This list is synced with core/translation.cpp in the engine.
Note: This list is synced with core/translation.cpp in the engine.
This is the list of supported locales and variants in the engine. It's
based on the Unix standard locale strings:
+--------------+------------------------------------+
| Locale | Language and Variant |
+==============+====================================+
|--------------|------------------------------------|
| aa | Afar |
+--------------+------------------------------------+
| aa_DJ | Afar (Djibouti) |
+--------------+------------------------------------+
| aa_ER | Afar (Eritrea) |
+--------------+------------------------------------+
| aa_ET | Afar (Ethiopia) |
+--------------+------------------------------------+
| af | Afrikaans |
+--------------+------------------------------------+
| af_ZA | Afrikaans (South Africa) |
+--------------+------------------------------------+
| agr_PE | Aguaruna (Peru) |
+--------------+------------------------------------+
| ak_GH | Akan (Ghana) |
+--------------+------------------------------------+
| am_ET | Amharic (Ethiopia) |
+--------------+------------------------------------+
| an_ES | Aragonese (Spain) |
+--------------+------------------------------------+
| anp_IN | Angika (India) |
+--------------+------------------------------------+
| ar | Arabic |
+--------------+------------------------------------+
| ar_AE | Arabic (United Arab Emirates) |
+--------------+------------------------------------+
| ar_BH | Arabic (Bahrain) |
+--------------+------------------------------------+
| ar_DZ | Arabic (Algeria) |
+--------------+------------------------------------+
| ar_EG | Arabic (Egypt) |
+--------------+------------------------------------+
| ar_IQ | Arabic (Iraq) |
+--------------+------------------------------------+
| ar_JO | Arabic (Jordan) |
+--------------+------------------------------------+
| ar_KW | Arabic (Kuwait) |
+--------------+------------------------------------+
| ar_LB | Arabic (Lebanon) |
+--------------+------------------------------------+
| ar_LY | Arabic (Libya) |
+--------------+------------------------------------+
| ar_MA | Arabic (Morocco) |
+--------------+------------------------------------+
| ar_OM | Arabic (Oman) |
+--------------+------------------------------------+
| ar_QA | Arabic (Qatar) |
+--------------+------------------------------------+
| ar_SA | Arabic (Saudi Arabia) |
+--------------+------------------------------------+
| ar_SD | Arabic (Sudan) |
+--------------+------------------------------------+
| ar_SS | Arabic (South Sudan) |
+--------------+------------------------------------+
| ar_SY | Arabic (Syria) |
+--------------+------------------------------------+
| ar_TN | Arabic (Tunisia) |
+--------------+------------------------------------+
| ar_YE | Arabic (Yemen) |
+--------------+------------------------------------+
| as_IN | Assamese (India) |
+--------------+------------------------------------+
| ast_ES | Asturian (Spain) |
+--------------+------------------------------------+
| ayc_PE | Southern Aymara (Peru) |
+--------------+------------------------------------+
| ay_PE | Aymara (Peru) |
+--------------+------------------------------------+
| az_AZ | Azerbaijani (Azerbaijan) |
+--------------+------------------------------------+
| be | Belarusian |
+--------------+------------------------------------+
| be_BY | Belarusian (Belarus) |
+--------------+------------------------------------+
| bem_ZM | Bemba (Zambia) |
+--------------+------------------------------------+
| ber_DZ | Berber languages (Algeria) |
+--------------+------------------------------------+
| ber_MA | Berber languages (Morocco) |
+--------------+------------------------------------+
| bg | Bulgarian |
+--------------+------------------------------------+
| bg_BG | Bulgarian (Bulgaria) |
+--------------+------------------------------------+
| bhb_IN | Bhili (India) |
+--------------+------------------------------------+
| bho_IN | Bhojpuri (India) |
+--------------+------------------------------------+
| bi_TV | Bislama (Tuvalu) |
+--------------+------------------------------------+
| bn | Bengali |
+--------------+------------------------------------+
| bn_BD | Bengali (Bangladesh) |
+--------------+------------------------------------+
| bn_IN | Bengali (India) |
+--------------+------------------------------------+
| bo | Tibetan |
+--------------+------------------------------------+
| bo_CN | Tibetan (China) |
+--------------+------------------------------------+
| bo_IN | Tibetan (India) |
+--------------+------------------------------------+
| br_FR | Breton (France) |
+--------------+------------------------------------+
| brx_IN | Bodo (India) |
+--------------+------------------------------------+
| bs_BA | Bosnian (Bosnia and Herzegovina) |
+--------------+------------------------------------+
| byn_ER | Bilin (Eritrea) |
+--------------+------------------------------------+
| ca | Catalan |
+--------------+------------------------------------+
| ca_AD | Catalan (Andorra) |
+--------------+------------------------------------+
| ca_ES | Catalan (Spain) |
+--------------+------------------------------------+
| ca_FR | Catalan (France) |
+--------------+------------------------------------+
| ca_IT | Catalan (Italy) |
+--------------+------------------------------------+
| ce_RU | Chechen (Russia) |
+--------------+------------------------------------+
| chr_US | Cherokee (United States) |
+--------------+------------------------------------+
| cmn_TW | Mandarin Chinese (Taiwan) |
+--------------+------------------------------------+
| crh_UA | Crimean Tatar (Ukraine) |
+--------------+------------------------------------+
| csb_PL | Kashubian (Poland) |
+--------------+------------------------------------+
| cs | Czech |
+--------------+------------------------------------+
| cs_CZ | Czech (Czech Republic) |
+--------------+------------------------------------+
| cv_RU | Chuvash (Russia) |
+--------------+------------------------------------+
| cy_GB | Welsh (United Kingdom) |
+--------------+------------------------------------+
| da | Danish |
+--------------+------------------------------------+
| da_DK | Danish (Denmark) |
+--------------+------------------------------------+
| de | German |
+--------------+------------------------------------+
| de_AT | German (Austria) |
+--------------+------------------------------------+
| de_BE | German (Belgium) |
+--------------+------------------------------------+
| de_CH | German (Switzerland) |
+--------------+------------------------------------+
| de_DE | German (Germany) |
+--------------+------------------------------------+
| de_IT | German (Italy) |
+--------------+------------------------------------+
| de_LU | German (Luxembourg) |
+--------------+------------------------------------+
| doi_IN | Dogri (India) |
+--------------+------------------------------------+
| dv_MV | Dhivehi (Maldives) |
+--------------+------------------------------------+
| dz_BT | Dzongkha (Bhutan) |
+--------------+------------------------------------+
| el | Greek |
+--------------+------------------------------------+
| el_CY | Greek (Cyprus) |
+--------------+------------------------------------+
| el_GR | Greek (Greece) |
+--------------+------------------------------------+
| en | English |
+--------------+------------------------------------+
| en_AG | English (Antigua and Barbuda) |
+--------------+------------------------------------+
| en_AU | English (Australia) |
+--------------+------------------------------------+
| en_BW | English (Botswana) |
+--------------+------------------------------------+
| en_CA | English (Canada) |
+--------------+------------------------------------+
| en_DK | English (Denmark) |
+--------------+------------------------------------+
| en_GB | English (United Kingdom) |
+--------------+------------------------------------+
| en_HK | English (Hong Kong) |
+--------------+------------------------------------+
| en_IE | English (Ireland) |
+--------------+------------------------------------+
| en_IL | English (Israel) |
+--------------+------------------------------------+
| en_IN | English (India) |
+--------------+------------------------------------+
| en_NG | English (Nigeria) |
+--------------+------------------------------------+
| en_NZ | English (New Zealand) |
+--------------+------------------------------------+
| en_PH | English (Philippines) |
+--------------+------------------------------------+
| en_SG | English (Singapore) |
+--------------+------------------------------------+
| en_US | English (United States) |
+--------------+------------------------------------+
| en_ZA | English (South Africa) |
+--------------+------------------------------------+
| en_ZM | English (Zambia) |
+--------------+------------------------------------+
| en_ZW | English (Zimbabwe) |
+--------------+------------------------------------+
| eo | Esperanto |
+--------------+------------------------------------+
| es | Spanish |
+--------------+------------------------------------+
| es_AR | Spanish (Argentina) |
+--------------+------------------------------------+
| es_BO | Spanish (Bolivia) |
+--------------+------------------------------------+
| es_CL | Spanish (Chile) |
+--------------+------------------------------------+
| es_CO | Spanish (Colombia) |
+--------------+------------------------------------+
| es_CR | Spanish (Costa Rica) |
+--------------+------------------------------------+
| es_CU | Spanish (Cuba) |
+--------------+------------------------------------+
| es_DO | Spanish (Dominican Republic) |
+--------------+------------------------------------+
| es_EC | Spanish (Ecuador) |
+--------------+------------------------------------+
| es_ES | Spanish (Spain) |
+--------------+------------------------------------+
| es_GT | Spanish (Guatemala) |
+--------------+------------------------------------+
| es_HN | Spanish (Honduras) |
+--------------+------------------------------------+
| es_MX | Spanish (Mexico) |
+--------------+------------------------------------+
| es_NI | Spanish (Nicaragua) |
+--------------+------------------------------------+
| es_PA | Spanish (Panama) |
+--------------+------------------------------------+
| es_PE | Spanish (Peru) |
+--------------+------------------------------------+
| es_PR | Spanish (Puerto Rico) |
+--------------+------------------------------------+
| es_PY | Spanish (Paraguay) |
+--------------+------------------------------------+
| es_SV | Spanish (El Salvador) |
+--------------+------------------------------------+
| es_US | Spanish (United States) |
+--------------+------------------------------------+
| es_UY | Spanish (Uruguay) |
+--------------+------------------------------------+
| es_VE | Spanish (Venezuela) |
+--------------+------------------------------------+
| et | Estonian |
+--------------+------------------------------------+
| et_EE | Estonian (Estonia) |
+--------------+------------------------------------+
| eu | Basque |
+--------------+------------------------------------+
| eu_ES | Basque (Spain) |
+--------------+------------------------------------+
| fa | Persian |
+--------------+------------------------------------+
| fa_IR | Persian (Iran) |
+--------------+------------------------------------+
| ff_SN | Fulah (Senegal) |
+--------------+------------------------------------+
| fi | Finnish |
+--------------+------------------------------------+
| fi_FI | Finnish (Finland) |
+--------------+------------------------------------+
| fil | Filipino |
+--------------+------------------------------------+
| fil_PH | Filipino (Philippines) |
+--------------+------------------------------------+
| fo_FO | Faroese (Faroe Islands) |
+--------------+------------------------------------+
| fr | French |
+--------------+------------------------------------+
| fr_BE | French (Belgium) |
+--------------+------------------------------------+
| fr_CA | French (Canada) |
+--------------+------------------------------------+
| fr_CH | French (Switzerland) |
+--------------+------------------------------------+
| fr_FR | French (France) |
+--------------+------------------------------------+
| fr_LU | French (Luxembourg) |
+--------------+------------------------------------+
| fur_IT | Friulian (Italy) |
+--------------+------------------------------------+
| fy_DE | Western Frisian (Germany) |
+--------------+------------------------------------+
| fy_NL | Western Frisian (Netherlands) |
+--------------+------------------------------------+
| ga | Irish |
+--------------+------------------------------------+
| ga_IE | Irish (Ireland) |
+--------------+------------------------------------+
| gd_GB | Scottish Gaelic (United Kingdom) |
+--------------+------------------------------------+
| gez_ER | Geez (Eritrea) |
+--------------+------------------------------------+
| gez_ET | Geez (Ethiopia) |
+--------------+------------------------------------+
| gl_ES | Galician (Spain) |
+--------------+------------------------------------+
| gu_IN | Gujarati (India) |
+--------------+------------------------------------+
| gv_GB | Manx (United Kingdom) |
+--------------+------------------------------------+
| hak_TW | Hakka Chinese (Taiwan) |
+--------------+------------------------------------+
| ha_NG | Hausa (Nigeria) |
+--------------+------------------------------------+
| he | Hebrew |
+--------------+------------------------------------+
| he_IL | Hebrew (Israel) |
+--------------+------------------------------------+
| hi | Hindi |
+--------------+------------------------------------+
| hi_IN | Hindi (India) |
+--------------+------------------------------------+
| hne_IN | Chhattisgarhi (India) |
+--------------+------------------------------------+
| hr | Croatian |
+--------------+------------------------------------+
| hr_HR | Croatian (Croatia) |
+--------------+------------------------------------+
| hsb_DE | Upper Sorbian (Germany) |
+--------------+------------------------------------+
| ht_HT | Haitian (Haiti) |
+--------------+------------------------------------+
| hu | Hungarian |
+--------------+------------------------------------+
| hu_HU | Hungarian (Hungary) |
+--------------+------------------------------------+
| hus_MX | Huastec (Mexico) |
+--------------+------------------------------------+
| hy_AM | Armenian (Armenia) |
+--------------+------------------------------------+
| ia_FR | Interlingua (France) |
+--------------+------------------------------------+
| id | Indonesian |
+--------------+------------------------------------+
| id_ID | Indonesian (Indonesia) |
+--------------+------------------------------------+
| ig_NG | Igbo (Nigeria) |
+--------------+------------------------------------+
| ik_CA | Inupiaq (Canada) |
+--------------+------------------------------------+
| is | Icelandic |
+--------------+------------------------------------+
| is_IS | Icelandic (Iceland) |
+--------------+------------------------------------+
| it | Italian |
+--------------+------------------------------------+
| it_CH | Italian (Switzerland) |
+--------------+------------------------------------+
| it_IT | Italian (Italy) |
+--------------+------------------------------------+
| iu_CA | Inuktitut (Canada) |
+--------------+------------------------------------+
| ja | Japanese |
+--------------+------------------------------------+
| ja_JP | Japanese (Japan) |
+--------------+------------------------------------+
| kab_DZ | Kabyle (Algeria) |
+--------------+------------------------------------+
| ka | Georgian |
+--------------+------------------------------------+
| ka_GE | Georgian (Georgia) |
+--------------+------------------------------------+
| kk_KZ | Kazakh (Kazakhstan) |
+--------------+------------------------------------+
| kl_GL | Kalaallisut (Greenland) |
+--------------+------------------------------------+
| km_KH | Central Khmer (Cambodia) |
+--------------+------------------------------------+
| kn_IN | Kannada (India) |
+--------------+------------------------------------+
| kok_IN | Konkani (India) |
+--------------+------------------------------------+
| ko | Korean |
+--------------+------------------------------------+
| ko_KR | Korean (South Korea) |
+--------------+------------------------------------+
| ks_IN | Kashmiri (India) |
+--------------+------------------------------------+
| ku | Kurdish |
+--------------+------------------------------------+
| ku_TR | Kurdish (Turkey) |
+--------------+------------------------------------+
| kw_GB | Cornish (United Kingdom) |
+--------------+------------------------------------+
| ky_KG | Kirghiz (Kyrgyzstan) |
+--------------+------------------------------------+
| lb_LU | Luxembourgish (Luxembourg) |
+--------------+------------------------------------+
| lg_UG | Ganda (Uganda) |
+--------------+------------------------------------+
| li_BE | Limburgan (Belgium) |
+--------------+------------------------------------+
| li_NL | Limburgan (Netherlands) |
+--------------+------------------------------------+
| lij_IT | Ligurian (Italy) |
+--------------+------------------------------------+
| ln_CD | Lingala (Congo) |
+--------------+------------------------------------+
| lo_LA | Lao (Laos) |
+--------------+------------------------------------+
| lt | Lithuanian |
+--------------+------------------------------------+
| lt_LT | Lithuanian (Lithuania) |
+--------------+------------------------------------+
| lv | Latvian |
+--------------+------------------------------------+
| lv_LV | Latvian (Latvia) |
+--------------+------------------------------------+
| lzh_TW | Literary Chinese (Taiwan) |
+--------------+------------------------------------+
| mag_IN | Magahi (India) |
+--------------+------------------------------------+
| mai_IN | Maithili (India) |
+--------------+------------------------------------+
| mg_MG | Malagasy (Madagascar) |
+--------------+------------------------------------+
| mh_MH | Marshallese (Marshall Islands) |
+--------------+------------------------------------+
| mhr_RU | Eastern Mari (Russia) |
+--------------+------------------------------------+
| mi | Maori |
+--------------+------------------------------------+
| mi_NZ | Maori (New Zealand) |
+--------------+------------------------------------+
| miq_NI | Mískito (Nicaragua) |
+--------------+------------------------------------+
| mk | Macedonian |
+--------------+------------------------------------+
| mk_MK | Macedonian (Macedonia) |
+--------------+------------------------------------+
| ml | Malayalam |
+--------------+------------------------------------+
| ml_IN | Malayalam (India) |
+--------------+------------------------------------+
| mni_IN | Manipuri (India) |
+--------------+------------------------------------+
| mn_MN | Mongolian (Mongolia) |
+--------------+------------------------------------+
| mr_IN | Marathi (India) |
+--------------+------------------------------------+
| ms | Malay |
+--------------+------------------------------------+
| ms_MY | Malay (Malaysia) |
+--------------+------------------------------------+
| mt | Maltese |
+--------------+------------------------------------+
| mt_MT | Maltese (Malta) |
+--------------+------------------------------------+
| my_MM | Burmese (Myanmar) |
+--------------+------------------------------------+
| myv_RU | Erzya (Russia) |
+--------------+------------------------------------+
| nah_MX | Nahuatl languages (Mexico) |
+--------------+------------------------------------+
| nan_TW | Min Nan Chinese (Taiwan) |
+--------------+------------------------------------+
| nb | Norwegian Bokmål |
+--------------+------------------------------------+
| nb_NO | Norwegian Bokmål (Norway) |
+--------------+------------------------------------+
| nds_DE | Low German (Germany) |
+--------------+------------------------------------+
| nds_NL | Low German (Netherlands) |
+--------------+------------------------------------+
| ne_NP | Nepali (Nepal) |
+--------------+------------------------------------+
| nhn_MX | Central Nahuatl (Mexico) |
+--------------+------------------------------------+
| niu_NU | Niuean (Niue) |
+--------------+------------------------------------+
| niu_NZ | Niuean (New Zealand) |
+--------------+------------------------------------+
| nl | Dutch |
+--------------+------------------------------------+
| nl_AW | Dutch (Aruba) |
+--------------+------------------------------------+
| nl_BE | Dutch (Belgium) |
+--------------+------------------------------------+
| nl_NL | Dutch (Netherlands) |
+--------------+------------------------------------+
| nn | Norwegian Nynorsk |
+--------------+------------------------------------+
| nn_NO | Norwegian Nynorsk (Norway) |
+--------------+------------------------------------+
| nr_ZA | South Ndebele (South Africa) |
+--------------+------------------------------------+
| nso_ZA | Pedi (South Africa) |
+--------------+------------------------------------+
| oc_FR | Occitan (France) |
+--------------+------------------------------------+
| om | Oromo |
+--------------+------------------------------------+
| om_ET | Oromo (Ethiopia) |
+--------------+------------------------------------+
| om_KE | Oromo (Kenya) |
+--------------+------------------------------------+
| or_IN | Oriya (India) |
+--------------+------------------------------------+
| os_RU | Ossetian (Russia) |
+--------------+------------------------------------+
| pa_IN | Panjabi (India) |
+--------------+------------------------------------+
| pa_PK | Panjabi (Pakistan) |
+--------------+------------------------------------+
| pap | Papiamento |
+--------------+------------------------------------+
| pap_AN | Papiamento (Netherlands Antilles) |
+--------------+------------------------------------+
| pap_AW | Papiamento (Aruba) |
+--------------+------------------------------------+
| pap_CW | Papiamento (Curaçao) |
+--------------+------------------------------------+
| pl | Polish |
+--------------+------------------------------------+
| pl_PL | Polish (Poland) |
+--------------+------------------------------------+
| pr | Pirate |
+--------------+------------------------------------+
| ps_AF | Pushto (Afghanistan) |
+--------------+------------------------------------+
| pt | Portuguese |
+--------------+------------------------------------+
| pt_BR | Portuguese (Brazil) |
+--------------+------------------------------------+
| pt_PT | Portuguese (Portugal) |
+--------------+------------------------------------+
| quy_PE | Ayacucho Quechua (Peru) |
+--------------+------------------------------------+
| quz_PE | Cusco Quechua (Peru) |
+--------------+------------------------------------+
| raj_IN | Rajasthani (India) |
+--------------+------------------------------------+
| ro | Romanian |
+--------------+------------------------------------+
| ro_RO | Romanian (Romania) |
+--------------+------------------------------------+
| ru | Russian |
+--------------+------------------------------------+
| ru_RU | Russian (Russia) |
+--------------+------------------------------------+
| ru_UA | Russian (Ukraine) |
+--------------+------------------------------------+
| rw_RW | Kinyarwanda (Rwanda) |
+--------------+------------------------------------+
| sa_IN | Sanskrit (India) |
+--------------+------------------------------------+
| sat_IN | Santali (India) |
+--------------+------------------------------------+
| sc_IT | Sardinian (Italy) |
+--------------+------------------------------------+
| sco | Scots |
+--------------+------------------------------------+
| sd_IN | Sindhi (India) |
+--------------+------------------------------------+
| se_NO | Northern Sami (Norway) |
+--------------+------------------------------------+
| sgs_LT | Samogitian (Lithuania) |
+--------------+------------------------------------+
| shs_CA | Shuswap (Canada) |
+--------------+------------------------------------+
| sid_ET | Sidamo (Ethiopia) |
+--------------+------------------------------------+
| si | Sinhala |
+--------------+------------------------------------+
| si_LK | Sinhala (Sri Lanka) |
+--------------+------------------------------------+
| sk | Slovak |
+--------------+------------------------------------+
| sk_SK | Slovak (Slovakia) |
+--------------+------------------------------------+
| sl | Slovenian |
+--------------+------------------------------------+
| sl_SI | Slovenian (Slovenia) |
+--------------+------------------------------------+
| so | Somali |
+--------------+------------------------------------+
| so_DJ | Somali (Djibouti) |
+--------------+------------------------------------+
| so_ET | Somali (Ethiopia) |
+--------------+------------------------------------+
| so_KE | Somali (Kenya) |
+--------------+------------------------------------+
| so_SO | Somali (Somalia) |
+--------------+------------------------------------+
| son_ML | Songhai languages (Mali) |
+--------------+------------------------------------+
| sq | Albanian |
+--------------+------------------------------------+
| sq_AL | Albanian (Albania) |
+--------------+------------------------------------+
| sq_KV | Albanian (Kosovo) |
+--------------+------------------------------------+
| sq_MK | Albanian (Macedonia) |
+--------------+------------------------------------+
| sr | Serbian |
+--------------+------------------------------------+
| sr_Cyrl | Serbian (Cyrillic) |
+--------------+------------------------------------+
| sr_Latn | Serbian (Latin) |
+--------------+------------------------------------+
| sr_ME | Serbian (Montenegro) |
+--------------+------------------------------------+
| sr_RS | Serbian (Serbia) |
+--------------+------------------------------------+
| ss_ZA | Swati (South Africa) |
+--------------+------------------------------------+
| st_ZA | Southern Sotho (South Africa) |
+--------------+------------------------------------+
| sv | Swedish |
+--------------+------------------------------------+
| sv_FI | Swedish (Finland) |
+--------------+------------------------------------+
| sv_SE | Swedish (Sweden) |
+--------------+------------------------------------+
| sw_KE | Swahili (Kenya) |
+--------------+------------------------------------+
| sw_TZ | Swahili (Tanzania) |
+--------------+------------------------------------+
| szl_PL | Silesian (Poland) |
+--------------+------------------------------------+
| ta | Tamil |
+--------------+------------------------------------+
| ta_IN | Tamil (India) |
+--------------+------------------------------------+
| ta_LK | Tamil (Sri Lanka) |
+--------------+------------------------------------+
| tcy_IN | Tulu (India) |
+--------------+------------------------------------+
| te | Telugu |
+--------------+------------------------------------+
| te_IN | Telugu (India) |
+--------------+------------------------------------+
| tg_TJ | Tajik (Tajikistan) |
+--------------+------------------------------------+
| the_NP | Chitwania Tharu (Nepal) |
+--------------+------------------------------------+
| th | Thai |
+--------------+------------------------------------+
| th_TH | Thai (Thailand) |
+--------------+------------------------------------+
| ti | Tigrinya |
+--------------+------------------------------------+
| ti_ER | Tigrinya (Eritrea) |
+--------------+------------------------------------+
| ti_ET | Tigrinya (Ethiopia) |
+--------------+------------------------------------+
| tig_ER | Tigre (Eritrea) |
+--------------+------------------------------------+
| tk_TM | Turkmen (Turkmenistan) |
+--------------+------------------------------------+
| tl_PH | Tagalog (Philippines) |
+--------------+------------------------------------+
| tn_ZA | Tswana (South Africa) |
+--------------+------------------------------------+
| tr | Turkish |
+--------------+------------------------------------+
| tr_CY | Turkish (Cyprus) |
+--------------+------------------------------------+
| tr_TR | Turkish (Turkey) |
+--------------+------------------------------------+
| ts_ZA | Tsonga (South Africa) |
+--------------+------------------------------------+
| tt_RU | Tatar (Russia) |
+--------------+------------------------------------+
| ug_CN | Uighur (China) |
+--------------+------------------------------------+
| uk | Ukrainian |
+--------------+------------------------------------+
| uk_UA | Ukrainian (Ukraine) |
+--------------+------------------------------------+
| unm_US | Unami (United States) |
+--------------+------------------------------------+
| ur | Urdu |
+--------------+------------------------------------+
| ur_IN | Urdu (India) |
+--------------+------------------------------------+
| ur_PK | Urdu (Pakistan) |
+--------------+------------------------------------+
| uz | Uzbek |
+--------------+------------------------------------+
| uz_UZ | Uzbek (Uzbekistan) |
+--------------+------------------------------------+
| ve_ZA | Venda (South Africa) |
+--------------+------------------------------------+
| vi | Vietnamese |
+--------------+------------------------------------+
| vi_VN | Vietnamese (Vietnam) |
+--------------+------------------------------------+
| wa_BE | Walloon (Belgium) |
+--------------+------------------------------------+
| wae_CH | Walser (Switzerland) |
+--------------+------------------------------------+
| wal_ET | Wolaytta (Ethiopia) |
+--------------+------------------------------------+
| wo_SN | Wolof (Senegal) |
+--------------+------------------------------------+
| xh_ZA | Xhosa (South Africa) |
+--------------+------------------------------------+
| yi_US | Yiddish (United States) |
+--------------+------------------------------------+
| yo_NG | Yoruba (Nigeria) |
+--------------+------------------------------------+
| yue_HK | Yue Chinese (Hong Kong) |
+--------------+------------------------------------+
| zh | Chinese |
+--------------+------------------------------------+
| zh_CN | Chinese (China) |
+--------------+------------------------------------+
| zh_HK | Chinese (Hong Kong) |
+--------------+------------------------------------+
| zh_SG | Chinese (Singapore) |
+--------------+------------------------------------+
| zh_TW | Chinese (Taiwan) |
+--------------+------------------------------------+
| zu_ZA | Zulu (South Africa) |
+--------------+------------------------------------+

View File

@ -1,10 +1,8 @@
Creating Android plugins
========================
# Creating Android plugins
Introduction
------------
## Introduction
Android plugins are powerful tools to extend the capabilities of the Pandemonium engine
by tapping into the functionality provided by the Android platform and ecosystem.
@ -29,8 +27,7 @@ and capabilities that don't belong to the core feature set of a game engine:
- Posting to Facebook, Twitter, etc.
- Push notifications
Android plugin
--------------
## Android plugin
While introduced in Pandemonium 3.2, the Android plugin system got a significant architecture update starting with Pandemonium 3.2.2.
The new plugin system is backward-incompatible with the previous one, but both systems are kept functional in future releases of the 3.2.x branch.
@ -46,8 +43,7 @@ with the following caveats:
- The library must have a dependency on the Pandemonium engine library (`pandemonium-lib.<version>.<status>.aar`). A stable version is made available for each Pandemonium release on the `Pandemonium download page ( https://pandemoniumengine.org/download )`.
- The library must include a specifically configured `<meta-data )` tag in its manifest file.
Building an Android plugin
^^^^^^^^^^^^^^^^^^^^^^^^^^
#### Building an Android plugin
**Prerequisite:** `Android Studio ( https://developer.android.com/studio )` is strongly recommended as the IDE to use to create Android plugins.
The instructions below assumes that you're using Android Studio.
@ -122,8 +118,7 @@ The instructions below assumes that you're using Android Studio.
- **remote**: contains a list of remote binary gradle dependencies for the plugin.
- **custom_maven_repos**: contains a list of URLs specifying the custom maven repositories required for the plugin's dependencies.
Loading and using an Android plugin
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#### Loading and using an Android plugin
Move the plugin configuration file (e.g.: `MyPlugin.gdap`) and, if any, its local binary (e.g.: `MyPlugin.aar`) and dependencies to the Pandemonium project's `res://android/plugins` directory.
@ -140,8 +135,7 @@ From your script:
```
Bundling GDNative resources
^^^^^^^^^^^^^^^^^^^^^^^^^^^
#### Bundling GDNative resources
An Android plugin can define and provide C/C++ GDNative resources, either to provide and/or access functionality from the game logic.
The GDNative resources can be bundled within the plugin `aar` file which simplifies the distribution and deployment process:
@ -154,19 +148,16 @@ For GDNative libraries, the plugin singleton object must override the `org.pande
and return the paths to the bundled GDNative libraries config files (`*.gdnlib`). The paths must be relative to the `assets` directory.
At runtime, the plugin will provide these paths to Pandemonium core which will use them to load and initialize the bundled GDNative libraries.
Reference implementations
^^^^^^^^^^^^^^^^^^^^^^^^^
#### Reference implementations
- `Pandemonium Oculus Mobile plugin ( https://github.com/PandemoniumVR/pandemonium_oculus_mobile )`
- `Bundled gdnative resources ( https://github.com/PandemoniumVR/pandemonium_oculus_mobile/tree/master/plugin/src/main/assets/addons/pandemonium_ovrmobile )`
- `Pandemonium Google Play Billing plugin ( https://github.com/Relintai/pandemonium_engine-google-play-billing )`
Troubleshooting
---------------
## Troubleshooting
Pandemonium crashes upon load
^^^^^^^^^^^^^^^^^^^^^^^
#### Pandemonium crashes upon load
Check `adb logcat` for possible problems, then:

View File

@ -1,7 +1,6 @@
Android in-app purchases
========================
# Android in-app purchases
Pandemonium offers a first-party `PandemoniumGooglePlayBilling` Android plugin since Pandemonium 3.2.2.
The new plugin uses the `Google Play Billing library ( https://developer.android.com/google/play/billing )`
@ -11,13 +10,11 @@ If you learn better by looking at an example, you can find the demo project
`here ( https://github.com/Relintai/pandemonium_engine-demo-projects/tree/master/mobile/android_iap )`.
Migrating from Pandemonium 3.2.1 and lower (PandemoniumPaymentsV3)
------------------------------------------------------
## Migrating from Pandemonium 3.2.1 and lower (PandemoniumPaymentsV3)
The new `PandemoniumGooglePlayBilling` API is not compatible with its predecessor `PandemoniumPaymentsV3`.
Changes
*******
#### Changes
- You need to enable the Custom Build option in your Android export settings and install
the `PandemoniumGooglePlayBilling` plugin manually (see below for details)
@ -28,11 +25,9 @@ Changes
- Signals (no polling or callback objects)
Usage
-----
## Usage
Getting started
***************
#### Getting started
If not already done, make sure you have enabled and successfully set up `Android Custom Builds ( doc_android_custom_build )`.
Grab the`PandemoniumGooglePlayBilling` plugin binary and config from the `releases page ( https://github.com/Relintai/pandemonium_engine-google-play-billing/releases )`
@ -40,8 +35,7 @@ and put both into `res://android/plugins`.
The plugin should now show up in the Android export settings, where you can enable it.
Getting started
***************
#### Getting started
To use the `PandemoniumGooglePlayBilling` API you first have to get the `PandemoniumGooglePlayBilling`
singleton and start the connection:
@ -75,8 +69,7 @@ singleton and start the connection:
All API methods only work if the API is connected. You can use `payment.isReady()` to check the connection status.
Querying available items
************************
#### Querying available items
As soon as the API is connected, you can query SKUs using `querySkuDetails`.
@ -92,8 +85,7 @@ Full example:
```
Purchase an item
****************
#### Purchase an item
To initiate the purchase flow for an item, call `purchase`.
You **must** query the SKU details for an item before you can
@ -117,8 +109,7 @@ Then, wait for the `on_purchases_updated` callback and handle the purchase resul
```
Check if the user purchased an item
***********************************
#### Check if the user purchased an item
To get all purchases, call `queryPurchases`. Unlike most of the other functions, `queryPurchases` is
a synchronous operation and returns a `Dictionary` with a status code
@ -138,8 +129,7 @@ Full example:
```
Consumables
***********
#### Consumables
If your in-app item is not a one-time purchase but a consumable item (e.g. coins) which can be purchased
multiple times, you can consume an item by calling `consumePurchase` with a purchase token.
@ -157,8 +147,7 @@ Consuming a product allows the user to purchase it again, and removes it from ap
# Or wait for the _on_purchase_consumed callback before giving the user what they bought
```
Subscriptions
*************
#### Subscriptions
Subscriptions don't work much different from regular in-app items. Just use `"subs"` as second
argument to `querySkuDetails` to get subscription details.

View File

@ -1,14 +1,12 @@
Creating iOS plugins
====================
# Creating iOS plugins
This page explains what iOS plugins can do for you, how to use an existing plugin, and the steps to code a new one.
iOS plugins allow you to use third-party libraries and support iOS-specific features like In-App Purchases, GameCenter integration, ARKit support, and more.
Loading and using an existing plugin
------------------------------------
## Loading and using an existing plugin
An iOS plugin requires a `.gdip` configuration file, a binary file which can be either `.a` static library or `.xcframework` containing `.a` static libraries, and possibly other dependencies. To use it, you need to:
@ -28,8 +26,7 @@ When a plugin is active, you can access it in your using `Engine.get_singleton()
print(singleton.foo())
```
Creating an iOS plugin
----------------------
#### Creating an iOS plugin
At its core, a Pandemonium iOS plugin is an iOS library (*.a* archive file or *.xcframework* containing static libraries) with the following requirements:

View File

@ -1,7 +1,6 @@
Plugins for iOS
===============
# Plugins for iOS
Pandemonium provides StoreKit, GameCenter, iCloud services and other plugins.
They are using same model of asynchronous calls explained below.
@ -10,8 +9,7 @@ ARKit and Camera access are also provided as plugins.
Latest updates, documentation and source code can be found at `Pandemonium iOS plugins repository ( https://github.com/Relintai/pandemonium_engine-ios-plugins )`
Accessing plugin singletons
---------------------------
## Accessing plugin singletons
To access plugin functionality, you first need to check that the plugin is
exported and available by calling the `Engine.has_singleton()` function, which
@ -36,8 +34,7 @@ Here's an example of how to do this in GDScript:
```
Asynchronous methods
--------------------
## Asynchronous methods
When requesting an asynchronous operation, the method will look like
this:
@ -87,8 +84,7 @@ The pending event interface consists of two methods:
- `Variant pop_pending_event()`
Pops the first event from the queue and returns it.
Store Kit
---------
## Store Kit
Implemented in `Pandemonium iOS InAppStore plugin ( https://github.com/Relintai/pandemonium_engine-ios-plugins/blob/master/plugins/inappstore/in_app_store.mm )`.
@ -112,15 +108,13 @@ The following methods are available and documented below:
Variant pop_pending_event()
```
`purchase`
~~~~~~~~~~~~
### `purchase`
Purchases a product ID through the Store Kit API. You have to call `finish_transaction(product_id)` once you
receive a successful response or call `set_auto_finish_transaction(true)` prior to calling `purchase()`.
These two methods ensure the transaction is completed.
Parameters
^^^^^^^^^^
#### Parameters
Takes a dictionary as a parameter, with one field, `product_id`, a
string with your product ID. Example:
@ -129,8 +123,7 @@ string with your product ID. Example:
var result = in_app_store.purchase({ "product_id": "my_product" })
```
Response event
^^^^^^^^^^^^^^
#### Response event
The response event will be a dictionary with the following fields:
@ -154,13 +147,11 @@ On success:
}
```
`request_product_info`
~~~~~~~~~~~~~~~~~~~~~~~~
### `request_product_info`
Requests the product info on a list of product IDs.
Parameters
^^^^^^^^^^
#### Parameters
Takes a dictionary as a parameter, with a single `product_ids` key to which a
string array of product IDs is assigned. Example:
@ -169,8 +160,7 @@ string array of product IDs is assigned. Example:
var result = in_app_store.request_product_info({ "product_ids": ["my_product1", "my_product2"] })
```
Response event
^^^^^^^^^^^^^^
#### Response event
The response event will be a dictionary with the following fields:
@ -187,14 +177,12 @@ The response event will be a dictionary with the following fields:
}
```
`restore_purchases`
~~~~~~~~~~~~~~~~~~~~~
### `restore_purchases`
Restores previously made purchases on user's account. This will create
response events for each previously purchased product ID.
Response event
^^^^^^^^^^^^^^
#### Response event
The response events will be dictionaries with the following fields:
@ -206,14 +194,12 @@ The response events will be dictionaries with the following fields:
}
```
`set_auto_finish_transaction`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
### `set_auto_finish_transaction`
If set to `true`, once a purchase is successful, your purchase will be
finalized automatically. Call this method prior to calling `purchase()`.
Parameters
^^^^^^^^^^
#### Parameters
Takes a boolean as a parameter which specifies if purchases should be
automatically finalized. Example:
@ -222,15 +208,13 @@ automatically finalized. Example:
in_app_store.set_auto_finish_transaction(true)
```
`finish_transaction`
~~~~~~~~~~~~~~~~~~~~~~
### `finish_transaction`
If you don't want transactions to be automatically finalized, call this
method after you receive a successful purchase response.
Parameters
^^^^^^^^^^
#### Parameters
Takes a string `product_id` as an argument. `product_id` specifies what product to
finalize the purchase on. Example:
@ -239,8 +223,7 @@ finalize the purchase on. Example:
in_app_store.finish_transaction("my_product1")
```
Game Center
-----------
## Game Center
Implemented in `Pandemonium iOS GameCenter plugin ( https://github.com/Relintai/pandemonium_engine-ios-plugins/blob/master/plugins/gamecenter/game_center.mm )`.
@ -266,13 +249,11 @@ and the pending events interface:
Variant pop_pending_event()
```
`authenticate`
~~~~~~~~~~~~~~~~
### `authenticate`
Authenticates a user in Game Center.
Response event
^^^^^^^^^^^^^^
#### Response event
The response event will be a dictionary with the following fields:
@ -297,13 +278,11 @@ On success:
}
```
`post_score`
~~~~~~~~~~~~~~
### `post_score`
Posts a score to a Game Center leaderboard.
Parameters
^^^^^^^^^^
#### Parameters
Takes a dictionary as a parameter, with two fields:
@ -316,8 +295,7 @@ Example:
var result = game_center.post_score({ "score": 100, "category": "my_leaderboard", })
```
Response event
^^^^^^^^^^^^^^
#### Response event
The response event will be a dictionary with the following fields:
@ -341,13 +319,11 @@ On success:
}
```
`award_achievement`
~~~~~~~~~~~~~~~~~~~~~
### `award_achievement`
Modifies the progress of a Game Center achievement.
Parameters
^^^^^^^^^^
#### Parameters
Takes a Dictionary as a parameter, with 3 fields:
@ -363,8 +339,7 @@ Example:
var result = award_achievement({ "name": "hard_mode_completed", "progress": 6.1 })
```
Response event
^^^^^^^^^^^^^^
#### Response event
The response event will be a dictionary with the following fields:
@ -387,13 +362,11 @@ On success:
}
```
`reset_achievements`
~~~~~~~~~~~~~~~~~~~~~~
### `reset_achievements`
Clears all Game Center achievements. The function takes no parameters.
Response event
^^^^^^^^^^^^^^
#### Response event
The response event will be a dictionary with the following fields:
@ -416,14 +389,12 @@ On success:
}
```
`request_achievements`
~~~~~~~~~~~~~~~~~~~~~~~~
### `request_achievements`
Request all the Game Center achievements the player has made progress
on. The function takes no parameters.
Response event
^^^^^^^^^^^^^^
#### Response event
The response event will be a dictionary with the following fields:
@ -448,14 +419,12 @@ On success:
}
```
`request_achievement_descriptions`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
### `request_achievement_descriptions`
Request the descriptions of all existing Game Center achievements
regardless of progress. The function takes no parameters.
Response event
^^^^^^^^^^^^^^
#### Response event
The response event will be a dictionary with the following fields:
@ -485,14 +454,12 @@ On success:
}
```
`show_game_center`
~~~~~~~~~~~~~~~~~~~~
### `show_game_center`
Displays the built in Game Center overlay showing leaderboards,
achievements, and challenges.
Parameters
^^^^^^^^^^
#### Parameters
Takes a Dictionary as a parameter, with two fields:
@ -511,8 +478,7 @@ Examples:
var result = show_game_center({ "view": "achievements" })
```
Response event
^^^^^^^^^^^^^^
#### Response event
The response event will be a dictionary with the following fields:
@ -525,8 +491,7 @@ On close:
}
```
Multi-platform games
--------------------
### Multi-platform games
When working on a multi-platform game, you won't always have the
"GameCenter" singleton available (for example when running on PC or

View File

@ -1,11 +0,0 @@
HTML5
=====
.. toctree::
:maxdepth: 1
:name: toc-learn-features-platform-html5
html5_shell_classref
customizing_html5_shell