Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Websites UFRPE
Wagtail Videos
Commits
26d0a91b
Commit
26d0a91b
authored
Jan 28, 2021
by
Seb
Browse files
Track models + signals refactor to work with swappable models
parent
392515fa
Changes
6
Hide whitespace changes
Inline
Side-by-side
tests/app/migrations/0002_customtrack.py
0 → 100644
View file @
26d0a91b
# Generated by Django 2.2.17 on 2021-01-28 03:08
from
django.db
import
migrations
,
models
import
django.db.models.deletion
import
wagtailvideos.models
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'app'
,
'0001_initial'
),
]
operations
=
[
migrations
.
CreateModel
(
name
=
'CustomTrack'
,
fields
=
[
(
'id'
,
models
.
AutoField
(
auto_created
=
True
,
primary_key
=
True
,
serialize
=
False
,
verbose_name
=
'ID'
)),
(
'file'
,
models
.
FileField
(
upload_to
=
wagtailvideos
.
models
.
get_upload_to
,
verbose_name
=
'file'
)),
(
'kind'
,
models
.
CharField
(
choices
=
[(
'subtitles'
,
'Subtitles'
),
(
'captions'
,
'Captions'
),
(
'descriptions'
,
'Descriptions'
),
(
'chapters'
,
'Chapters'
),
(
'metadata'
,
'Metadata'
)],
default
=
'subtitles'
,
max_length
=
50
)),
(
'label'
,
models
.
CharField
(
blank
=
True
,
help_text
=
'A user-readable title of the text track.'
,
max_length
=
255
)),
(
'language'
,
models
.
CharField
(
blank
=
True
,
choices
=
[(
'Afar'
,
'aa'
),
(
'Afar - Djibouti'
,
'aa-DJ'
),
(
'Afar - Eritrea'
,
'aa-ER'
),
(
'Afar - Ethiopia'
,
'aa-ET'
),
(
'Afrikaans'
,
'af'
),
(
'Afrikaans - Namibia'
,
'af-NA'
),
(
'Afrikaans - South Africa'
,
'af-ZA'
),
(
'Aghem'
,
'agq'
),
(
'Aghem - Cameroon'
,
'agq-CM'
),
(
'Akan'
,
'ak'
),
(
'Akan - Ghana'
,
'ak-GH'
),
(
'Albanian'
,
'sq'
),
(
'Albanian - Albania'
,
'sq-AL'
),
(
'Albanian - North Macedonia'
,
'sq-MK'
),
(
'Alsatian'
,
'gsw'
),
(
'Alsatian - France'
,
'gsw-FR'
),
(
'Alsatian - Liechtenstein'
,
'gsw-LI'
),
(
'Alsatian - Switzerland'
,
'gsw-CH'
),
(
'Amharic'
,
'am'
),
(
'Amharic - Ethiopia'
,
'am-ET'
),
(
'Arabic'
,
'ar'
),
(
'Arabic - Algeria'
,
'ar-DZ'
),
(
'Arabic - Bahrain'
,
'ar-BH'
),
(
'Arabic - Chad'
,
'ar-TD'
),
(
'Arabic - Comoros'
,
'ar-KM'
),
(
'Arabic - Djibouti'
,
'ar-DJ'
),
(
'Arabic - Egypt'
,
'ar-EG'
),
(
'Arabic - Eritrea'
,
'ar-ER'
),
(
'Arabic - Iraq'
,
'ar-IQ'
),
(
'Arabic - Israel'
,
'ar-IL'
),
(
'Arabic - Jordan'
,
'ar-JO'
),
(
'Arabic - Kuwait'
,
'ar-KW'
),
(
'Arabic - Lebanon'
,
'ar-LB'
),
(
'Arabic - Libya'
,
'ar-LY'
),
(
'Arabic - Mauritania'
,
'ar-MR'
),
(
'Arabic - Morocco'
,
'ar-MA'
),
(
'Arabic - Oman'
,
'ar-OM'
),
(
'Arabic - Palestinian Authority'
,
'ar-PS'
),
(
'Arabic - Qatar'
,
'ar-QA'
),
(
'Arabic - Saudi Arabia'
,
'ar-SA'
),
(
'Arabic - Somalia'
,
'ar-SO'
),
(
'Arabic - South Sudan'
,
'ar-SS'
),
(
'Arabic - Sudan'
,
'ar-SD'
),
(
'Arabic - Syria'
,
'ar-SY'
),
(
'Arabic - Tunisia'
,
'ar-TN'
),
(
'Arabic - U.A.E.'
,
'ar-AE'
),
(
'Arabic - World'
,
'ar-001'
),
(
'Arabic - Yemen'
,
'ar-YE'
),
(
'Armenian'
,
'hy'
),
(
'Armenian - Armenia'
,
'hy-AM'
),
(
'Assamese'
,
'as'
),
(
'Assamese - India'
,
'as-IN'
),
(
'Asturian'
,
'ast'
),
(
'Asturian - Spain'
,
'ast-ES'
),
(
'Asu'
,
'asa'
),
(
'Asu - Tanzania'
,
'asa-TZ'
),
(
'Azerbaijani (Cyrillic)'
,
'az-Cyrl'
),
(
'Azerbaijani (Cyrillic) - Azerbaijan'
,
'az-Cyrl-AZ'
),
(
'Azerbaijani (Latin)'
,
'az'
),
(
'Azerbaijani (Latin), Latn'
,
'az-Latn'
),
(
'Azerbaijani (Latin) - Azerbaijan'
,
'az-Latn-AZ'
),
(
'Bafia'
,
'ksf'
),
(
'Bafia - Cameroon'
,
'ksf-CM'
),
(
'Bamanankan'
,
'bm'
),
(
'Bamanankan (Latin) - Mali'
,
'bm-Latn-ML'
),
(
'Bangla'
,
'bn'
),
(
'Bangla - Bangladesh'
,
'bn-BD'
),
(
'Bangla - India'
,
'bn-IN'
),
(
'Basaa'
,
'bas'
),
(
'Basaa - Cameroon'
,
'bas-CM'
),
(
'Bashkir'
,
'ba'
),
(
'Bashkir - Russia'
,
'ba-RU'
),
(
'Basque'
,
'eu'
),
(
'Basque - Spain'
,
'eu-ES'
),
(
'Belarusian'
,
'be'
),
(
'Belarusian - Belarus'
,
'be-BY'
),
(
'Bemba'
,
'bem'
),
(
'Bemba - Zambia'
,
'bem-ZM'
),
(
'Bena'
,
'bez'
),
(
'Bena - Tanzania'
,
'bez-TZ'
),
(
'Blin'
,
'byn'
),
(
'Blin - Eritrea'
,
'byn-ER'
),
(
'Bodo'
,
'brx'
),
(
'Bodo - India'
,
'brx-IN'
),
(
'Bosnian (Cyrillic)'
,
'bs-Cyrl'
),
(
'Bosnian (Cyrillic) - Bosnia and Herzegovina'
,
'bs-Cyrl-BA'
),
(
'Bosnian (Latin)'
,
'bs'
),
(
'Bosnian (Latin), Latn'
,
'bs-Latn'
),
(
'Bosnian (Latin) - Bosnia and Herzegovina'
,
'bs-Latn-BA'
),
(
'Breton'
,
'br'
),
(
'Breton - France'
,
'br-FR'
),
(
'Bulgarian'
,
'bg'
),
(
'Bulgarian - Bulgaria'
,
'bg-BG'
),
(
'Burmese'
,
'my'
),
(
'Burmese - Myanmar'
,
'my-MM'
),
(
'Catalan'
,
'ca'
),
(
'Catalan - Andorra'
,
'ca-AD'
),
(
'Catalan - France'
,
'ca-FR'
),
(
'Catalan - Italy'
,
'ca-IT'
),
(
'Catalan - Spain'
,
'ca-ES'
),
(
'Cebuano'
,
'ceb'
),
(
'Cebuan (Latin)'
,
'ceb-Latn'
),
(
'Cebuan (Latin) - Philippines'
,
'ceb-Latn-PH'
),
(
'Central Atlas Tamazight (Latin) - Morocco'
,
'tzm-Latn-MA'
),
(
'Central Kurdish'
,
'ku'
),
(
'Central Kurdish, Arab'
,
'ku-Arab'
),
(
'Central Kurdish - Iraq'
,
'ku-Arab-IQ'
),
(
'Chakma'
,
'ccp'
),
(
'Chakma - Chakma'
,
'ccp-Cakm'
),
(
'Chakma - Bangladesh'
,
'ccp-Cakm-BD'
),
(
'Chakma - India'
,
'ccp-Cakm-IN'
),
(
'Chechen - Russia'
,
'cd-RU'
),
(
'Cherokee'
,
'chr'
),
(
'Cherokee, Cher'
,
'chr-Cher'
),
(
'Cherokee - United States'
,
'chr-Cher-US'
),
(
'Chiga'
,
'cgg'
),
(
'Chiga - Uganda'
,
'cgg-UG'
),
(
'Chinese (Simplified)'
,
'zh'
),
(
'Chinese (Simplified), Hans'
,
'zh-Hans'
),
(
"Chinese (Simplified) - People's Republic of China"
,
'zh-CN'
),
(
'Chinese (Simplified) - Singapore'
,
'zh-SG'
),
(
'Chinese (Traditional)'
,
'zh-Hant'
),
(
'Chinese (Traditional) - Hong Kong S.A.R.'
,
'zh-HK'
),
(
'Chinese (Traditional) - Macao S.A.R.'
,
'zh-MO'
),
(
'Chinese (Traditional) - Taiwan'
,
'zh-TW'
),
(
'Church Slavic - Russia'
,
'cu-RU'
),
(
'Congo Swahili'
,
'swc'
),
(
'Congo Swahili - Congo DRC'
,
'swc-CD'
),
(
'Cornish'
,
'kw'
),
(
'Cornish - United Kingdom'
,
'kw-GB'
),
(
'Corsican'
,
'co'
),
(
'Corsican - France'
,
'co-FR'
),
(
'Croatian'
,
'hr,'
),
(
'Croatian - Croatia'
,
'hr-HR'
),
(
'Croatian (Latin) - Bosnia and Herzegovina'
,
'hr-BA'
),
(
'Czech'
,
'cs'
),
(
'Czech - Czech Republic'
,
'cs-CZ'
),
(
'Danish'
,
'da'
),
(
'Danish - Denmark'
,
'da-DK'
),
(
'Danish - Greenland'
,
'da-GL'
),
(
'Dari'
,
'prs'
),
(
'Dari - Afghanistan'
,
'prs-AF'
),
(
'Divehi'
,
'dv'
),
(
'Divehi - Maldives'
,
'dv-MV'
),
(
'Duala'
,
'dua'
),
(
'Duala - Cameroon'
,
'dua-CM'
),
(
'Dutch'
,
'nl'
),
(
'Dutch - Aruba'
,
'nl-AW'
),
(
'Dutch - Belgium'
,
'nl-BE'
),
(
'Dutch - Bonaire, Sint Eustatius and Saba'
,
'nl-BQ'
),
(
'Dutch - Curaçao'
,
'nl-CW'
),
(
'Dutch - Netherlands'
,
'nl-NL'
),
(
'Dutch - Sint Maarten'
,
'nl-SX'
),
(
'Dutch - Suriname'
,
'nl-SR'
),
(
'Dzongkha'
,
'dz'
),
(
'Dzongkha - Bhutan'
,
'dz-BT'
),
(
'Embu'
,
'ebu'
),
(
'Embu - Kenya'
,
'ebu-KE'
),
(
'English'
,
'en'
),
(
'English - American Samoa'
,
'en-AS'
),
(
'English - Anguilla'
,
'en-AI'
),
(
'English - Antigua and Barbuda'
,
'en-AG'
),
(
'English - Australia'
,
'en-AU'
),
(
'English - Austria'
,
'en-AT'
),
(
'English - Bahamas'
,
'en-BS'
),
(
'English - Barbados'
,
'en-BB'
),
(
'English - Belgium'
,
'en-BE'
),
(
'English - Belize'
,
'en-BZ'
),
(
'English - Bermuda'
,
'en-BM'
),
(
'English - Botswana'
,
'en-BW'
),
(
'English - British Indian Ocean Territory'
,
'en-IO'
),
(
'English - British Virgin Islands'
,
'en-VG'
),
(
'English - Burundi'
,
'en-BI'
),
(
'English - Cameroon'
,
'en-CM'
),
(
'English - Canada'
,
'en-CA'
),
(
'English - Caribbean'
,
'en-029'
),
(
'English - Cayman Islands'
,
'en-KY'
),
(
'English - Christmas Island'
,
'en-CX'
),
(
'English - Cocos [Keeling] Islands'
,
'en-CC'
),
(
'English - Cook Islands'
,
'en-CK'
),
(
'English - Cyprus'
,
'en-CY'
),
(
'English - Denmark'
,
'en-DK'
),
(
'English - Dominica'
,
'en-DM'
),
(
'English - Eritrea'
,
'en-ER'
),
(
'English - Europe'
,
'en-150'
),
(
'English - Falkland Islands'
,
'en-FK'
),
(
'English - Finland'
,
'en-FI'
),
(
'English - Fiji'
,
'en-FJ'
),
(
'English - Gambia'
,
'en-GM'
),
(
'English - Germany'
,
'en-DE'
),
(
'English - Ghana'
,
'en-GH'
),
(
'English - Gibraltar'
,
'en-GI'
),
(
'English - Grenada'
,
'en-GD'
),
(
'English - Guam'
,
'en-GU'
),
(
'English - Guernsey'
,
'en-GG'
),
(
'English - Guyana'
,
'en-GY'
),
(
'English - Hong Kong'
,
'en-HK'
),
(
'English - India'
,
'en-IN'
),
(
'English - Ireland'
,
'en-IE'
),
(
'English - Isle of Man'
,
'en-IM'
),
(
'English - Israel'
,
'en-IL'
),
(
'English - Jamaica'
,
'en-JM'
),
(
'English - Jersey'
,
'en-JE'
),
(
'English - Kenya'
,
'en-KE'
),
(
'English - Kiribati'
,
'en-KI'
),
(
'English - Lesotho'
,
'en-LS'
),
(
'English - Liberia'
,
'en-LR'
),
(
'English - Macao SAR'
,
'en-MO'
),
(
'English - Madagascar'
,
'en-MG'
),
(
'English - Malawi'
,
'en-MW'
),
(
'English - Malaysia'
,
'en-MY'
),
(
'English - Malta'
,
'en-MT'
),
(
'English - Marshall Islands'
,
'en-MH'
),
(
'English - Mauritius'
,
'en-MU'
),
(
'English - Micronesia'
,
'en-FM'
),
(
'English - Montserrat'
,
'en-MS'
),
(
'English - Namibia'
,
'en-NA'
),
(
'English - Nauru'
,
'en-NR'
),
(
'English - Netherlands'
,
'en-NL'
),
(
'English - New Zealand'
,
'en-NZ'
),
(
'English - Nigeria'
,
'en-NG'
),
(
'English - Niue'
,
'en-NU'
),
(
'English - Norfolk Island'
,
'en-NF'
),
(
'English - Northern Mariana Islands'
,
'en-MP'
),
(
'English - Pakistan'
,
'en-PK'
),
(
'English - Palau'
,
'en-PW'
),
(
'English - Papua New Guinea'
,
'en-PG'
),
(
'English - Pitcairn Islands'
,
'en-PN'
),
(
'English - Puerto Rico'
,
'en-PR'
),
(
'English - Republic of the Philippines'
,
'en-PH'
),
(
'English - Rwanda'
,
'en-RW'
),
(
'English - Saint Kitts and Nevis'
,
'en-KN'
),
(
'English - Saint Lucia'
,
'en-LC'
),
(
'English - Saint Vincent and the Grenadines'
,
'en-VC'
),
(
'English - Samoa'
,
'en-WS'
),
(
'English - Seychelles'
,
'en-SC'
),
(
'English - Sierra Leone'
,
'en-SL'
),
(
'English - Singapore'
,
'en-SG'
),
(
'English - Sint Maarten'
,
'en-SX'
),
(
'English - Slovenia'
,
'en-SI'
),
(
'English - Solomon Islands'
,
'en-SB'
),
(
'English - South Africa'
,
'en-ZA'
),
(
'English - South Sudan'
,
'en-SS'
),
(
'English - St Helena, Ascension, Tristan da Cunha'
,
'en-SH'
),
(
'English - Sudan'
,
'en-SD'
),
(
'English - Swaziland'
,
'en-SZ'
),
(
'English - Sweden'
,
'en-SE'
),
(
'English - Switzerland'
,
'en-CH'
),
(
'English - Tanzania'
,
'en-TZ'
),
(
'English - Tokelau'
,
'en-TK'
),
(
'English - Tonga'
,
'en-TO'
),
(
'English - Trinidad and Tobago'
,
'en-TT'
),
(
'English - Turks and Caicos Islands'
,
'en-TC'
),
(
'English - Tuvalu'
,
'en-TV'
),
(
'English - Uganda'
,
'en-UG'
),
(
'English - United Arab Emirates'
,
'en-AE'
),
(
'English - United Kingdom'
,
'en-GB'
),
(
'English - United States'
,
'en-US'
),
(
'English - US Minor Outlying Islands'
,
'en-UM'
),
(
'English - US Virgin Islands'
,
'en-VI'
),
(
'English - Vanuatu'
,
'en-VU'
),
(
'English - World'
,
'en-001'
),
(
'English - Zambia'
,
'en-ZM'
),
(
'English - Zimbabwe'
,
'en-ZW'
),
(
'Esperanto'
,
'eo'
),
(
'Esperanto - World'
,
'eo-001'
),
(
'Estonian'
,
'et'
),
(
'Estonian - Estonia'
,
'et-EE'
),
(
'Ewe'
,
'ee'
),
(
'Ewe - Ghana'
,
'ee-GH'
),
(
'Ewe - Togo'
,
'ee-TG'
),
(
'Ewondo'
,
'ewo'
),
(
'Ewondo - Cameroon'
,
'ewo-CM'
),
(
'Faroese'
,
'fo'
),
(
'Faroese - Denmark'
,
'fo-DK'
),
(
'Faroese - Faroe Islands'
,
'fo-FO'
),
(
'Filipino'
,
'fil'
),
(
'Filipino - Philippines'
,
'fil-PH'
),
(
'Finnish'
,
'fi'
),
(
'Finnish - Finland'
,
'fi-FI'
),
(
'French'
,
'fr'
),
(
'French - Algeria'
,
'fr-DZ'
),
(
'French - Belgium'
,
'fr-BE'
),
(
'French - Benin'
,
'fr-BJ'
),
(
'French - Burkina Faso'
,
'fr-BF'
),
(
'French - Burundi'
,
'fr-BI'
),
(
'French - Cameroon'
,
'fr-CM'
),
(
'French - Canada'
,
'fr-CA'
),
(
'French - Central African Republic'
,
'fr-CF'
),
(
'French - Chad'
,
'fr-TD'
),
(
'French - Comoros'
,
'fr-KM'
),
(
'French - Congo'
,
'fr-CG'
),
(
'French - Congo, DRC'
,
'fr-CD'
),
(
"French - Côte d'Ivoire"
,
'fr-CI'
),
(
'French - Djibouti'
,
'fr-DJ'
),
(
'French - Equatorial Guinea'
,
'fr-GQ'
),
(
'French - France'
,
'fr-FR'
),
(
'French - French Guiana'
,
'fr-GF'
),
(
'French - French Polynesia'
,
'fr-PF'
),
(
'French - Gabon'
,
'fr-GA'
),
(
'French - Guadeloupe'
,
'fr-GP'
),
(
'French - Guinea'
,
'fr-GN'
),
(
'French - Haiti'
,
'fr-HT'
),
(
'French - Luxembourg'
,
'fr-LU'
),
(
'French - Madagascar'
,
'fr-MG'
),
(
'French - Mali'
,
'fr-ML'
),
(
'French - Martinique'
,
'fr-MQ'
),
(
'French - Mauritania'
,
'fr-MR'
),
(
'French - Mauritius'
,
'fr-MU'
),
(
'French - Mayotte'
,
'fr-YT'
),
(
'French - Morocco'
,
'fr-MA'
),
(
'French - New Caledonia'
,
'fr-NC'
),
(
'French - Niger'
,
'fr-NE'
),
(
'French - Principality of Monaco'
,
'fr-MC'
),
(
'French - Reunion'
,
'fr-RE'
),
(
'French - Rwanda'
,
'fr-RW'
),
(
'French - Saint Barthélemy'
,
'fr-BL'
),
(
'French - Saint Martin'
,
'fr-MF'
),
(
'French - Saint Pierre and Miquelon'
,
'fr-PM'
),
(
'French - Senegal'
,
'fr-SN'
),
(
'French - Seychelles'
,
'fr-SC'
),
(
'French - Switzerland'
,
'fr-CH'
),
(
'French - Syria'
,
'fr-SY'
),
(
'French - Togo'
,
'fr-TG'
),
(
'French - Tunisia'
,
'fr-TN'
),
(
'French - Vanuatu'
,
'fr-VU'
),
(
'French - Wallis and Futuna'
,
'fr-WF'
),
(
'Frisian'
,
'fy'
),
(
'Frisian - Netherlands'
,
'fy-NL'
),
(
'Friulian'
,
'fur'
),
(
'Friulian - Italy'
,
'fur-IT'
),
(
'Fulah'
,
'ff'
),
(
'Fulah (Latin)'
,
'ff-Latn'
),
(
'Fulah (Latin) - Burkina Faso'
,
'ff-Latn-BF'
),
(
'Fulah - Cameroon'
,
'ff-CM'
),
(
'Fulah (Latin) - Cameroon'
,
'ff-Latn-CM'
),
(
'Fulah (Latin) - Gambia'
,
'ff-Latn-GM'
),
(
'Fulah (Latin) - Ghana'
,
'ff-Latn-GH'
),
(
'Fulah - Guinea'
,
'ff-GN'
),
(
'Fulah (Latin) - Guinea'
,
'ff-Latn-GN'
),
(
'Fulah (Latin) - Guinea-Bissau'
,
'ff-Latn-GW'
),
(
'Fulah (Latin) - Liberia'
,
'ff-Latn-LR'
),
(
'Fulah - Mauritania'
,
'ff-MR'
),
(
'Fulah (Latin) - Mauritania'
,
'ff-Latn-MR'
),
(
'Fulah (Latin) - Niger'
,
'ff-Latn-NE'
),
(
'Fulah - Nigeria'
,
'ff-NG'
),
(
'Fulah (Latin) - Nigeria'
,
'ff-Latn-NG'
),
(
'Fulah - Senegal'
,
'ff-Latn-SN'
),
(
'Fulah (Latin) - Sierra Leone'
,
'ff-Latn-SL'
),
(
'Galician'
,
'gl'
),
(
'Galician - Spain'
,
'gl-ES'
),
(
'Ganda'
,
'lg'
),
(
'Ganda - Uganda'
,
'lg-UG'
),
(
'Georgian'
,
'ka'
),
(
'Georgian - Georgia'
,
'ka-GE'
),
(
'German'
,
'de'
),
(
'German - Austria'
,
'de-AT'
),
(
'German - Belgium'
,
'de-BE'
),
(
'German - Germany'
,
'de-DE'
),
(
'German - Italy'
,
'de-IT'
),
(
'German - Liechtenstein'
,
'de-LI'
),
(
'German - Luxembourg'
,
'de-LU'
),
(
'German - Switzerland'
,
'de-CH'
),
(
'Greek'
,
'el'
),
(
'Greek - Cyprus'
,
'el-CY'
),
(
'Greek - Greece'
,
'el-GR'
),
(
'Greenlandic'
,
'kl'
),
(
'Greenlandic - Greenland'
,
'kl-GL'
),
(
'Guarani'
,
'gn'
),
(
'Guarani - Paraguay'
,
'gn-PY'
),
(
'Gujarati'
,
'gu'
),
(
'Gujarati - India'
,
'gu-IN'
),
(
'Gusii'
,
'guz'
),
(
'Gusii - Kenya'
,
'guz-KE'
),
(
'Hausa (Latin)'
,
'ha'
),
(
'Hausa (Latin), Latn'
,
'ha-Latn'
),
(
'Hausa (Latin) - Ghana'
,
'ha-Latn-GH'
),
(
'Hausa (Latin) - Niger'
,
'ha-Latn-NE'
),
(
'Hausa (Latin) - Nigeria'
,
'ha-Latn-NG'
),
(
'Hawaiian'
,
'haw'
),
(
'Hawaiian - United States'
,
'haw-US'
),
(
'Hebrew'
,
'he'
),
(
'Hebrew - Israel'
,
'he-IL'
),
(
'Hindi'
,
'hi'
),
(
'Hindi - India'
,
'hi-IN'
),
(
'Hungarian'
,
'hu'
),
(
'Hungarian - Hungary'
,
'hu-HU'
),
(
'Icelandic'
,
'is'
),
(
'Icelandic - Iceland'
,
'is-IS'
),
(
'Igbo'
,
'ig'
),
(
'Igbo - Nigeria'
,
'ig-NG'
),
(
'Indonesian'
,
'id'
),
(
'Indonesian - Indonesia'
,
'id-ID'
),
(
'Interlingua'
,
'ia'
),
(
'Interlingua - France'
,
'ia-FR'
),
(
'Interlingua - World'
,
'ia-001'
),
(
'Inuktitut (Latin)'
,
'iu'
),
(
'Inuktitut (Latin), Latn'
,
'iu-Latn'
),
(
'Inuktitut (Latin) - Canada'
,
'iu-Latn-CA'
),
(
'Inuktitut (Syllabics)'
,
'iu-Cans'
),
(
'Inuktitut (Syllabics) - Canada'
,
'iu-Cans-CA'
),
(
'Irish'
,
'ga'
),
(
'Irish - Ireland'
,
'ga-IE'
),
(
'Italian'
,
'it'
),
(
'Italian - Italy'
,
'it-IT'
),
(
'Italian - San Marino'
,
'it-SM'
),
(
'Italian - Switzerland'
,
'it-CH'
),
(
'Italian - Vatican City'
,
'it-VA'
),
(
'Japanese'
,
'ja'
),
(
'Japanese - Japan'
,
'ja-JP'
),
(
'Javanese'
,
'jv'
),
(
'Javanese - Latin'
,
'jv-Latn'
),
(
'Javanese - Latin, Indonesia'
,
'jv-Latn-ID'
),
(
'Jola-Fonyi'
,
'dyo'
),
(
'Jola-Fonyi - Senegal'
,
'dyo-SN'
),
(
'Kabuverdianu'
,
'kea'
),
(
'Kabuverdianu - Cabo Verde'
,
'kea-CV'
),
(
'Kabyle'
,
'kab'
),
(
'Kabyle - Algeria'
,
'kab-DZ'
),
(
'Kako'
,
'kkj'
),
(
'Kako - Cameroon'
,
'kkj-CM'
),
(
'Kalenjin'
,
'kln'
),
(
'Kalenjin - Kenya'
,
'kln-KE'
),
(
'Kamba'
,
'kam'
),
(
'Kamba - Kenya'
,
'kam-KE'
),
(
'Kannada'
,
'kn'
),
(
'Kannada - India'
,
'kn-IN'
),
(
'Kashmiri'
,
'ks'
),
(
'Kashmiri - Perso-Arabic'
,
'ks-Arab'
),
(
'Kashmiri - Perso-Arabic, IN'
,
'ks-Arab-IN'
),
(
'Kazakh'
,
'kk'
),
(
'Kazakh - Kazakhstan'
,
'kk-KZ'
),
(
'Khmer'
,
'km'
),
(
'Khmer - Cambodia'
,
'km-KH'
),
(
"K'iche"
,
'quc'
),
(
"K'iche - Guatemala"
,
'quc-Latn-GT'
),
(
'Kikuyu'
,
'ki'
),
(
'Kikuyu - Kenya'
,
'ki-KE'
),
(
'Kinyarwanda'
,
'rw'
),
(
'Kinyarwanda - Rwanda'
,
'rw-RW'
),
(
'Kiswahili'
,
'sw'
),
(
'Kiswahili - Kenya'
,
'sw-KE'
),
(
'Kiswahili - Tanzania'
,
'sw-TZ'
),
(
'Kiswahili - Uganda'
,
'sw-UG'
),
(
'Konkani'
,
'kok'
),
(
'Konkani - India'
,
'kok-IN'
),
(
'Korean'
,
'ko'
),
(
'Korean - Korea'
,
'ko-KR'
),
(
'Korean - North Korea'
,
'ko-KP'
),
(
'Koyra Chiini'
,
'khq'
),
(
'Koyra Chiini - Mali'
,
'khq-ML'
),
(
'Koyraboro Senni'
,
'ses'
),
(
'Koyraboro Senni - Mali'
,
'ses-ML'
),
(
'Kwasio'
,
'nmg'
),
(
'Kwasio - Cameroon'
,
'nmg-CM'
),
(
'Kyrgyz'
,
'ky'
),
(
'Kyrgyz - Kyrgyzstan'
,
'ky-KG'
),
(
'Kurdish - Perso-Arabic, Iran'
,
'ku-Arab-IR'
),
(
'Lakota'
,
'lkt'
),
(
'Lakota - United States'
,
'lkt-US'
),
(
'Langi'
,
'lag'
),
(
'Langi - Tanzania'
,
'lag-TZ'
),
(
'Lao'
,
'lo'
),
(
'Lao - Lao P.D.R.'
,
'lo-LA'
),
(
'Latvian'
,
'lv'
),
(
'Latvian - Latvia'
,
'lv-LV'
),
(
'Lingala'
,
'ln'
),
(
'Lingala - Angola'
,
'ln-AO'
),
(
'Lingala - Central African Republic'
,
'ln-CF'
),
(
'Lingala - Congo'
,
'ln-CG'
),
(
'Lingala - Congo DRC'
,
'ln-CD'
),
(
'Lithuanian'
,
'lt'
),
(
'Lithuanian - Lithuania'
,
'lt-LT'
),
(
'Low German'
,
'nds'
),
(
'Low German - Germany'
,
'nds-DE'
),
(
'Low German - Netherlands'
,
'nds-NL'
),
(
'Lower Sorbian'
,
'dsb'
),
(
'Lower Sorbian - Germany'
,
'dsb-DE'
),
(
'Luba-Katanga'
,
'lu'
),
(
'Luba-Katanga - Congo DRC'
,
'lu-CD'
),
(
'Luo'
,
'luo'
),
(
'Luo - Kenya'
,
'luo-KE'
),
(
'Luxembourgish'
,
'lb'
),
(
'Luxembourgish - Luxembourg'
,
'lb-LU'
),
(
'Luyia'
,
'luy'
),
(
'Luyia - Kenya'
,
'luy-KE'
),
(
'Macedonian'
,
'mk'
),
(
'Macedonian - North Macedonia'
,
'mk-MK'
),
(
'Machame'
,
'jmc'
),
(
'Machame - Tanzania'
,
'jmc-TZ'
),
(
'Makhuwa-Meetto'
,
'mgh'
),
(
'Makhuwa-Meetto - Mozambique'
,
'mgh-MZ'
),
(
'Makonde'
,
'kde'
),
(
'Makonde - Tanzania'
,
'kde-TZ'
),
(
'Malagasy'
,
'mg'
),
(
'Malagasy - Madagascar'
,
'mg-MG'
),
(
'Malay'
,
'ms'
),
(
'Malay - Brunei Darussalam'
,
'ms-BN'
),
(
'Malay - Malaysia'
,
'ms-MY'
),
(
'Malayalam'
,
'ml'
),
(
'Malayalam - India'
,
'ml-IN'
),
(
'Maltese'
,
'mt'
),
(
'Maltese - Malta'
,
'mt-MT'
),
(
'Manx'
,
'gv'
),
(
'Manx - Isle of Man'
,
'gv-IM'
),
(
'Maori'
,
'mi'
),
(
'Maori - New Zealand'
,
'mi-NZ'
),
(
'Mapudungun'
,
'arn'
),
(
'Mapudungun - Chile'
,
'arn-CL'
),
(
'Marathi'
,
'mr'
),
(
'Marathi - India'
,
'mr-IN'
),
(
'Masai'
,
'mas'
),
(
'Masai - Kenya'
,
'mas-KE'
),
(
'Masai - Tanzania'
,
'mas-TZ'
),
(
'Mazanderani - Iran'
,
'mzn-IR'
),
(
'Meru'
,
'mer'
),
(
'Meru - Kenya'
,
'mer-KE'
),
(
"Meta'"
,
'mgo'
),
(
"Meta' - Cameroon"
,
'mgo-CM'
),
(
'Mohawk'
,
'moh'
),
(
'Mohawk - Canada'
,
'moh-CA'
),
(
'Mongolian (Cyrillic)'
,
'mn'
),
(
'Mongolian (Cyrillic), Cyrl'
,
'mn-Cyrl'
),
(
'Mongolian (Cyrillic) - Mongolia'
,
'mn-MN'
),
(
'Mongolian (Traditional Mongolian)'
,
'mn-Mong'
),
(
"Mongolian (Traditional Mongolian) - People's Republic of China"
,
'mn-Mong-CN'
),
(
'Mongolian (Traditional Mongolian) - Mongolia'
,
'mn-Mong-MN'
),
(
'Morisyen'
,
'mfe'
),
(
'Morisyen - Mauritius'
,
'mfe-MU'
),
(
'Mundang'
,
'mua'
),
(
'Mundang - Cameroon'
,
'mua-CM'
),
(
"N'ko"
,
'nqo'
),
(
"N'ko - Guinea"
,
'nqo-GN'
),
(
'Nama'
,
'naq'
),
(
'Nama - Namibia'
,
'naq-NA'
),
(
'Nepali'
,
'ne'
),
(
'Nepali - India'
,
'ne-IN'
),
(
'Nepali - Nepal'
,
'ne-NP'
),
(
'Ngiemboon'
,
'nnh'
),
(
'Ngiemboon - Cameroon'
,
'nnh-CM'
),
(
'Ngomba'
,
'jgo'
),
(
'Ngomba - Cameroon'
,
'jgo-CM'
),
(
'Northern Luri - Iraq'
,
'lrc-IQ'
),
(
'Northern Luri - Iran'
,
'lrc-IR'
),
(
'North Ndebele'
,
'nd'
),
(
'North Ndebele - Zimbabwe'
,
'nd-ZW'
),
(
'Norwegian (Bokmal)'
,
'no'
),
(
'Norwegian (Bokmal), nb'
,
'nb'
),
(
'Norwegian (Bokmal) - Norway'
,
'nb-NO'
),
(
'Norwegian (Nynorsk)'
,
'nn'
),
(
'Norwegian (Nynorsk) - Norway'
,
'nn-NO'
),
(
'Norwegian Bokmål - Svalbard and Jan Mayen'
,
'nb-SJ'
),
(
'Nuer'
,
'nus'
),
(
'Nuer - Sudan'
,
'nus-SD'
),
(
'Nuer - South Sudan'
,
'nus-SS'
),
(
'Nyankole'
,
'nyn'
),
(
'Nyankole - Uganda'
,
'nyn-UG'
),
(
'Occitan'
,
'oc'
),
(
'Occitan - France'
,
'oc-FR'
),
(
'Odia'
,
'or'
),
(
'Odia - India'
,
'or-IN'
),
(
'Oromo'
,
'om'
),
(
'Oromo - Ethiopia'
,
'om-ET'
),
(
'Oromo - Kenya'
,
'om-KE'
),
(
'Ossetian'
,
'os'
),
(
'Ossetian - Cyrillic, Georgia'
,
'os-GE'
),
(
'Ossetian - Cyrillic, Russia'
,
'os-RU'
),
(
'Pashto'
,
'ps'
),
(
'Pashto - Afghanistan'
,
'ps-AF'
),
(
'Pashto - Pakistan'
,
'ps-PK'
),
(
'Persian'
,
'fa'
),
(
'Persian - Afghanistan'
,
'fa-AF'
),
(
'Persian - Iran'
,
'fa-IR'
),
(
'Polish'
,
'pl'
),
(
'Polish - Poland'
,
'pl-PL'
),
(
'Portuguese'
,
'pt'
),
(
'Portuguese - Angola'
,
'pt-AO'
),
(
'Portuguese - Brazil'
,
'pt-BR'
),
(
'Portuguese - Cabo Verde'
,
'pt-CV'
),
(
'Portuguese - Equatorial Guinea'
,
'pt-GQ'
),
(
'Portuguese - Guinea-Bissau'
,
'pt-GW'
),
(
'Portuguese - Luxembourg'
,
'pt-LU'
),
(
'Portuguese - Macao SAR'
,
'pt-MO'
),
(
'Portuguese - Mozambique'
,
'pt-MZ'
),
(
'Portuguese - Portugal'
,
'pt-PT'
),
(
'Portuguese - São Tomé and Príncipe'
,
'pt-ST'
),
(
'Portuguese - Switzerland'
,
'pt-CH'
),
(
'Portuguese - Timor-Leste'
,
'pt-TL'
),
(
'Prussian'
,
'prg-001'
),
(
'Pseudo Language - Pseudo locale for east Asian/complex script localization testing'
,
'qps-ploca'
),
(
'Pseudo Language - Pseudo locale used for localization testing'
,
'qps-ploc'
),
(
'Pseudo Language - Pseudo locale used for localization testing of mirroredlocales'
,
'qps-plocm'
),
(
'Punjabi'
,
'pa'
),
(
'Punjabi, Arab'
,
'pa-Arab'
),
(
'Punjabi - India'
,
'pa-IN'
),
(
'Punjabi - Islamic Republic of Pakistan'
,
'pa-Arab-PK'
),
(
'Quechua'
,
'quz'
),
(
'Quechua - Bolivia'
,
'quz-BO'
),
(
'Quechua - Ecuador'
,
'quz-EC'
),
(
'Quechua - Peru'
,
'quz-PE'
),
(
'Ripuarian'
,
'ksh'
),
(
'Ripuarian - Germany'
,
'ksh-DE'
),
(
'Romanian'
,
'ro'
),
(
'Romanian - Moldova'
,
'ro-MD'
),
(
'Romanian - Romania'
,
'ro-RO'
),
(
'Romansh'
,
'rm'
),
(
'Romansh - Switzerland'
,
'rm-CH'
),
(
'Rombo'
,
'rof'
),
(
'Rombo - Tanzania'
,
'rof-TZ'
),
(
'Rundi'
,
'rn'
),
(
'Rundi - Burundi'
,
'rn-BI'
),
(
'Russian'
,
'ru'
),
(
'Russian - Belarus'
,
'ru-BY'
),
(
'Russian - Kazakhstan'
,
'ru-KZ'
),
(
'Russian - Kyrgyzstan'
,
'ru-KG'
),
(
'Russian - Moldova'
,
'ru-MD'
),
(
'Russian - Russia'
,
'ru-RU'
),
(
'Russian - Ukraine'
,
'ru-UA'
),
(
'Rwa'
,
'rwk'
),
(
'Rwa - Tanzania'
,
'rwk-TZ'
),
(
'Saho'
,
'ssy'
),
(
'Saho - Eritrea'
,
'ssy-ER'
),
(
'Sakha'
,
'sah'
),
(
'Sakha - Russia'
,
'sah-RU'
),
(
'Samburu'
,
'saq'
),
(
'Samburu - Kenya'
,
'saq-KE'
),
(
'Sami (Inari)'
,
'smn'
),
(
'Sami (Inari) - Finland'
,
'smn-FI'
),
(
'Sami (Lule)'
,
'smj'
),
(
'Sami (Lule) - Norway'
,
'smj-NO'
),
(
'Sami (Lule) - Sweden'
,
'smj-SE'
),
(
'Sami (Northern)'
,
'se'
),
(
'Sami (Northern) - Finland'
,
'se-FI'
),
(
'Sami (Northern) - Norway'
,
'se-NO'
),
(
'Sami (Northern) - Sweden'
,
'se-SE'
),
(
'Sami (Skolt)'
,
'sms'
),
(
'Sami (Skolt) - Finland'
,
'sms-FI'
),
(
'Sami (Southern)'
,
'sma'
),
(
'Sami (Southern) - Norway'
,
'sma-NO'
),
(
'Sami (Southern) - Sweden'
,
'sma-SE'
),
(
'Sango'
,
'sg'
),
(
'Sango - Central African Republic'
,
'sg-CF'
),
(
'Sangu'
,
'sbp'
),
(
'Sangu - Tanzania'
,
'sbp-TZ'
),
(
'Sanskrit'
,
'sa'
),
(
'Sanskrit - India'
,
'sa-IN'
),
(
'Scottish Gaelic'
,
'gd'
),
(
'Scottish Gaelic - United Kingdom'
,
'gd-GB'
),
(
'Sena'
,
'seh'
),
(
'Sena - Mozambique'
,
'seh-MZ'
),
(
'Serbian (Cyrillic)'
,
'sr-Cyrl'
),
(
'Serbian (Cyrillic) - Bosnia and Herzegovina'
,
'sr-Cyrl-BA'
),
(
'Serbian (Cyrillic) - Montenegro'
,
'sr-Cyrl-ME'
),
(
'Serbian (Cyrillic) - Serbia'
,
'sr-Cyrl-RS'
),
(
'Serbian (Cyrillic) - Serbia and Montenegro (Former)'
,
'sr-Cyrl-CS'
),
(
'Serbian (Latin)'
,
'sr'
),
(
'Serbian (Latin), Latn'
,
'sr-Latn'
),
(
'Serbian (Latin) - Bosnia and Herzegovina'
,
'sr-Latn-BA'
),
(
'Serbian (Latin) - Montenegro'
,
'sr-Latn-ME'
),
(
'Serbian (Latin) - Serbia'
,
'sr-Latn-RS'
),
(
'Serbian (Latin) - Serbia and Montenegro (Former)'
,
'sr-Latn-CS'
),
(
'Sesotho sa Leboa'
,
'nso'
),
(
'Sesotho sa Leboa - South Africa'
,
'nso-ZA'
),
(
'Setswana'
,
'tn'
),
(
'Setswana - Botswana'
,
'tn-BW'
),
(
'Setswana - South Africa'
,
'tn-ZA'
),
(
'Shambala'
,
'ksb'
),
(
'Shambala - Tanzania'
,
'ksb-TZ'
),
(
'Shona'
,
'sn'
),
(
'Shona - Latin'
,
'sn-Latn'
),
(
'Shona - Zimbabwe'
,
'sn-Latn-ZW'
),
(
'Sindhi'
,
'sd'
),
(
'Sindhi, Arab'
,
'sd-Arab'
),
(
'Sindhi - Islamic Republic of Pakistan'
,
'sd-Arab-PK'
),
(
'Sinhala'
,
'si'
),
(
'Sinhala - Sri Lanka'
,
'si-LK'
),
(
'Slovak'
,
'sk'
),
(
'Slovak - Slovakia'
,
'sk-SK'
),
(
'Slovenian'
,
'sl'
),
(
'Slovenian - Slovenia'
,
'sl-SI'
),
(
'Soga'
,
'xog'
),
(
'Soga - Uganda'
,
'xog-UG'
),
(
'Somali'
,
'so'
),
(
'Somali - Djibouti'
,
'so-DJ'
),
(
'Somali - Ethiopia'
,
'so-ET'
),
(
'Somali - Kenya'
,
'so-KE'
),
(
'Somali - Somalia'
,
'so-SO'
),
(
'Sotho'
,
'st'
),
(
'Sotho - South Africa'
,
'st-ZA'
),
(
'South Ndebele'
,
'nr'
),
(
'South Ndebele - South Africa'
,
'nr-ZA'
),
(
'Southern Sotho - Lesotho'
,
'st-LS'
),
(
'Spanish'
,
'es'
),
(
'Spanish - Argentina'
,
'es-AR'
),
(
'Spanish - Belize'
,
'es-BZ'
),
(
'Spanish - Bolivarian Republic of Venezuela'
,
'es-VE'
),
(
'Spanish - Bolivia'
,
'es-BO'
),
(
'Spanish - Brazil'
,
'es-BR'
),
(
'Spanish - Chile'
,
'es-CL'
),
(
'Spanish - Colombia'
,
'es-CO'
),
(
'Spanish - Costa Rica'
,
'es-CR'
),
(
'Spanish - Cuba'
,
'es-CU'
),
(
'Spanish - Dominican Republic'
,
'es-DO'
),
(
'Spanish - Ecuador'
,
'es-EC'
),
(
'Spanish - El Salvador'
,
'es-SV'
),
(
'Spanish - Equatorial Guinea'
,
'es-GQ'
),
(
'Spanish - Guatemala'
,
'es-GT'
),
(
'Spanish - Honduras'
,
'es-HN'
),
(
'Spanish - Latin America'
,
'es-419'
),
(
'Spanish - Mexico'
,
'es-MX'
),
(
'Spanish - Nicaragua'
,
'es-NI'
),
(
'Spanish - Panama'
,
'es-PA'
),
(
'Spanish - Paraguay'
,
'es-PY'
),
(
'Spanish - Peru'
,
'es-PE'
),
(
'Spanish - Philippines'
,
'es-PH'
),
(
'Spanish - Puerto Rico'
,
'es-PR'
),
(
'Spanish - Spain'
,
'es-ES'
),
(
'Spanish - Spain, ES_tradnl'
,
'es-ES_tradnl'
),
(
'Spanish - United - States'
,
'es-US'
),
(
'Spanish - Uruguay'
,
'es-UY'
),
(
'Standard Moroccan Tamazight'
,
'zgh'
),
(
'Standard Moroccan Tamazight - Morocco'
,
'zgh-Tfng-MA'
),
(
'Standard Moroccan Tamazight - Tifinagh'
,
'zgh-Tfng'
),
(
'Swati'
,
'ss'
),
(
'Swati - South Africa'
,
'ss-ZA'
),
(
'Swati - Swaziland'
,
'ss-SZ'
),
(
'Swedish'
,
'sv'
),
(
'Swedish - Åland Islands'
,
'sv-AX'
),
(
'Swedish - Finland'
,
'sv-FI'
),
(
'Swedish - Sweden'
,
'sv-SE'
),
(
'Syriac'
,
'syr'
),
(
'Syriac - Syria'
,
'syr-SY'
),
(
'Tachelhit'
,
'shi'
),
(
'Tachelhit - Tifinagh'
,
'shi-Tfng'
),
(
'Tachelhit - Tifinagh, Morocco'
,
'shi-Tfng-MA'
),
(
'Tachelhit (Latin)'
,
'shi-Latn'
),
(
'Tachelhit (Latin) - Morocco'
,
'shi-Latn-MA'
),
(
'Taita'
,
'dav'
),
(
'Taita - Kenya'
,
'dav-KE'
),
(
'Tajik (Cyrillic)'
,
'tg'
),
(
'Tajik (Cyrillic), Cyrl'
,
'tg-Cyrl'
),
(
'Tajik (Cyrillic) - Tajikistan'
,
'tg-Cyrl-TJ'
),
(
'Tamazight (Latin)'
,
'tzm'
),
(
'Tamazight (Latin), Latn'
,
'tzm-Latn'
),
(
'Tamazight (Latin) - Algeria'
,
'tzm-Latn-DZ'
),
(
'Tamil'
,
'ta'
),
(
'Tamil - India'
,
'ta-IN'
),
(
'Tamil - Malaysia'
,
'ta-MY'
),
(
'Tamil - Singapore'
,
'ta-SG'
),
(
'Tamil - Sri Lanka'
,
'ta-LK'
),
(
'Tasawaq'
,
'twq'
),
(
'Tasawaq - Niger'
,
'twq-NE'
),
(
'Tatar'
,
'tt'
),
(
'Tatar - Russia'
,
'tt-RU'
),
(
'Telugu'
,
'te'
),
(
'Telugu - India'
,
'te-IN'
),
(
'Teso'
,
'teo'
),
(
'Teso - Kenya'
,
'teo-KE'
),
(
'Teso - Uganda'
,
'teo-UG'
),
(
'Thai'
,
'th'
),
(
'Thai - Thailand'
,
'th-TH'
),
(
'Tibetan'
,
'bo'
),
(
'Tibetan - India'
,
'bo-IN'
),
(
"Tibetan - People's Republic of China"
,
'bo-CN'
),
(
'Tigre'
,
'tig'
),
(
'Tigre - Eritrea'
,
'tig-ER'
),
(
'Tigrinya'
,
'ti'
),
(
'Tigrinya - Eritrea'
,
'ti-ER'
),
(
'Tigrinya - Ethiopia'
,
'ti-ET'
),
(
'Tongan'
,
'to'
),
(
'Tongan - Tonga'
,
'to-TO'
),
(
'Tsonga'
,
'ts'
),
(
'Tsonga - South Africa'
,
'ts-ZA'
),
(
'Turkish'
,
'tr'
),
(
'Turkish - Cyprus'
,
'tr-CY'
),
(
'Turkish - Turkey'
,
'tr-TR'
),
(
'Turkmen'
,
'tk'
),
(
'Turkmen - Turkmenistan'
,
'tk-TM'
),
(
'Ukrainian'
,
'uk'
),
(
'Ukrainian - Ukraine'
,
'uk-UA'
),
(
'Upper Sorbian'
,
'hsb'
),
(
'Upper Sorbian - Germany'
,
'hsb-DE'
),
(
'Urdu'
,
'ur'
),
(
'Urdu - India'
,
'ur-IN'
),
(
'Urdu - Islamic Republic of Pakistan'
,
'ur-PK'
),
(
'Uyghur'
,
'ug'
),
(
"Uyghur - People's Republic of China"
,
'ug-CN'
),
(
'Uzbek - Perso-Arabic'
,
'uz-Arab'
),
(
'Uzbek - Perso-Arabic, Afghanistan'
,
'uz-Arab-AF'
),
(
'Uzbek (Cyrillic)'
,
'uz-Cyrl'
),
(
'Uzbek (Cyrillic) - Uzbekistan'
,
'uz-Cyrl-UZ'
),
(
'Uzbek (Latin)'
,
'uz'
),
(
'Uzbek (Latin), Latn'
,
'uz-Latn'
),
(
'Uzbek (Latin) - Uzbekistan'
,
'uz-Latn-UZ'
),
(
'Vai'
,
'vai'
),
(
'Vai, Vaii'
,
'vai-Vaii'
),
(
'Vai - Liberia'
,
'vai-Vaii-LR'
),
(
'Vai (Latin) - Liberia'
,
'vai-Latn-LR'
),
(
'Vai (Latin)'
,
'vai-Latn'
),
(
'Valencian - Spain'
,
'ca-ES-valencia'
),
(
'Venda'
,
've'
),
(
'Venda - South Africa'
,
've-ZA'
),
(
'Vietnamese'
,
'vi'
),
(
'Vietnamese - Vietnam'
,
'vi-VN'
),
(
'Volapük'
,
'vo'
),
(
'Volapük - World'
,
'vo-001'
),
(
'Vunjo'
,
'vun'
),
(
'Vunjo - Tanzania'
,
'vun-TZ'
),
(
'Walser'
,
'wae'
),
(
'Walser - Switzerland'
,
'wae-CH'
),
(
'Welsh'
,
'cy'
),
(
'Welsh - United Kingdom'
,
'cy-GB'
),
(
'Wolaytta'
,
'wal'
),
(
'Wolaytta - Ethiopia'
,
'wal-ET'
),
(
'Wolof'
,
'wo'
),
(
'Wolof - Senegal'
,
'wo-SN'
),
(
'Xhosa'
,
'xh'
),
(
'Xhosa - South Africa'
,
'xh-ZA'
),
(
'Yangben'
,
'yav'
),
(
'Yangben - Cameroon'
,
'yav-CM'
),
(
'Yi'
,
'ii'
),
(
"Yi - People's Republic of China"
,
'ii-CN'
),
(
'Yoruba'
,
'yo'
),
(
'Yoruba - Benin'
,
'yo-BJ'
),
(
'Yoruba - Nigeria'
,
'yo-NG'
),
(
'Zarma'
,
'dje'
),
(
'Zarma - Niger'
,
'dje-NE'
),
(
'Zulu'
,
'zu'
),
(
'Zulu - South Africa'
,
'zu-ZA'
)],
default
=
'en'
,
help_text
=
'Required if type is "Subtitle"'
,
max_length
=
50
,
unique
=
True
)),
(
'video'
,
models
.
ForeignKey
(
on_delete
=
django
.
db
.
models
.
deletion
.
CASCADE
,
related_name
=
'tracks'
,
to
=
'app.CustomVideoModel'
)),
],
options
=
{
'abstract'
:
False
,
},
),
]
tests/app/models.py
View file @
26d0a91b
...
@@ -5,7 +5,7 @@ from wagtail.admin.edit_handlers import StreamFieldPanel
...
@@ -5,7 +5,7 @@ from wagtail.admin.edit_handlers import StreamFieldPanel
from
wagtailvideos.edit_handlers
import
VideoChooserPanel
from
wagtailvideos.edit_handlers
import
VideoChooserPanel
from
wagtailvideos.blocks
import
VideoChooserBlock
from
wagtailvideos.blocks
import
VideoChooserBlock
from
wagtailvideos.models
import
AbstractVideo
,
AbstractVideoTranscode
from
wagtailvideos.models
import
AbstractVideo
,
AbstractVideoTranscode
,
AbstractTrack
class
CustomVideoModel
(
AbstractVideo
):
class
CustomVideoModel
(
AbstractVideo
):
...
@@ -30,6 +30,9 @@ class CustomVideoTranscode(AbstractVideoTranscode):
...
@@ -30,6 +30,9 @@ class CustomVideoTranscode(AbstractVideoTranscode):
)
)
class
CustomTrack
(
AbstractTrack
):
video
=
models
.
ForeignKey
(
CustomVideoModel
,
related_name
=
'tracks'
,
on_delete
=
models
.
CASCADE
)
class
TestPage
(
Page
):
class
TestPage
(
Page
):
video_field
=
models
.
ForeignKey
(
video_field
=
models
.
ForeignKey
(
'wagtailvideos.Video'
,
related_name
=
'+'
,
null
=
True
,
blank
=
True
,
on_delete
=
models
.
SET_NULL
)
'wagtailvideos.Video'
,
related_name
=
'+'
,
null
=
True
,
blank
=
True
,
on_delete
=
models
.
SET_NULL
)
...
...
wagtailvideos/apps.py
View file @
26d0a91b
...
@@ -23,4 +23,6 @@ class WagtailVideosApp(AppConfig):
...
@@ -23,4 +23,6 @@ class WagtailVideosApp(AppConfig):
verbose_name
=
'Wagtail Videos'
verbose_name
=
'Wagtail Videos'
def
ready
(
self
):
def
ready
(
self
):
from
wagtailvideos.signals
import
register_signal_handlers
register_signal_handlers
()
register
(
ffmpeg_check
)
register
(
ffmpeg_check
)
wagtailvideos/migrations/0011_track.py
0 → 100644
View file @
26d0a91b
# Generated by Django 2.2.17 on 2021-01-28 03:08
from
django.db
import
migrations
,
models
import
django.db.models.deletion
import
wagtailvideos.models
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'wagtailvideos'
,
'0010_video_ordering'
),
]
operations
=
[
migrations
.
CreateModel
(
name
=
'Track'
,
fields
=
[
(
'id'
,
models
.
AutoField
(
auto_created
=
True
,
primary_key
=
True
,
serialize
=
False
,
verbose_name
=
'ID'
)),
(
'file'
,
models
.
FileField
(
upload_to
=
wagtailvideos
.
models
.
get_upload_to
,
verbose_name
=
'file'
)),
(
'kind'
,
models
.
CharField
(
choices
=
[(
'subtitles'
,
'Subtitles'
),
(
'captions'
,
'Captions'
),
(
'descriptions'
,
'Descriptions'
),
(
'chapters'
,
'Chapters'
),
(
'metadata'
,
'Metadata'
)],
default
=
'subtitles'
,
max_length
=
50
)),
(
'label'
,
models
.
CharField
(
blank
=
True
,
help_text
=
'A user-readable title of the text track.'
,
max_length
=
255
)),
(
'language'
,
models
.
CharField
(
blank
=
True
,
choices
=
[(
'Afar'
,
'aa'
),
(
'Afar - Djibouti'
,
'aa-DJ'
),
(
'Afar - Eritrea'
,
'aa-ER'
),
(
'Afar - Ethiopia'
,
'aa-ET'
),
(
'Afrikaans'
,
'af'
),
(
'Afrikaans - Namibia'
,
'af-NA'
),
(
'Afrikaans - South Africa'
,
'af-ZA'
),
(
'Aghem'
,
'agq'
),
(
'Aghem - Cameroon'
,
'agq-CM'
),
(
'Akan'
,
'ak'
),
(
'Akan - Ghana'
,
'ak-GH'
),
(
'Albanian'
,
'sq'
),
(
'Albanian - Albania'
,
'sq-AL'
),
(
'Albanian - North Macedonia'
,
'sq-MK'
),
(
'Alsatian'
,
'gsw'
),
(
'Alsatian - France'
,
'gsw-FR'
),
(
'Alsatian - Liechtenstein'
,
'gsw-LI'
),
(
'Alsatian - Switzerland'
,
'gsw-CH'
),
(
'Amharic'
,
'am'
),
(
'Amharic - Ethiopia'
,
'am-ET'
),
(
'Arabic'
,
'ar'
),
(
'Arabic - Algeria'
,
'ar-DZ'
),
(
'Arabic - Bahrain'
,
'ar-BH'
),
(
'Arabic - Chad'
,
'ar-TD'
),
(
'Arabic - Comoros'
,
'ar-KM'
),
(
'Arabic - Djibouti'
,
'ar-DJ'
),
(
'Arabic - Egypt'
,
'ar-EG'
),
(
'Arabic - Eritrea'
,
'ar-ER'
),
(
'Arabic - Iraq'
,
'ar-IQ'
),
(
'Arabic - Israel'
,
'ar-IL'
),
(
'Arabic - Jordan'
,
'ar-JO'
),
(
'Arabic - Kuwait'
,
'ar-KW'
),
(
'Arabic - Lebanon'
,
'ar-LB'
),
(
'Arabic - Libya'
,
'ar-LY'
),
(
'Arabic - Mauritania'
,
'ar-MR'
),
(
'Arabic - Morocco'
,
'ar-MA'
),
(
'Arabic - Oman'
,
'ar-OM'
),
(
'Arabic - Palestinian Authority'
,
'ar-PS'
),
(
'Arabic - Qatar'
,
'ar-QA'
),
(
'Arabic - Saudi Arabia'
,
'ar-SA'
),
(
'Arabic - Somalia'
,
'ar-SO'
),
(
'Arabic - South Sudan'
,
'ar-SS'
),
(
'Arabic - Sudan'
,
'ar-SD'
),
(
'Arabic - Syria'
,
'ar-SY'
),
(
'Arabic - Tunisia'
,
'ar-TN'
),
(
'Arabic - U.A.E.'
,
'ar-AE'
),
(
'Arabic - World'
,
'ar-001'
),
(
'Arabic - Yemen'
,
'ar-YE'
),
(
'Armenian'
,
'hy'
),
(
'Armenian - Armenia'
,
'hy-AM'
),
(
'Assamese'
,
'as'
),
(
'Assamese - India'
,
'as-IN'
),
(
'Asturian'
,
'ast'
),
(
'Asturian - Spain'
,
'ast-ES'
),
(
'Asu'
,
'asa'
),
(
'Asu - Tanzania'
,
'asa-TZ'
),
(
'Azerbaijani (Cyrillic)'
,
'az-Cyrl'
),
(
'Azerbaijani (Cyrillic) - Azerbaijan'
,
'az-Cyrl-AZ'
),
(
'Azerbaijani (Latin)'
,
'az'
),
(
'Azerbaijani (Latin), Latn'
,
'az-Latn'
),
(
'Azerbaijani (Latin) - Azerbaijan'
,
'az-Latn-AZ'
),
(
'Bafia'
,
'ksf'
),
(
'Bafia - Cameroon'
,
'ksf-CM'
),
(
'Bamanankan'
,
'bm'
),
(
'Bamanankan (Latin) - Mali'
,
'bm-Latn-ML'
),
(
'Bangla'
,
'bn'
),
(
'Bangla - Bangladesh'
,
'bn-BD'
),
(
'Bangla - India'
,
'bn-IN'
),
(
'Basaa'
,
'bas'
),
(
'Basaa - Cameroon'
,
'bas-CM'
),
(
'Bashkir'
,
'ba'
),
(
'Bashkir - Russia'
,
'ba-RU'
),
(
'Basque'
,
'eu'
),
(
'Basque - Spain'
,
'eu-ES'
),
(
'Belarusian'
,
'be'
),
(
'Belarusian - Belarus'
,
'be-BY'
),
(
'Bemba'
,
'bem'
),
(
'Bemba - Zambia'
,
'bem-ZM'
),
(
'Bena'
,
'bez'
),
(
'Bena - Tanzania'
,
'bez-TZ'
),
(
'Blin'
,
'byn'
),
(
'Blin - Eritrea'
,
'byn-ER'
),
(
'Bodo'
,
'brx'
),
(
'Bodo - India'
,
'brx-IN'
),
(
'Bosnian (Cyrillic)'
,
'bs-Cyrl'
),
(
'Bosnian (Cyrillic) - Bosnia and Herzegovina'
,
'bs-Cyrl-BA'
),
(
'Bosnian (Latin)'
,
'bs'
),
(
'Bosnian (Latin), Latn'
,
'bs-Latn'
),
(
'Bosnian (Latin) - Bosnia and Herzegovina'
,
'bs-Latn-BA'
),
(
'Breton'
,
'br'
),
(
'Breton - France'
,
'br-FR'
),
(
'Bulgarian'
,
'bg'
),
(
'Bulgarian - Bulgaria'
,
'bg-BG'
),
(
'Burmese'
,
'my'
),
(
'Burmese - Myanmar'
,
'my-MM'
),
(
'Catalan'
,
'ca'
),
(
'Catalan - Andorra'
,
'ca-AD'
),
(
'Catalan - France'
,
'ca-FR'
),
(
'Catalan - Italy'
,
'ca-IT'
),
(
'Catalan - Spain'
,
'ca-ES'
),
(
'Cebuano'
,
'ceb'
),
(
'Cebuan (Latin)'
,
'ceb-Latn'
),
(
'Cebuan (Latin) - Philippines'
,
'ceb-Latn-PH'
),
(
'Central Atlas Tamazight (Latin) - Morocco'
,
'tzm-Latn-MA'
),
(
'Central Kurdish'
,
'ku'
),
(
'Central Kurdish, Arab'
,
'ku-Arab'
),
(
'Central Kurdish - Iraq'
,
'ku-Arab-IQ'
),
(
'Chakma'
,
'ccp'
),
(
'Chakma - Chakma'
,
'ccp-Cakm'
),
(
'Chakma - Bangladesh'
,
'ccp-Cakm-BD'
),
(
'Chakma - India'
,
'ccp-Cakm-IN'
),
(
'Chechen - Russia'
,
'cd-RU'
),
(
'Cherokee'
,
'chr'
),
(
'Cherokee, Cher'
,
'chr-Cher'
),
(
'Cherokee - United States'
,
'chr-Cher-US'
),
(
'Chiga'
,
'cgg'
),
(
'Chiga - Uganda'
,
'cgg-UG'
),
(
'Chinese (Simplified)'
,
'zh'
),
(
'Chinese (Simplified), Hans'
,
'zh-Hans'
),
(
"Chinese (Simplified) - People's Republic of China"
,
'zh-CN'
),
(
'Chinese (Simplified) - Singapore'
,
'zh-SG'
),
(
'Chinese (Traditional)'
,
'zh-Hant'
),
(
'Chinese (Traditional) - Hong Kong S.A.R.'
,
'zh-HK'
),
(
'Chinese (Traditional) - Macao S.A.R.'
,
'zh-MO'
),
(
'Chinese (Traditional) - Taiwan'
,
'zh-TW'
),
(
'Church Slavic - Russia'
,
'cu-RU'
),
(
'Congo Swahili'
,
'swc'
),
(
'Congo Swahili - Congo DRC'
,
'swc-CD'
),
(
'Cornish'
,
'kw'
),
(
'Cornish - United Kingdom'
,
'kw-GB'
),
(
'Corsican'
,
'co'
),
(
'Corsican - France'
,
'co-FR'
),
(
'Croatian'
,
'hr,'
),
(
'Croatian - Croatia'
,
'hr-HR'
),
(
'Croatian (Latin) - Bosnia and Herzegovina'
,
'hr-BA'
),
(
'Czech'
,
'cs'
),
(
'Czech - Czech Republic'
,
'cs-CZ'
),
(
'Danish'
,
'da'
),
(
'Danish - Denmark'
,
'da-DK'
),
(
'Danish - Greenland'
,
'da-GL'
),
(
'Dari'
,
'prs'
),
(
'Dari - Afghanistan'
,
'prs-AF'
),
(
'Divehi'
,
'dv'
),
(
'Divehi - Maldives'
,
'dv-MV'
),
(
'Duala'
,
'dua'
),
(
'Duala - Cameroon'
,
'dua-CM'
),
(
'Dutch'
,
'nl'
),
(
'Dutch - Aruba'
,
'nl-AW'
),
(
'Dutch - Belgium'
,
'nl-BE'
),
(
'Dutch - Bonaire, Sint Eustatius and Saba'
,
'nl-BQ'
),
(
'Dutch - Curaçao'
,
'nl-CW'
),
(
'Dutch - Netherlands'
,
'nl-NL'
),
(
'Dutch - Sint Maarten'
,
'nl-SX'
),
(
'Dutch - Suriname'
,
'nl-SR'
),
(
'Dzongkha'
,
'dz'
),
(
'Dzongkha - Bhutan'
,
'dz-BT'
),
(
'Embu'
,
'ebu'
),
(
'Embu - Kenya'
,
'ebu-KE'
),
(
'English'
,
'en'
),
(
'English - American Samoa'
,
'en-AS'
),
(
'English - Anguilla'
,
'en-AI'
),
(
'English - Antigua and Barbuda'
,
'en-AG'
),
(
'English - Australia'
,
'en-AU'
),
(
'English - Austria'
,
'en-AT'
),
(
'English - Bahamas'
,
'en-BS'
),
(
'English - Barbados'
,
'en-BB'
),
(
'English - Belgium'
,
'en-BE'
),
(
'English - Belize'
,
'en-BZ'
),
(
'English - Bermuda'
,
'en-BM'
),
(
'English - Botswana'
,
'en-BW'
),
(
'English - British Indian Ocean Territory'
,
'en-IO'
),
(
'English - British Virgin Islands'
,
'en-VG'
),
(
'English - Burundi'
,
'en-BI'
),
(
'English - Cameroon'
,
'en-CM'
),
(
'English - Canada'
,
'en-CA'
),
(
'English - Caribbean'
,
'en-029'
),
(
'English - Cayman Islands'
,
'en-KY'
),
(
'English - Christmas Island'
,
'en-CX'
),
(
'English - Cocos [Keeling] Islands'
,
'en-CC'
),
(
'English - Cook Islands'
,
'en-CK'
),
(
'English - Cyprus'
,
'en-CY'
),
(
'English - Denmark'
,
'en-DK'
),
(
'English - Dominica'
,
'en-DM'
),
(
'English - Eritrea'
,
'en-ER'
),
(
'English - Europe'
,
'en-150'
),
(
'English - Falkland Islands'
,
'en-FK'
),
(
'English - Finland'
,
'en-FI'
),
(
'English - Fiji'
,
'en-FJ'
),
(
'English - Gambia'
,
'en-GM'
),
(
'English - Germany'
,
'en-DE'
),
(
'English - Ghana'
,
'en-GH'
),
(
'English - Gibraltar'
,
'en-GI'
),
(
'English - Grenada'
,
'en-GD'
),
(
'English - Guam'
,
'en-GU'
),
(
'English - Guernsey'
,
'en-GG'
),
(
'English - Guyana'
,
'en-GY'
),
(
'English - Hong Kong'
,
'en-HK'
),
(
'English - India'
,
'en-IN'
),
(
'English - Ireland'
,
'en-IE'
),
(
'English - Isle of Man'
,
'en-IM'
),
(
'English - Israel'
,
'en-IL'
),
(
'English - Jamaica'
,
'en-JM'
),
(
'English - Jersey'
,
'en-JE'
),
(
'English - Kenya'
,
'en-KE'
),
(
'English - Kiribati'
,
'en-KI'
),
(
'English - Lesotho'
,
'en-LS'
),
(
'English - Liberia'
,
'en-LR'
),
(
'English - Macao SAR'
,
'en-MO'
),
(
'English - Madagascar'
,
'en-MG'
),
(
'English - Malawi'
,
'en-MW'
),
(
'English - Malaysia'
,
'en-MY'
),
(
'English - Malta'
,
'en-MT'
),
(
'English - Marshall Islands'
,
'en-MH'
),
(
'English - Mauritius'
,
'en-MU'
),
(
'English - Micronesia'
,
'en-FM'
),
(
'English - Montserrat'
,
'en-MS'
),
(
'English - Namibia'
,
'en-NA'
),
(
'English - Nauru'
,
'en-NR'
),
(
'English - Netherlands'
,
'en-NL'
),
(
'English - New Zealand'
,
'en-NZ'
),
(
'English - Nigeria'
,
'en-NG'
),
(
'English - Niue'
,
'en-NU'
),
(
'English - Norfolk Island'
,
'en-NF'
),
(
'English - Northern Mariana Islands'
,
'en-MP'
),
(
'English - Pakistan'
,
'en-PK'
),
(
'English - Palau'
,
'en-PW'
),
(
'English - Papua New Guinea'
,
'en-PG'
),
(
'English - Pitcairn Islands'
,
'en-PN'
),
(
'English - Puerto Rico'
,
'en-PR'
),
(
'English - Republic of the Philippines'
,
'en-PH'
),
(
'English - Rwanda'
,
'en-RW'
),
(
'English - Saint Kitts and Nevis'
,
'en-KN'
),
(
'English - Saint Lucia'
,
'en-LC'
),
(
'English - Saint Vincent and the Grenadines'
,
'en-VC'
),
(
'English - Samoa'
,
'en-WS'
),
(
'English - Seychelles'
,
'en-SC'
),
(
'English - Sierra Leone'
,
'en-SL'
),
(
'English - Singapore'
,
'en-SG'
),
(
'English - Sint Maarten'
,
'en-SX'
),
(
'English - Slovenia'
,
'en-SI'
),
(
'English - Solomon Islands'
,
'en-SB'
),
(
'English - South Africa'
,
'en-ZA'
),
(
'English - South Sudan'
,
'en-SS'
),
(
'English - St Helena, Ascension, Tristan da Cunha'
,
'en-SH'
),
(
'English - Sudan'
,
'en-SD'
),
(
'English - Swaziland'
,
'en-SZ'
),
(
'English - Sweden'
,
'en-SE'
),
(
'English - Switzerland'
,
'en-CH'
),
(
'English - Tanzania'
,
'en-TZ'
),
(
'English - Tokelau'
,
'en-TK'
),
(
'English - Tonga'
,
'en-TO'
),
(
'English - Trinidad and Tobago'
,
'en-TT'
),
(
'English - Turks and Caicos Islands'
,
'en-TC'
),
(
'English - Tuvalu'
,
'en-TV'
),
(
'English - Uganda'
,
'en-UG'
),
(
'English - United Arab Emirates'
,
'en-AE'
),
(
'English - United Kingdom'
,
'en-GB'
),
(
'English - United States'
,
'en-US'
),
(
'English - US Minor Outlying Islands'
,
'en-UM'
),
(
'English - US Virgin Islands'
,
'en-VI'
),
(
'English - Vanuatu'
,
'en-VU'
),
(
'English - World'
,
'en-001'
),
(
'English - Zambia'
,
'en-ZM'
),
(
'English - Zimbabwe'
,
'en-ZW'
),
(
'Esperanto'
,
'eo'
),
(
'Esperanto - World'
,
'eo-001'
),
(
'Estonian'
,
'et'
),
(
'Estonian - Estonia'
,
'et-EE'
),
(
'Ewe'
,
'ee'
),
(
'Ewe - Ghana'
,
'ee-GH'
),
(
'Ewe - Togo'
,
'ee-TG'
),
(
'Ewondo'
,
'ewo'
),
(
'Ewondo - Cameroon'
,
'ewo-CM'
),
(
'Faroese'
,
'fo'
),
(
'Faroese - Denmark'
,
'fo-DK'
),
(
'Faroese - Faroe Islands'
,
'fo-FO'
),
(
'Filipino'
,
'fil'
),
(
'Filipino - Philippines'
,
'fil-PH'
),
(
'Finnish'
,
'fi'
),
(
'Finnish - Finland'
,
'fi-FI'
),
(
'French'
,
'fr'
),
(
'French - Algeria'
,
'fr-DZ'
),
(
'French - Belgium'
,
'fr-BE'
),
(
'French - Benin'
,
'fr-BJ'
),
(
'French - Burkina Faso'
,
'fr-BF'
),
(
'French - Burundi'
,
'fr-BI'
),
(
'French - Cameroon'
,
'fr-CM'
),
(
'French - Canada'
,
'fr-CA'
),
(
'French - Central African Republic'
,
'fr-CF'
),
(
'French - Chad'
,
'fr-TD'
),
(
'French - Comoros'
,
'fr-KM'
),
(
'French - Congo'
,
'fr-CG'
),
(
'French - Congo, DRC'
,
'fr-CD'
),
(
"French - Côte d'Ivoire"
,
'fr-CI'
),
(
'French - Djibouti'
,
'fr-DJ'
),
(
'French - Equatorial Guinea'
,
'fr-GQ'
),
(
'French - France'
,
'fr-FR'
),
(
'French - French Guiana'
,
'fr-GF'
),
(
'French - French Polynesia'
,
'fr-PF'
),
(
'French - Gabon'
,
'fr-GA'
),
(
'French - Guadeloupe'
,
'fr-GP'
),
(
'French - Guinea'
,
'fr-GN'
),
(
'French - Haiti'
,
'fr-HT'
),
(
'French - Luxembourg'
,
'fr-LU'
),
(
'French - Madagascar'
,
'fr-MG'
),
(
'French - Mali'
,
'fr-ML'
),
(
'French - Martinique'
,
'fr-MQ'
),
(
'French - Mauritania'
,
'fr-MR'
),
(
'French - Mauritius'
,
'fr-MU'
),
(
'French - Mayotte'
,
'fr-YT'
),
(
'French - Morocco'
,
'fr-MA'
),
(
'French - New Caledonia'
,
'fr-NC'
),
(
'French - Niger'
,
'fr-NE'
),
(
'French - Principality of Monaco'
,
'fr-MC'
),
(
'French - Reunion'
,
'fr-RE'
),
(
'French - Rwanda'
,
'fr-RW'
),
(
'French - Saint Barthélemy'
,
'fr-BL'
),
(
'French - Saint Martin'
,
'fr-MF'
),
(
'French - Saint Pierre and Miquelon'
,
'fr-PM'
),
(
'French - Senegal'
,
'fr-SN'
),
(
'French - Seychelles'
,
'fr-SC'
),
(
'French - Switzerland'
,
'fr-CH'
),
(
'French - Syria'
,
'fr-SY'
),
(
'French - Togo'
,
'fr-TG'
),
(
'French - Tunisia'
,
'fr-TN'
),
(
'French - Vanuatu'
,
'fr-VU'
),
(
'French - Wallis and Futuna'
,
'fr-WF'
),
(
'Frisian'
,
'fy'
),
(
'Frisian - Netherlands'
,
'fy-NL'
),
(
'Friulian'
,
'fur'
),
(
'Friulian - Italy'
,
'fur-IT'
),
(
'Fulah'
,
'ff'
),
(
'Fulah (Latin)'
,
'ff-Latn'
),
(
'Fulah (Latin) - Burkina Faso'
,
'ff-Latn-BF'
),
(
'Fulah - Cameroon'
,
'ff-CM'
),
(
'Fulah (Latin) - Cameroon'
,
'ff-Latn-CM'
),
(
'Fulah (Latin) - Gambia'
,
'ff-Latn-GM'
),
(
'Fulah (Latin) - Ghana'
,
'ff-Latn-GH'
),
(
'Fulah - Guinea'
,
'ff-GN'
),
(
'Fulah (Latin) - Guinea'
,
'ff-Latn-GN'
),
(
'Fulah (Latin) - Guinea-Bissau'
,
'ff-Latn-GW'
),
(
'Fulah (Latin) - Liberia'
,
'ff-Latn-LR'
),
(
'Fulah - Mauritania'
,
'ff-MR'
),
(
'Fulah (Latin) - Mauritania'
,
'ff-Latn-MR'
),
(
'Fulah (Latin) - Niger'
,
'ff-Latn-NE'
),
(
'Fulah - Nigeria'
,
'ff-NG'
),
(
'Fulah (Latin) - Nigeria'
,
'ff-Latn-NG'
),
(
'Fulah - Senegal'
,
'ff-Latn-SN'
),
(
'Fulah (Latin) - Sierra Leone'
,
'ff-Latn-SL'
),
(
'Galician'
,
'gl'
),
(
'Galician - Spain'
,
'gl-ES'
),
(
'Ganda'
,
'lg'
),
(
'Ganda - Uganda'
,
'lg-UG'
),
(
'Georgian'
,
'ka'
),
(
'Georgian - Georgia'
,
'ka-GE'
),
(
'German'
,
'de'
),
(
'German - Austria'
,
'de-AT'
),
(
'German - Belgium'
,
'de-BE'
),
(
'German - Germany'
,
'de-DE'
),
(
'German - Italy'
,
'de-IT'
),
(
'German - Liechtenstein'
,
'de-LI'
),
(
'German - Luxembourg'
,
'de-LU'
),
(
'German - Switzerland'
,
'de-CH'
),
(
'Greek'
,
'el'
),
(
'Greek - Cyprus'
,
'el-CY'
),
(
'Greek - Greece'
,
'el-GR'
),
(
'Greenlandic'
,
'kl'
),
(
'Greenlandic - Greenland'
,
'kl-GL'
),
(
'Guarani'
,
'gn'
),
(
'Guarani - Paraguay'
,
'gn-PY'
),
(
'Gujarati'
,
'gu'
),
(
'Gujarati - India'
,
'gu-IN'
),
(
'Gusii'
,
'guz'
),
(
'Gusii - Kenya'
,
'guz-KE'
),
(
'Hausa (Latin)'
,
'ha'
),
(
'Hausa (Latin), Latn'
,
'ha-Latn'
),
(
'Hausa (Latin) - Ghana'
,
'ha-Latn-GH'
),
(
'Hausa (Latin) - Niger'
,
'ha-Latn-NE'
),
(
'Hausa (Latin) - Nigeria'
,
'ha-Latn-NG'
),
(
'Hawaiian'
,
'haw'
),
(
'Hawaiian - United States'
,
'haw-US'
),
(
'Hebrew'
,
'he'
),
(
'Hebrew - Israel'
,
'he-IL'
),
(
'Hindi'
,
'hi'
),
(
'Hindi - India'
,
'hi-IN'
),
(
'Hungarian'
,
'hu'
),
(
'Hungarian - Hungary'
,
'hu-HU'
),
(
'Icelandic'
,
'is'
),
(
'Icelandic - Iceland'
,
'is-IS'
),
(
'Igbo'
,
'ig'
),
(
'Igbo - Nigeria'
,
'ig-NG'
),
(
'Indonesian'
,
'id'
),
(
'Indonesian - Indonesia'
,
'id-ID'
),
(
'Interlingua'
,
'ia'
),
(
'Interlingua - France'
,
'ia-FR'
),
(
'Interlingua - World'
,
'ia-001'
),
(
'Inuktitut (Latin)'
,
'iu'
),
(
'Inuktitut (Latin), Latn'
,
'iu-Latn'
),
(
'Inuktitut (Latin) - Canada'
,
'iu-Latn-CA'
),
(
'Inuktitut (Syllabics)'
,
'iu-Cans'
),
(
'Inuktitut (Syllabics) - Canada'
,
'iu-Cans-CA'
),
(
'Irish'
,
'ga'
),
(
'Irish - Ireland'
,
'ga-IE'
),
(
'Italian'
,
'it'
),
(
'Italian - Italy'
,
'it-IT'
),
(
'Italian - San Marino'
,
'it-SM'
),
(
'Italian - Switzerland'
,
'it-CH'
),
(
'Italian - Vatican City'
,
'it-VA'
),
(
'Japanese'
,
'ja'
),
(
'Japanese - Japan'
,
'ja-JP'
),
(
'Javanese'
,
'jv'
),
(
'Javanese - Latin'
,
'jv-Latn'
),
(
'Javanese - Latin, Indonesia'
,
'jv-Latn-ID'
),
(
'Jola-Fonyi'
,
'dyo'
),
(
'Jola-Fonyi - Senegal'
,
'dyo-SN'
),
(
'Kabuverdianu'
,
'kea'
),
(
'Kabuverdianu - Cabo Verde'
,
'kea-CV'
),
(
'Kabyle'
,
'kab'
),
(
'Kabyle - Algeria'
,
'kab-DZ'
),
(
'Kako'
,
'kkj'
),
(
'Kako - Cameroon'
,
'kkj-CM'
),
(
'Kalenjin'
,
'kln'
),
(
'Kalenjin - Kenya'
,
'kln-KE'
),
(
'Kamba'
,
'kam'
),
(
'Kamba - Kenya'
,
'kam-KE'
),
(
'Kannada'
,
'kn'
),
(
'Kannada - India'
,
'kn-IN'
),
(
'Kashmiri'
,
'ks'
),
(
'Kashmiri - Perso-Arabic'
,
'ks-Arab'
),
(
'Kashmiri - Perso-Arabic, IN'
,
'ks-Arab-IN'
),
(
'Kazakh'
,
'kk'
),
(
'Kazakh - Kazakhstan'
,
'kk-KZ'
),
(
'Khmer'
,
'km'
),
(
'Khmer - Cambodia'
,
'km-KH'
),
(
"K'iche"
,
'quc'
),
(
"K'iche - Guatemala"
,
'quc-Latn-GT'
),
(
'Kikuyu'
,
'ki'
),
(
'Kikuyu - Kenya'
,
'ki-KE'
),
(
'Kinyarwanda'
,
'rw'
),
(
'Kinyarwanda - Rwanda'
,
'rw-RW'
),
(
'Kiswahili'
,
'sw'
),
(
'Kiswahili - Kenya'
,
'sw-KE'
),
(
'Kiswahili - Tanzania'
,
'sw-TZ'
),
(
'Kiswahili - Uganda'
,
'sw-UG'
),
(
'Konkani'
,
'kok'
),
(
'Konkani - India'
,
'kok-IN'
),
(
'Korean'
,
'ko'
),
(
'Korean - Korea'
,
'ko-KR'
),
(
'Korean - North Korea'
,
'ko-KP'
),
(
'Koyra Chiini'
,
'khq'
),
(
'Koyra Chiini - Mali'
,
'khq-ML'
),
(
'Koyraboro Senni'
,
'ses'
),
(
'Koyraboro Senni - Mali'
,
'ses-ML'
),
(
'Kwasio'
,
'nmg'
),
(
'Kwasio - Cameroon'
,
'nmg-CM'
),
(
'Kyrgyz'
,
'ky'
),
(
'Kyrgyz - Kyrgyzstan'
,
'ky-KG'
),
(
'Kurdish - Perso-Arabic, Iran'
,
'ku-Arab-IR'
),
(
'Lakota'
,
'lkt'
),
(
'Lakota - United States'
,
'lkt-US'
),
(
'Langi'
,
'lag'
),
(
'Langi - Tanzania'
,
'lag-TZ'
),
(
'Lao'
,
'lo'
),
(
'Lao - Lao P.D.R.'
,
'lo-LA'
),
(
'Latvian'
,
'lv'
),
(
'Latvian - Latvia'
,
'lv-LV'
),
(
'Lingala'
,
'ln'
),
(
'Lingala - Angola'
,
'ln-AO'
),
(
'Lingala - Central African Republic'
,
'ln-CF'
),
(
'Lingala - Congo'
,
'ln-CG'
),
(
'Lingala - Congo DRC'
,
'ln-CD'
),
(
'Lithuanian'
,
'lt'
),
(
'Lithuanian - Lithuania'
,
'lt-LT'
),
(
'Low German'
,
'nds'
),
(
'Low German - Germany'
,
'nds-DE'
),
(
'Low German - Netherlands'
,
'nds-NL'
),
(
'Lower Sorbian'
,
'dsb'
),
(
'Lower Sorbian - Germany'
,
'dsb-DE'
),
(
'Luba-Katanga'
,
'lu'
),
(
'Luba-Katanga - Congo DRC'
,
'lu-CD'
),
(
'Luo'
,
'luo'
),
(
'Luo - Kenya'
,
'luo-KE'
),
(
'Luxembourgish'
,
'lb'
),
(
'Luxembourgish - Luxembourg'
,
'lb-LU'
),
(
'Luyia'
,
'luy'
),
(
'Luyia - Kenya'
,
'luy-KE'
),
(
'Macedonian'
,
'mk'
),
(
'Macedonian - North Macedonia'
,
'mk-MK'
),
(
'Machame'
,
'jmc'
),
(
'Machame - Tanzania'
,
'jmc-TZ'
),
(
'Makhuwa-Meetto'
,
'mgh'
),
(
'Makhuwa-Meetto - Mozambique'
,
'mgh-MZ'
),
(
'Makonde'
,
'kde'
),
(
'Makonde - Tanzania'
,
'kde-TZ'
),
(
'Malagasy'
,
'mg'
),
(
'Malagasy - Madagascar'
,
'mg-MG'
),
(
'Malay'
,
'ms'
),
(
'Malay - Brunei Darussalam'
,
'ms-BN'
),
(
'Malay - Malaysia'
,
'ms-MY'
),
(
'Malayalam'
,
'ml'
),
(
'Malayalam - India'
,
'ml-IN'
),
(
'Maltese'
,
'mt'
),
(
'Maltese - Malta'
,
'mt-MT'
),
(
'Manx'
,
'gv'
),
(
'Manx - Isle of Man'
,
'gv-IM'
),
(
'Maori'
,
'mi'
),
(
'Maori - New Zealand'
,
'mi-NZ'
),
(
'Mapudungun'
,
'arn'
),
(
'Mapudungun - Chile'
,
'arn-CL'
),
(
'Marathi'
,
'mr'
),
(
'Marathi - India'
,
'mr-IN'
),
(
'Masai'
,
'mas'
),
(
'Masai - Kenya'
,
'mas-KE'
),
(
'Masai - Tanzania'
,
'mas-TZ'
),
(
'Mazanderani - Iran'
,
'mzn-IR'
),
(
'Meru'
,
'mer'
),
(
'Meru - Kenya'
,
'mer-KE'
),
(
"Meta'"
,
'mgo'
),
(
"Meta' - Cameroon"
,
'mgo-CM'
),
(
'Mohawk'
,
'moh'
),
(
'Mohawk - Canada'
,
'moh-CA'
),
(
'Mongolian (Cyrillic)'
,
'mn'
),
(
'Mongolian (Cyrillic), Cyrl'
,
'mn-Cyrl'
),
(
'Mongolian (Cyrillic) - Mongolia'
,
'mn-MN'
),
(
'Mongolian (Traditional Mongolian)'
,
'mn-Mong'
),
(
"Mongolian (Traditional Mongolian) - People's Republic of China"
,
'mn-Mong-CN'
),
(
'Mongolian (Traditional Mongolian) - Mongolia'
,
'mn-Mong-MN'
),
(
'Morisyen'
,
'mfe'
),
(
'Morisyen - Mauritius'
,
'mfe-MU'
),
(
'Mundang'
,
'mua'
),
(
'Mundang - Cameroon'
,
'mua-CM'
),
(
"N'ko"
,
'nqo'
),
(
"N'ko - Guinea"
,
'nqo-GN'
),
(
'Nama'
,
'naq'
),
(
'Nama - Namibia'
,
'naq-NA'
),
(
'Nepali'
,
'ne'
),
(
'Nepali - India'
,
'ne-IN'
),
(
'Nepali - Nepal'
,
'ne-NP'
),
(
'Ngiemboon'
,
'nnh'
),
(
'Ngiemboon - Cameroon'
,
'nnh-CM'
),
(
'Ngomba'
,
'jgo'
),
(
'Ngomba - Cameroon'
,
'jgo-CM'
),
(
'Northern Luri - Iraq'
,
'lrc-IQ'
),
(
'Northern Luri - Iran'
,
'lrc-IR'
),
(
'North Ndebele'
,
'nd'
),
(
'North Ndebele - Zimbabwe'
,
'nd-ZW'
),
(
'Norwegian (Bokmal)'
,
'no'
),
(
'Norwegian (Bokmal), nb'
,
'nb'
),
(
'Norwegian (Bokmal) - Norway'
,
'nb-NO'
),
(
'Norwegian (Nynorsk)'
,
'nn'
),
(
'Norwegian (Nynorsk) - Norway'
,
'nn-NO'
),
(
'Norwegian Bokmål - Svalbard and Jan Mayen'
,
'nb-SJ'
),
(
'Nuer'
,
'nus'
),
(
'Nuer - Sudan'
,
'nus-SD'
),
(
'Nuer - South Sudan'
,
'nus-SS'
),
(
'Nyankole'
,
'nyn'
),
(
'Nyankole - Uganda'
,
'nyn-UG'
),
(
'Occitan'
,
'oc'
),
(
'Occitan - France'
,
'oc-FR'
),
(
'Odia'
,
'or'
),
(
'Odia - India'
,
'or-IN'
),
(
'Oromo'
,
'om'
),
(
'Oromo - Ethiopia'
,
'om-ET'
),
(
'Oromo - Kenya'
,
'om-KE'
),
(
'Ossetian'
,
'os'
),
(
'Ossetian - Cyrillic, Georgia'
,
'os-GE'
),
(
'Ossetian - Cyrillic, Russia'
,
'os-RU'
),
(
'Pashto'
,
'ps'
),
(
'Pashto - Afghanistan'
,
'ps-AF'
),
(
'Pashto - Pakistan'
,
'ps-PK'
),
(
'Persian'
,
'fa'
),
(
'Persian - Afghanistan'
,
'fa-AF'
),
(
'Persian - Iran'
,
'fa-IR'
),
(
'Polish'
,
'pl'
),
(
'Polish - Poland'
,
'pl-PL'
),
(
'Portuguese'
,
'pt'
),
(
'Portuguese - Angola'
,
'pt-AO'
),
(
'Portuguese - Brazil'
,
'pt-BR'
),
(
'Portuguese - Cabo Verde'
,
'pt-CV'
),
(
'Portuguese - Equatorial Guinea'
,
'pt-GQ'
),
(
'Portuguese - Guinea-Bissau'
,
'pt-GW'
),
(
'Portuguese - Luxembourg'
,
'pt-LU'
),
(
'Portuguese - Macao SAR'
,
'pt-MO'
),
(
'Portuguese - Mozambique'
,
'pt-MZ'
),
(
'Portuguese - Portugal'
,
'pt-PT'
),
(
'Portuguese - São Tomé and Príncipe'
,
'pt-ST'
),
(
'Portuguese - Switzerland'
,
'pt-CH'
),
(
'Portuguese - Timor-Leste'
,
'pt-TL'
),
(
'Prussian'
,
'prg-001'
),
(
'Pseudo Language - Pseudo locale for east Asian/complex script localization testing'
,
'qps-ploca'
),
(
'Pseudo Language - Pseudo locale used for localization testing'
,
'qps-ploc'
),
(
'Pseudo Language - Pseudo locale used for localization testing of mirroredlocales'
,
'qps-plocm'
),
(
'Punjabi'
,
'pa'
),
(
'Punjabi, Arab'
,
'pa-Arab'
),
(
'Punjabi - India'
,
'pa-IN'
),
(
'Punjabi - Islamic Republic of Pakistan'
,
'pa-Arab-PK'
),
(
'Quechua'
,
'quz'
),
(
'Quechua - Bolivia'
,
'quz-BO'
),
(
'Quechua - Ecuador'
,
'quz-EC'
),
(
'Quechua - Peru'
,
'quz-PE'
),
(
'Ripuarian'
,
'ksh'
),
(
'Ripuarian - Germany'
,
'ksh-DE'
),
(
'Romanian'
,
'ro'
),
(
'Romanian - Moldova'
,
'ro-MD'
),
(
'Romanian - Romania'
,
'ro-RO'
),
(
'Romansh'
,
'rm'
),
(
'Romansh - Switzerland'
,
'rm-CH'
),
(
'Rombo'
,
'rof'
),
(
'Rombo - Tanzania'
,
'rof-TZ'
),
(
'Rundi'
,
'rn'
),
(
'Rundi - Burundi'
,
'rn-BI'
),
(
'Russian'
,
'ru'
),
(
'Russian - Belarus'
,
'ru-BY'
),
(
'Russian - Kazakhstan'
,
'ru-KZ'
),
(
'Russian - Kyrgyzstan'
,
'ru-KG'
),
(
'Russian - Moldova'
,
'ru-MD'
),
(
'Russian - Russia'
,
'ru-RU'
),
(
'Russian - Ukraine'
,
'ru-UA'
),
(
'Rwa'
,
'rwk'
),
(
'Rwa - Tanzania'
,
'rwk-TZ'
),
(
'Saho'
,
'ssy'
),
(
'Saho - Eritrea'
,
'ssy-ER'
),
(
'Sakha'
,
'sah'
),
(
'Sakha - Russia'
,
'sah-RU'
),
(
'Samburu'
,
'saq'
),
(
'Samburu - Kenya'
,
'saq-KE'
),
(
'Sami (Inari)'
,
'smn'
),
(
'Sami (Inari) - Finland'
,
'smn-FI'
),
(
'Sami (Lule)'
,
'smj'
),
(
'Sami (Lule) - Norway'
,
'smj-NO'
),
(
'Sami (Lule) - Sweden'
,
'smj-SE'
),
(
'Sami (Northern)'
,
'se'
),
(
'Sami (Northern) - Finland'
,
'se-FI'
),
(
'Sami (Northern) - Norway'
,
'se-NO'
),
(
'Sami (Northern) - Sweden'
,
'se-SE'
),
(
'Sami (Skolt)'
,
'sms'
),
(
'Sami (Skolt) - Finland'
,
'sms-FI'
),
(
'Sami (Southern)'
,
'sma'
),
(
'Sami (Southern) - Norway'
,
'sma-NO'
),
(
'Sami (Southern) - Sweden'
,
'sma-SE'
),
(
'Sango'
,
'sg'
),
(
'Sango - Central African Republic'
,
'sg-CF'
),
(
'Sangu'
,
'sbp'
),
(
'Sangu - Tanzania'
,
'sbp-TZ'
),
(
'Sanskrit'
,
'sa'
),
(
'Sanskrit - India'
,
'sa-IN'
),
(
'Scottish Gaelic'
,
'gd'
),
(
'Scottish Gaelic - United Kingdom'
,
'gd-GB'
),
(
'Sena'
,
'seh'
),
(
'Sena - Mozambique'
,
'seh-MZ'
),
(
'Serbian (Cyrillic)'
,
'sr-Cyrl'
),
(
'Serbian (Cyrillic) - Bosnia and Herzegovina'
,
'sr-Cyrl-BA'
),
(
'Serbian (Cyrillic) - Montenegro'
,
'sr-Cyrl-ME'
),
(
'Serbian (Cyrillic) - Serbia'
,
'sr-Cyrl-RS'
),
(
'Serbian (Cyrillic) - Serbia and Montenegro (Former)'
,
'sr-Cyrl-CS'
),
(
'Serbian (Latin)'
,
'sr'
),
(
'Serbian (Latin), Latn'
,
'sr-Latn'
),
(
'Serbian (Latin) - Bosnia and Herzegovina'
,
'sr-Latn-BA'
),
(
'Serbian (Latin) - Montenegro'
,
'sr-Latn-ME'
),
(
'Serbian (Latin) - Serbia'
,
'sr-Latn-RS'
),
(
'Serbian (Latin) - Serbia and Montenegro (Former)'
,
'sr-Latn-CS'
),
(
'Sesotho sa Leboa'
,
'nso'
),
(
'Sesotho sa Leboa - South Africa'
,
'nso-ZA'
),
(
'Setswana'
,
'tn'
),
(
'Setswana - Botswana'
,
'tn-BW'
),
(
'Setswana - South Africa'
,
'tn-ZA'
),
(
'Shambala'
,
'ksb'
),
(
'Shambala - Tanzania'
,
'ksb-TZ'
),
(
'Shona'
,
'sn'
),
(
'Shona - Latin'
,
'sn-Latn'
),
(
'Shona - Zimbabwe'
,
'sn-Latn-ZW'
),
(
'Sindhi'
,
'sd'
),
(
'Sindhi, Arab'
,
'sd-Arab'
),
(
'Sindhi - Islamic Republic of Pakistan'
,
'sd-Arab-PK'
),
(
'Sinhala'
,
'si'
),
(
'Sinhala - Sri Lanka'
,
'si-LK'
),
(
'Slovak'
,
'sk'
),
(
'Slovak - Slovakia'
,
'sk-SK'
),
(
'Slovenian'
,
'sl'
),
(
'Slovenian - Slovenia'
,
'sl-SI'
),
(
'Soga'
,
'xog'
),
(
'Soga - Uganda'
,
'xog-UG'
),
(
'Somali'
,
'so'
),
(
'Somali - Djibouti'
,
'so-DJ'
),
(
'Somali - Ethiopia'
,
'so-ET'
),
(
'Somali - Kenya'
,
'so-KE'
),
(
'Somali - Somalia'
,
'so-SO'
),
(
'Sotho'
,
'st'
),
(
'Sotho - South Africa'
,
'st-ZA'
),
(
'South Ndebele'
,
'nr'
),
(
'South Ndebele - South Africa'
,
'nr-ZA'
),
(
'Southern Sotho - Lesotho'
,
'st-LS'
),
(
'Spanish'
,
'es'
),
(
'Spanish - Argentina'
,
'es-AR'
),
(
'Spanish - Belize'
,
'es-BZ'
),
(
'Spanish - Bolivarian Republic of Venezuela'
,
'es-VE'
),
(
'Spanish - Bolivia'
,
'es-BO'
),
(
'Spanish - Brazil'
,
'es-BR'
),
(
'Spanish - Chile'
,
'es-CL'
),
(
'Spanish - Colombia'
,
'es-CO'
),
(
'Spanish - Costa Rica'
,
'es-CR'
),
(
'Spanish - Cuba'
,
'es-CU'
),
(
'Spanish - Dominican Republic'
,
'es-DO'
),
(
'Spanish - Ecuador'
,
'es-EC'
),
(
'Spanish - El Salvador'
,
'es-SV'
),
(
'Spanish - Equatorial Guinea'
,
'es-GQ'
),
(
'Spanish - Guatemala'
,
'es-GT'
),
(
'Spanish - Honduras'
,
'es-HN'
),
(
'Spanish - Latin America'
,
'es-419'
),
(
'Spanish - Mexico'
,
'es-MX'
),
(
'Spanish - Nicaragua'
,
'es-NI'
),
(
'Spanish - Panama'
,
'es-PA'
),
(
'Spanish - Paraguay'
,
'es-PY'
),
(
'Spanish - Peru'
,
'es-PE'
),
(
'Spanish - Philippines'
,
'es-PH'
),
(
'Spanish - Puerto Rico'
,
'es-PR'
),
(
'Spanish - Spain'
,
'es-ES'
),
(
'Spanish - Spain, ES_tradnl'
,
'es-ES_tradnl'
),
(
'Spanish - United - States'
,
'es-US'
),
(
'Spanish - Uruguay'
,
'es-UY'
),
(
'Standard Moroccan Tamazight'
,
'zgh'
),
(
'Standard Moroccan Tamazight - Morocco'
,
'zgh-Tfng-MA'
),
(
'Standard Moroccan Tamazight - Tifinagh'
,
'zgh-Tfng'
),
(
'Swati'
,
'ss'
),
(
'Swati - South Africa'
,
'ss-ZA'
),
(
'Swati - Swaziland'
,
'ss-SZ'
),
(
'Swedish'
,
'sv'
),
(
'Swedish - Åland Islands'
,
'sv-AX'
),
(
'Swedish - Finland'
,
'sv-FI'
),
(
'Swedish - Sweden'
,
'sv-SE'
),
(
'Syriac'
,
'syr'
),
(
'Syriac - Syria'
,
'syr-SY'
),
(
'Tachelhit'
,
'shi'
),
(
'Tachelhit - Tifinagh'
,
'shi-Tfng'
),
(
'Tachelhit - Tifinagh, Morocco'
,
'shi-Tfng-MA'
),
(
'Tachelhit (Latin)'
,
'shi-Latn'
),
(
'Tachelhit (Latin) - Morocco'
,
'shi-Latn-MA'
),
(
'Taita'
,
'dav'
),
(
'Taita - Kenya'
,
'dav-KE'
),
(
'Tajik (Cyrillic)'
,
'tg'
),
(
'Tajik (Cyrillic), Cyrl'
,
'tg-Cyrl'
),
(
'Tajik (Cyrillic) - Tajikistan'
,
'tg-Cyrl-TJ'
),
(
'Tamazight (Latin)'
,
'tzm'
),
(
'Tamazight (Latin), Latn'
,
'tzm-Latn'
),
(
'Tamazight (Latin) - Algeria'
,
'tzm-Latn-DZ'
),
(
'Tamil'
,
'ta'
),
(
'Tamil - India'
,
'ta-IN'
),
(
'Tamil - Malaysia'
,
'ta-MY'
),
(
'Tamil - Singapore'
,
'ta-SG'
),
(
'Tamil - Sri Lanka'
,
'ta-LK'
),
(
'Tasawaq'
,
'twq'
),
(
'Tasawaq - Niger'
,
'twq-NE'
),
(
'Tatar'
,
'tt'
),
(
'Tatar - Russia'
,
'tt-RU'
),
(
'Telugu'
,
'te'
),
(
'Telugu - India'
,
'te-IN'
),
(
'Teso'
,
'teo'
),
(
'Teso - Kenya'
,
'teo-KE'
),
(
'Teso - Uganda'
,
'teo-UG'
),
(
'Thai'
,
'th'
),
(
'Thai - Thailand'
,
'th-TH'
),
(
'Tibetan'
,
'bo'
),
(
'Tibetan - India'
,
'bo-IN'
),
(
"Tibetan - People's Republic of China"
,
'bo-CN'
),
(
'Tigre'
,
'tig'
),
(
'Tigre - Eritrea'
,
'tig-ER'
),
(
'Tigrinya'
,
'ti'
),
(
'Tigrinya - Eritrea'
,
'ti-ER'
),
(
'Tigrinya - Ethiopia'
,
'ti-ET'
),
(
'Tongan'
,
'to'
),
(
'Tongan - Tonga'
,
'to-TO'
),
(
'Tsonga'
,
'ts'
),
(
'Tsonga - South Africa'
,
'ts-ZA'
),
(
'Turkish'
,
'tr'
),
(
'Turkish - Cyprus'
,
'tr-CY'
),
(
'Turkish - Turkey'
,
'tr-TR'
),
(
'Turkmen'
,
'tk'
),
(
'Turkmen - Turkmenistan'
,
'tk-TM'
),
(
'Ukrainian'
,
'uk'
),
(
'Ukrainian - Ukraine'
,
'uk-UA'
),
(
'Upper Sorbian'
,
'hsb'
),
(
'Upper Sorbian - Germany'
,
'hsb-DE'
),
(
'Urdu'
,
'ur'
),
(
'Urdu - India'
,
'ur-IN'
),
(
'Urdu - Islamic Republic of Pakistan'
,
'ur-PK'
),
(
'Uyghur'
,
'ug'
),
(
"Uyghur - People's Republic of China"
,
'ug-CN'
),
(
'Uzbek - Perso-Arabic'
,
'uz-Arab'
),
(
'Uzbek - Perso-Arabic, Afghanistan'
,
'uz-Arab-AF'
),
(
'Uzbek (Cyrillic)'
,
'uz-Cyrl'
),
(
'Uzbek (Cyrillic) - Uzbekistan'
,
'uz-Cyrl-UZ'
),
(
'Uzbek (Latin)'
,
'uz'
),
(
'Uzbek (Latin), Latn'
,
'uz-Latn'
),
(
'Uzbek (Latin) - Uzbekistan'
,
'uz-Latn-UZ'
),
(
'Vai'
,
'vai'
),
(
'Vai, Vaii'
,
'vai-Vaii'
),
(
'Vai - Liberia'
,
'vai-Vaii-LR'
),
(
'Vai (Latin) - Liberia'
,
'vai-Latn-LR'
),
(
'Vai (Latin)'
,
'vai-Latn'
),
(
'Valencian - Spain'
,
'ca-ES-valencia'
),
(
'Venda'
,
've'
),
(
'Venda - South Africa'
,
've-ZA'
),
(
'Vietnamese'
,
'vi'
),
(
'Vietnamese - Vietnam'
,
'vi-VN'
),
(
'Volapük'
,
'vo'
),
(
'Volapük - World'
,
'vo-001'
),
(
'Vunjo'
,
'vun'
),
(
'Vunjo - Tanzania'
,
'vun-TZ'
),
(
'Walser'
,
'wae'
),
(
'Walser - Switzerland'
,
'wae-CH'
),
(
'Welsh'
,
'cy'
),
(
'Welsh - United Kingdom'
,
'cy-GB'
),
(
'Wolaytta'
,
'wal'
),
(
'Wolaytta - Ethiopia'
,
'wal-ET'
),
(
'Wolof'
,
'wo'
),
(
'Wolof - Senegal'
,
'wo-SN'
),
(
'Xhosa'
,
'xh'
),
(
'Xhosa - South Africa'
,
'xh-ZA'
),
(
'Yangben'
,
'yav'
),
(
'Yangben - Cameroon'
,
'yav-CM'
),
(
'Yi'
,
'ii'
),
(
"Yi - People's Republic of China"
,
'ii-CN'
),
(
'Yoruba'
,
'yo'
),
(
'Yoruba - Benin'
,
'yo-BJ'
),
(
'Yoruba - Nigeria'
,
'yo-NG'
),
(
'Zarma'
,
'dje'
),
(
'Zarma - Niger'
,
'dje-NE'
),
(
'Zulu'
,
'zu'
),
(
'Zulu - South Africa'
,
'zu-ZA'
)],
default
=
'en'
,
help_text
=
'Required if type is "Subtitle"'
,
max_length
=
50
,
unique
=
True
)),
(
'video'
,
models
.
ForeignKey
(
on_delete
=
django
.
db
.
models
.
deletion
.
CASCADE
,
related_name
=
'tracks'
,
to
=
'wagtailvideos.Video'
)),
],
options
=
{
'abstract'
:
False
,
},
),
]
wagtailvideos/models.py
View file @
26d0a91b
...
@@ -6,17 +6,14 @@ import shutil
...
@@ -6,17 +6,14 @@ import shutil
import
subprocess
import
subprocess
import
tempfile
import
tempfile
import
threading
import
threading
from
contextlib
import
contextmanager
from
distutils.version
import
LooseVersion
from
distutils.version
import
LooseVersion
import
bcp47
import
wagtail
import
wagtail
from
django.conf
import
settings
from
django.conf
import
settings
from
django.core.exceptions
import
SuspiciousFileOperation
from
django.core.exceptions
import
SuspiciousFileOperation
from
django.core.files.base
import
ContentFile
from
django.core.files.base
import
ContentFile
from
django.core.files.temp
import
NamedTemporaryFile
from
django.db
import
models
from
django.db
import
models
from
django.db.models.signals
import
post_save
,
pre_delete
from
django.dispatch.dispatcher
import
receiver
from
django.forms.utils
import
flatatt
from
django.forms.utils
import
flatatt
from
django.urls
import
reverse
from
django.urls
import
reverse
from
django.utils.safestring
import
mark_safe
from
django.utils.safestring
import
mark_safe
...
@@ -27,8 +24,6 @@ from wagtail.core.models import CollectionMember
...
@@ -27,8 +24,6 @@ from wagtail.core.models import CollectionMember
from
wagtail.search
import
index
from
wagtail.search
import
index
from
wagtail.search.queryset
import
SearchableQuerySetMixin
from
wagtail.search.queryset
import
SearchableQuerySetMixin
from
wagtailvideos
import
ffmpeg
if
LooseVersion
(
wagtail
.
__version__
)
>=
LooseVersion
(
'2.7'
):
if
LooseVersion
(
wagtail
.
__version__
)
>=
LooseVersion
(
'2.7'
):
from
wagtail.admin.models
import
get_object_usage
from
wagtail.admin.models
import
get_object_usage
else
:
else
:
...
@@ -180,12 +175,9 @@ class AbstractVideo(CollectionMember, index.Indexed, models.Model):
...
@@ -180,12 +175,9 @@ class AbstractVideo(CollectionMember, index.Indexed, models.Model):
def
get_transcode_model
(
cls
):
def
get_transcode_model
(
cls
):
return
cls
.
transcodes
.
rel
.
related_model
return
cls
.
transcodes
.
rel
.
related_model
def
get_transcode
(
self
,
media_format
):
@
classmethod
Transcode
=
self
.
get_transcode_model
()
def
get_track_model
(
cls
):
try
:
return
cls
.
tracks
.
rel
.
related_model
return
self
.
transcodes
.
get
(
media_format
=
media_format
)
except
Transcode
.
DoesNotExist
:
return
self
.
do_transcode
(
media_format
)
def
video_tag
(
self
,
attrs
=
None
):
def
video_tag
(
self
,
attrs
=
None
):
if
attrs
is
None
:
if
attrs
is
None
:
...
@@ -212,7 +204,7 @@ class AbstractVideo(CollectionMember, index.Indexed, models.Model):
...
@@ -212,7 +204,7 @@ class AbstractVideo(CollectionMember, index.Indexed, models.Model):
transcode
,
created
=
self
.
transcodes
.
get_or_create
(
transcode
,
created
=
self
.
transcodes
.
get_or_create
(
media_format
=
media_format
,
media_format
=
media_format
,
)
)
if
transcode
.
processing
is
False
:
if
created
or
transcode
.
processing
is
False
:
transcode
.
processing
=
True
transcode
.
processing
=
True
transcode
.
error_messages
=
''
transcode
.
error_messages
=
''
transcode
.
quality
=
quality
transcode
.
quality
=
quality
...
@@ -292,61 +284,6 @@ class TranscodingThread(threading.Thread):
...
@@ -292,61 +284,6 @@ class TranscodingThread(threading.Thread):
shutil
.
rmtree
(
output_dir
,
ignore_errors
=
True
)
shutil
.
rmtree
(
output_dir
,
ignore_errors
=
True
)
@
contextmanager
def
get_local_file
(
file
):
"""
Get a local version of the file, downloading it from the remote storage if
required. The returned value should be used as a context manager to
ensure any temporary files are cleaned up afterwards.
"""
try
:
with
open
(
file
.
path
):
yield
file
.
path
except
NotImplementedError
:
_
,
ext
=
os
.
path
.
splitext
(
file
.
name
)
with
NamedTemporaryFile
(
prefix
=
'wagtailvideo-'
,
suffix
=
ext
)
as
tmp
:
try
:
file
.
open
(
'rb'
)
for
chunk
in
file
.
chunks
():
tmp
.
write
(
chunk
)
finally
:
file
.
close
()
tmp
.
flush
()
yield
tmp
.
name
# Delete files when model is deleted
@
receiver
(
pre_delete
,
sender
=
Video
)
def
video_delete
(
sender
,
instance
,
**
kwargs
):
instance
.
thumbnail
.
delete
(
False
)
instance
.
file
.
delete
(
False
)
# Fields that need the actual video file to create
@
receiver
(
post_save
,
sender
=
Video
)
def
video_saved
(
sender
,
instance
,
**
kwargs
):
if
not
ffmpeg
.
installed
():
return
if
hasattr
(
instance
,
'_from_signal'
):
return
has_changed
=
instance
.
_initial_file
is
not
instance
.
file
filled_out
=
instance
.
thumbnail
is
not
None
and
instance
.
duration
is
not
None
if
has_changed
or
not
filled_out
:
with
get_local_file
(
instance
.
file
)
as
file_path
:
if
has_changed
or
instance
.
thumbnail
is
None
:
instance
.
thumbnail
=
ffmpeg
.
get_thumbnail
(
file_path
)
if
has_changed
or
instance
.
duration
is
None
:
instance
.
duration
=
ffmpeg
.
get_duration
(
file_path
)
instance
.
file_size
=
instance
.
file
.
size
instance
.
_from_signal
=
True
instance
.
save
()
del
instance
.
_from_signal
class
AbstractVideoTranscode
(
models
.
Model
):
class
AbstractVideoTranscode
(
models
.
Model
):
media_format
=
EnumChoiceField
(
MediaFormats
)
media_format
=
EnumChoiceField
(
MediaFormats
)
quality
=
EnumChoiceField
(
VideoQuality
,
default
=
VideoQuality
.
default
)
quality
=
EnumChoiceField
(
VideoQuality
,
default
=
VideoQuality
.
default
)
...
@@ -377,7 +314,41 @@ class VideoTranscode(AbstractVideoTranscode):
...
@@ -377,7 +314,41 @@ class VideoTranscode(AbstractVideoTranscode):
)
)
# Delete files when model is deleted
class
AbstractTrack
(
models
.
Model
):
@
receiver
(
pre_delete
,
sender
=
VideoTranscode
)
# TODO move to TextChoices once djangp < 2 is dropped
def
transcode_delete
(
sender
,
instance
,
**
kwargs
):
track_kinds
=
[
instance
.
file
.
delete
(
False
)
(
'subtitles'
,
'Subtitles'
),
(
'captions'
,
'Captions'
),
(
'descriptions'
,
'Descriptions'
),
(
'chapters'
,
'Chapters'
),
(
'metadata'
,
'Metadata'
),
]
file
=
models
.
FileField
(
verbose_name
=
_
(
'file'
),
upload_to
=
get_upload_to
)
kind
=
models
.
CharField
(
max_length
=
50
,
choices
=
track_kinds
,
default
=
track_kinds
[
0
][
0
])
label
=
models
.
CharField
(
max_length
=
255
,
blank
=
True
,
help_text
=
'A user-readable title of the text track.'
)
language
=
models
.
CharField
(
max_length
=
50
,
choices
=
[(
k
,
v
)
for
k
,
v
in
bcp47
.
languages
.
items
()],
default
=
'en'
,
blank
=
True
,
help_text
=
'Required if type is "Subtitle"'
,
unique
=
True
)
@
property
def
url
(
self
):
return
self
.
file
.
url
def
get_upload_to
(
self
,
filename
):
folder_name
=
'video_tracks'
filename
=
self
.
file
.
field
.
storage
.
get_valid_name
(
filename
)
return
os
.
path
.
join
(
folder_name
,
filename
)
class
Meta
:
abstract
=
True
class
Track
(
AbstractTrack
):
video
=
models
.
ForeignKey
(
Video
,
related_name
=
'tracks'
,
on_delete
=
models
.
CASCADE
)
wagtailvideos/signals.py
0 → 100644
View file @
26d0a91b
import
os
from
contextlib
import
contextmanager
from
django.core.files.temp
import
NamedTemporaryFile
from
django.db
import
transaction
from
django.db.models.signals
import
post_delete
,
post_save
from
wagtailvideos
import
ffmpeg
,
get_video_model
@
contextmanager
def
get_local_file
(
file
):
"""
Get a local version of the file, downloading it from the remote storage if
required. The returned value should be used as a context manager to
ensure any temporary files are cleaned up afterwards.
"""
try
:
with
open
(
file
.
path
):
yield
file
.
path
except
NotImplementedError
:
_
,
ext
=
os
.
path
.
splitext
(
file
.
name
)
with
NamedTemporaryFile
(
prefix
=
'wagtailvideo-'
,
suffix
=
ext
)
as
tmp
:
try
:
file
.
open
(
'rb'
)
for
chunk
in
file
.
chunks
():
tmp
.
write
(
chunk
)
finally
:
file
.
close
()
tmp
.
flush
()
yield
tmp
.
name
def
post_delete_file_cleanup
(
instance
,
**
kwargs
):
# Pass false so FileField doesn't save the model.
transaction
.
on_commit
(
lambda
:
instance
.
file
.
delete
(
False
))
if
hasattr
(
instance
,
'thumbnail'
):
# Delete the thumbnail for videos too
transaction
.
on_commit
(
lambda
:
instance
.
thumbnail
.
delete
(
False
))
# Fields that need the actual video file to create using ffmpeg
def
video_post_save
(
instance
,
**
kwargs
):
if
not
ffmpeg
.
installed
():
return
if
hasattr
(
instance
,
'_from_signal'
):
# Sender was us, don't run post save
return
has_changed
=
instance
.
_initial_file
is
not
instance
.
file
filled_out
=
instance
.
thumbnail
is
not
None
and
instance
.
duration
is
not
None
if
has_changed
or
not
filled_out
:
with
get_local_file
(
instance
.
file
)
as
file_path
:
if
has_changed
or
instance
.
thumbnail
is
None
:
instance
.
thumbnail
=
ffmpeg
.
get_thumbnail
(
file_path
)
if
has_changed
or
instance
.
duration
is
None
:
instance
.
duration
=
ffmpeg
.
get_duration
(
file_path
)
instance
.
file_size
=
instance
.
file
.
size
instance
.
_from_signal
=
True
instance
.
save
()
del
instance
.
_from_signal
def
register_signal_handlers
():
Video
=
get_video_model
()
VideoTranscode
=
Video
.
get_transcode_model
()
VideoTrack
=
Video
.
get_track_model
()
post_save
.
connect
(
video_post_save
,
sender
=
Video
)
post_delete
.
connect
(
post_delete_file_cleanup
,
sender
=
Video
)
post_delete
.
connect
(
post_delete_file_cleanup
,
sender
=
VideoTranscode
)
post_delete
.
connect
(
post_delete_file_cleanup
,
sender
=
VideoTrack
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment