[Scummvm-git-logs] scummvm-web master -> bcf45949d016d89d5b73122602cfa25471b7be9d

Mataniko mataniko at gmail.com
Tue Sep 29 20:08:42 UTC 2020


This automated email contains information about 16 new commits which have been
pushed to the 'scummvm-web' repo located at https://github.com/scummvm/scummvm-web .

Summary:
651488b8c8 DATA: Move L10N files for simple URLs
e483873d57 WEB: Remove the lang cookie and leverage the url path instead
053bad7b11 WEB: Fix screenshots in development
89cf4801e0 WEB: Fix menu links for localized pages
cae79c85e3 L10N: Add new smarty modifier function to add lang url path
a656fe3c71 L10N: Update templates to use new lang modifier
6d0899847b WEB: Cache based on locale
9b79a7590e L10N: Add backward compatibility support for users with lang params or cookies
12965cf658 WEB: Fix template syntax errors
35039fedb3 WEB: Update news and feed templates to use canonical language URLs
2a7620aff8 DATA: Rename faq L10N files
29f694654a WEB: Fix images in localized pages
8b04f8d073 WEB: Fix sponsors pages in localized pages
858b40f31d WEB: Update links in news articles to localized links
13e183e968 WEB: Add lang attribute to the pages
bcf45949d0 JANITORIAL: Code lint


Commit: 651488b8c853138659deca1960dee0d4d9684109
    https://github.com/scummvm/scummvm-web/commit/651488b8c853138659deca1960dee0d4d9684109
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
DATA: Move L10N files for simple URLs

Changed paths:
  A data/localization/de/news.json
  A data/localization/de/strings.json
  A data/localization/el/news.json
  A data/localization/el/strings.json
  A data/localization/en/news.json
  A data/localization/en/strings.json
  A data/localization/es/news.json
  A data/localization/es/strings.json
  A data/localization/fr/news.json
  A data/localization/fr/strings.json
  A data/localization/he/strings.json
  A data/localization/it/news.json
  A data/localization/it/strings.json
  A data/localization/pl/strings.json
  A data/localization/pt-BR/news.json
  A data/localization/pt-BR/strings.json
  A data/localization/pt-PT/strings.json
  A data/localization/ru/news.json
  A data/localization/ru/strings.json
  A data/news/de/.gitignore
  A data/news/de/20020308.png
  A data/news/de/20070401_1.png
  A data/news/de/20070401_2.png
  A data/news/de/20100401_2.jpg
  A data/news/de/20120401_3.png
  A data/news/de/20120401_4.png
  A data/news/de/20140401_1.png
  A data/news/de/20140401_2.png
  A data/news/de/20140401_3.png
  A data/news/de/20140401_4.png
  A data/news/de/20140401_5.png
  A data/news/de/20140401_6.png
  A data/news/de/20140401_7.png
  A data/news/de/20140401_8.png
  A data/news/el/.gitignore
  A data/news/en/20011122.markdown
  A data/news/en/20020113.markdown
  A data/news/en/20020121.markdown
  A data/news/en/20020203.markdown
  A data/news/en/20020214.markdown
  A data/news/en/20020220.markdown
  A data/news/en/20020308.markdown
  A data/news/en/20020320.markdown
  A data/news/en/20020404.markdown
  A data/news/en/20020406.markdown
  A data/news/en/20020409.markdown
  A data/news/en/20020414.markdown
  A data/news/en/20020501.markdown
  A data/news/en/20020511.markdown
  A data/news/en/20020514.markdown
  A data/news/en/20020527.markdown
  A data/news/en/20020616.markdown
  A data/news/en/20020625.markdown
  A data/news/en/20020701.markdown
  A data/news/en/20020812.markdown
  A data/news/en/20020829.markdown
  A data/news/en/20020915.markdown
  A data/news/en/20021004.markdown
  A data/news/en/20021017.markdown
  A data/news/en/20021105.markdown
  A data/news/en/20021108.markdown
  A data/news/en/20021207.markdown
  A data/news/en/20021214.markdown
  A data/news/en/20021227.markdown
  A data/news/en/20021230.markdown
  A data/news/en/20030104.markdown
  A data/news/en/20030106.markdown
  A data/news/en/20030114.markdown
  A data/news/en/20030128.markdown
  A data/news/en/20030308.markdown
  A data/news/en/20030318.markdown
  A data/news/en/20030424.markdown
  A data/news/en/20030512.markdown
  A data/news/en/20030525.markdown
  A data/news/en/20030711.markdown
  A data/news/en/20030802.markdown
  A data/news/en/20030803.markdown
  A data/news/en/20030808.markdown
  A data/news/en/20030909.markdown
  A data/news/en/20031212.markdown
  A data/news/en/20031225.markdown
  A data/news/en/20040117.markdown
  A data/news/en/20040118.markdown
  A data/news/en/20040130.markdown
  A data/news/en/20040219.markdown
  A data/news/en/20040309.markdown
  A data/news/en/20040315.markdown
  A data/news/en/20040316.markdown
  A data/news/en/20040318.markdown
  A data/news/en/20040401.markdown
  A data/news/en/20040402.markdown
  A data/news/en/20040510.markdown
  A data/news/en/20040727.markdown
  A data/news/en/20040728.markdown
  A data/news/en/20040805.markdown
  A data/news/en/20040911.markdown
  A data/news/en/20040930.markdown
  A data/news/en/20041011.markdown
  A data/news/en/20041019.markdown
  A data/news/en/20041022.markdown
  A data/news/en/20041028.markdown
  A data/news/en/20041205.markdown
  A data/news/en/20041206.markdown
  A data/news/en/20041217.markdown
  A data/news/en/20041223.markdown
  A data/news/en/20041224.markdown
  A data/news/en/20050101.markdown
  A data/news/en/20050309.markdown
  A data/news/en/20050313.markdown
  A data/news/en/20050328.markdown
  A data/news/en/20050330.markdown
  A data/news/en/20050401.markdown
  A data/news/en/20050511.markdown
  A data/news/en/20050804.markdown
  A data/news/en/20050830.markdown
  A data/news/en/20050909.markdown
  A data/news/en/20051011.markdown
  A data/news/en/20051030.markdown
  A data/news/en/20051101.markdown
  A data/news/en/20051109.markdown
  A data/news/en/20051113.markdown
  A data/news/en/20051114.markdown
  A data/news/en/20051202.markdown
  A data/news/en/20051205.markdown
  A data/news/en/20060109.markdown
  A data/news/en/20060114.markdown
  A data/news/en/20060131.markdown
  A data/news/en/20060208.markdown
  A data/news/en/20060212.markdown
  A data/news/en/20060314.markdown
  A data/news/en/20060319.markdown
  A data/news/en/20060409.markdown
  A data/news/en/20060425.markdown
  A data/news/en/20060513.markdown
  A data/news/en/20060524.markdown
  A data/news/en/20060527.markdown
  A data/news/en/20060625.markdown
  A data/news/en/20060704.markdown
  A data/news/en/20060830.markdown
  A data/news/en/20061029.markdown
  A data/news/en/20061114.markdown
  A data/news/en/20061117.markdown
  A data/news/en/20061215.markdown
  A data/news/en/20061218.markdown
  A data/news/en/20061219.markdown
  A data/news/en/20070103.markdown
  A data/news/en/20070105.markdown
  A data/news/en/20070130.markdown
  A data/news/en/20070210.markdown
  A data/news/en/20070216.markdown
  A data/news/en/20070307.markdown
  A data/news/en/20070315.markdown
  A data/news/en/20070401.markdown
  A data/news/en/20070412.markdown
  A data/news/en/20070422.markdown
  A data/news/en/20070519.markdown
  A data/news/en/20070520.markdown
  A data/news/en/20070606.markdown
  A data/news/en/20070620.markdown
  A data/news/en/20070703.markdown
  A data/news/en/20070722.markdown
  A data/news/en/20070731.markdown
  A data/news/en/20070805.markdown
  A data/news/en/20070916.markdown
  A data/news/en/20071012.markdown
  A data/news/en/20071127.markdown
  A data/news/en/20071130.markdown
  A data/news/en/20071202.markdown
  A data/news/en/20071206.markdown
  A data/news/en/20071228.markdown
  A data/news/en/20080115.markdown
  A data/news/en/20080229.markdown
  A data/news/en/20080302.markdown
  A data/news/en/20080321.markdown
  A data/news/en/20080331.markdown
  A data/news/en/20080401.markdown
  A data/news/en/20080511.markdown
  A data/news/en/20080522.markdown
  A data/news/en/20080526.markdown
  A data/news/en/20080622.markdown
  A data/news/en/20080703.markdown
  A data/news/en/20080721.markdown
  A data/news/en/20080831.markdown
  A data/news/en/20080906.markdown
  A data/news/en/20080914.markdown
  A data/news/en/20081201.markdown
  A data/news/en/20081214.markdown
  A data/news/en/20081216.markdown
  A data/news/en/20090104.markdown
  A data/news/en/20090114.markdown
  A data/news/en/20090117.markdown
  A data/news/en/20090122.markdown
  A data/news/en/20090215.markdown
  A data/news/en/20090228.markdown
  A data/news/en/20090307.markdown
  A data/news/en/20090318.markdown
  A data/news/en/20090421.markdown
  A data/news/en/20090423.markdown
  A data/news/en/20090427.markdown
  A data/news/en/20090514.markdown
  A data/news/en/20090517.markdown
  A data/news/en/20090523.markdown
  A data/news/en/20090607.markdown
  A data/news/en/20090616.markdown
  A data/news/en/20090623.markdown
  A data/news/en/20090630.markdown
  A data/news/en/20090702.markdown
  A data/news/en/20090709.markdown
  A data/news/en/20090710a.markdown
  A data/news/en/20090710b.markdown
  A data/news/en/20090724.markdown
  A data/news/en/20090802.markdown
  A data/news/en/20090821.markdown
  A data/news/en/20090831.markdown
  A data/news/en/20090920.markdown
  A data/news/en/20091030.markdown
  A data/news/en/20091115.markdown
  A data/news/en/20091221.markdown
  A data/news/en/20091222.markdown
  A data/news/en/20100109.markdown
  A data/news/en/20100222.markdown
  A data/news/en/20100318.markdown
  A data/news/en/20100401.markdown
  A data/news/en/20100404.markdown
  A data/news/en/20100428.markdown
  A data/news/en/20100502.markdown
  A data/news/en/20100725.markdown
  A data/news/en/20100828.markdown
  A data/news/en/20100912.markdown
  A data/news/en/20101015.markdown
  A data/news/en/20101219.markdown
  A data/news/en/20110123.markdown
  A data/news/en/20110203.markdown
  A data/news/en/20110212.markdown
  A data/news/en/20110318.markdown
  A data/news/en/20110328.markdown
  A data/news/en/20110401.markdown
  A data/news/en/20110416.markdown
  A data/news/en/20110422.markdown
  A data/news/en/20110528.markdown
  A data/news/en/20110602.markdown
  A data/news/en/20110712.markdown
  A data/news/en/20110804.markdown
  A data/news/en/20111003.markdown
  A data/news/en/20111106.markdown
  A data/news/en/20111111.markdown
  A data/news/en/20111121.markdown
  A data/news/en/20111126.markdown
  A data/news/en/20111210.markdown
  A data/news/en/20111219.markdown
  A data/news/en/20120127.markdown
  A data/news/en/20120316.markdown
  A data/news/en/20120328.markdown
  A data/news/en/20120401.markdown
  A data/news/en/20120401b.markdown
  A data/news/en/20120424.markdown
  A data/news/en/20120502.markdown
  A data/news/en/20120609.markdown
  A data/news/en/20120616.markdown
  A data/news/en/20120629.markdown
  A data/news/en/20120727.markdown
  A data/news/en/20120809.markdown
  A data/news/en/20120916.markdown
  A data/news/en/20121002.markdown
  A data/news/en/20121017.markdown
  A data/news/en/20121021.markdown
  A data/news/en/20121025.markdown
  A data/news/en/20121130.markdown
  A data/news/en/20121222.markdown
  A data/news/en/20130102.markdown
  A data/news/en/20130328.markdown
  A data/news/en/20130412.markdown
  A data/news/en/20130420.markdown
  A data/news/en/20130421.markdown
  A data/news/en/20130531a.markdown
  A data/news/en/20130531b.markdown
  A data/news/en/20131011.markdown
  A data/news/en/20131105.markdown
  A data/news/en/20131202.markdown
  A data/news/en/20131227.markdown
  A data/news/en/20140112.markdown
  A data/news/en/20140118.markdown
  A data/news/en/20140225.markdown
  A data/news/en/20140305.markdown
  A data/news/en/20140401.markdown
  A data/news/en/20140401b.markdown
  A data/news/en/20140423.markdown
  A data/news/en/20140519.markdown
  A data/news/en/20140607.markdown
  A data/news/en/20140616.markdown
  A data/news/en/20140721.markdown
  A data/news/en/20140810.markdown
  A data/news/en/20140918.markdown
  A data/news/en/20150111.markdown
  A data/news/en/20150330.markdown
  A data/news/en/20150913.markdown
  A data/news/en/20151111.markdown
  A data/news/en/20151122.markdown
  A data/news/en/20151206.markdown
  A data/news/en/20160119.markdown
  A data/news/en/20160123.markdown
  A data/news/en/20160201.markdown
  A data/news/en/20160301.markdown
  A data/news/en/20160304.markdown
  A data/news/en/20160327.markdown
  A data/news/en/20160401.markdown
  A data/news/en/20160425.markdown
  A data/news/en/20160502.markdown
  A data/news/en/20160525.markdown
  A data/news/en/20160606.markdown
  A data/news/en/20160816.markdown
  A data/news/en/20160913.markdown
  A data/news/en/20160915.markdown
  A data/news/en/20161017.markdown
  A data/news/en/20161127.markdown
  A data/news/en/20161201.markdown
  A data/news/en/20170306.markdown
  A data/news/en/20170401.markdown
  A data/news/en/20170401a.markdown
  A data/news/en/20170428.markdown
  A data/news/en/20170505.markdown
  A data/news/en/20170617.markdown
  A data/news/en/20170702.markdown
  A data/news/en/20170731.markdown
  A data/news/en/20170801.markdown
  A data/news/en/20171010.markdown
  A data/news/en/20171122.markdown
  A data/news/en/20171217.markdown
  A data/news/en/20180214.markdown
  A data/news/en/20180331.markdown
  A data/news/en/20180423.markdown
  A data/news/en/20180501.markdown
  A data/news/en/20180612.markdown
  A data/news/en/20180629.markdown
  A data/news/en/20180701.markdown
  A data/news/en/20181023.markdown
  A data/news/en/20181024.markdown
  A data/news/en/20181118.markdown
  A data/news/en/20181210.markdown
  A data/news/en/20190306.markdown
  A data/news/en/20190413.markdown
  A data/news/en/20190513.markdown
  A data/news/en/20190603.markdown
  A data/news/en/20190608.markdown
  A data/news/en/20190616.markdown
  A data/news/en/20190630.markdown
  A data/news/en/20190728.markdown
  A data/news/en/20190904.markdown
  A data/news/en/20190912.markdown
  A data/news/en/20190913.markdown
  A data/news/en/20190917.markdown
  A data/news/en/20190919.markdown
  A data/news/en/20191013.markdown
  A data/news/en/20191217.markdown
  A data/news/en/20200131.markdown
  A data/news/en/20200222.markdown
  A data/news/en/20200331.markdown
  A data/news/en/20200430.markdown
  A data/news/en/20200504.markdown
  A data/news/en/20200514.markdown
  A data/news/en/20200521.markdown
  A data/news/en/20200524.markdown
  A data/news/en/20200622.markdown
  A data/news/en/20200817.markdown
  A data/news/en/20200820.markdown
  A data/news/en/20200823.markdown
  A data/news/en/20200825.markdown
  A data/news/en/20200830.markdown
  A data/news/en/20200906.markdown
  A data/news/en/20200927.markdown
  A data/news/es/.gitignore
  A data/news/fr/.gitignore
  A data/news/it/.gitignore
  A data/news/pt-BR/.gitignore
  A data/news/ru/.gitignore
  R data/localization/de_DE/news.json
  R data/localization/de_DE/strings.json
  R data/localization/el_GR/news.json
  R data/localization/el_GR/strings.json
  R data/localization/en_US/news.json
  R data/localization/en_US/strings.json
  R data/localization/es_ES/news.json
  R data/localization/es_ES/strings.json
  R data/localization/fr_FR/news.json
  R data/localization/fr_FR/strings.json
  R data/localization/he_IL/strings.json
  R data/localization/it_IT/news.json
  R data/localization/it_IT/strings.json
  R data/localization/pl_PL/strings.json
  R data/localization/pt_BR/news.json
  R data/localization/pt_BR/strings.json
  R data/localization/pt_PT/strings.json
  R data/localization/ru_RU/news.json
  R data/localization/ru_RU/strings.json
  R data/news/de_DE/.gitignore
  R data/news/de_DE/20020308.png
  R data/news/de_DE/20070401_1.png
  R data/news/de_DE/20070401_2.png
  R data/news/de_DE/20100401_2.jpg
  R data/news/de_DE/20120401_3.png
  R data/news/de_DE/20120401_4.png
  R data/news/de_DE/20140401_1.png
  R data/news/de_DE/20140401_2.png
  R data/news/de_DE/20140401_3.png
  R data/news/de_DE/20140401_4.png
  R data/news/de_DE/20140401_5.png
  R data/news/de_DE/20140401_6.png
  R data/news/de_DE/20140401_7.png
  R data/news/de_DE/20140401_8.png
  R data/news/el_GR/.gitignore
  R data/news/en_US/20011122.markdown
  R data/news/en_US/20020113.markdown
  R data/news/en_US/20020121.markdown
  R data/news/en_US/20020203.markdown
  R data/news/en_US/20020214.markdown
  R data/news/en_US/20020220.markdown
  R data/news/en_US/20020308.markdown
  R data/news/en_US/20020320.markdown
  R data/news/en_US/20020404.markdown
  R data/news/en_US/20020406.markdown
  R data/news/en_US/20020409.markdown
  R data/news/en_US/20020414.markdown
  R data/news/en_US/20020501.markdown
  R data/news/en_US/20020511.markdown
  R data/news/en_US/20020514.markdown
  R data/news/en_US/20020527.markdown
  R data/news/en_US/20020616.markdown
  R data/news/en_US/20020625.markdown
  R data/news/en_US/20020701.markdown
  R data/news/en_US/20020812.markdown
  R data/news/en_US/20020829.markdown
  R data/news/en_US/20020915.markdown
  R data/news/en_US/20021004.markdown
  R data/news/en_US/20021017.markdown
  R data/news/en_US/20021105.markdown
  R data/news/en_US/20021108.markdown
  R data/news/en_US/20021207.markdown
  R data/news/en_US/20021214.markdown
  R data/news/en_US/20021227.markdown
  R data/news/en_US/20021230.markdown
  R data/news/en_US/20030104.markdown
  R data/news/en_US/20030106.markdown
  R data/news/en_US/20030114.markdown
  R data/news/en_US/20030128.markdown
  R data/news/en_US/20030308.markdown
  R data/news/en_US/20030318.markdown
  R data/news/en_US/20030424.markdown
  R data/news/en_US/20030512.markdown
  R data/news/en_US/20030525.markdown
  R data/news/en_US/20030711.markdown
  R data/news/en_US/20030802.markdown
  R data/news/en_US/20030803.markdown
  R data/news/en_US/20030808.markdown
  R data/news/en_US/20030909.markdown
  R data/news/en_US/20031212.markdown
  R data/news/en_US/20031225.markdown
  R data/news/en_US/20040117.markdown
  R data/news/en_US/20040118.markdown
  R data/news/en_US/20040130.markdown
  R data/news/en_US/20040219.markdown
  R data/news/en_US/20040309.markdown
  R data/news/en_US/20040315.markdown
  R data/news/en_US/20040316.markdown
  R data/news/en_US/20040318.markdown
  R data/news/en_US/20040401.markdown
  R data/news/en_US/20040402.markdown
  R data/news/en_US/20040510.markdown
  R data/news/en_US/20040727.markdown
  R data/news/en_US/20040728.markdown
  R data/news/en_US/20040805.markdown
  R data/news/en_US/20040911.markdown
  R data/news/en_US/20040930.markdown
  R data/news/en_US/20041011.markdown
  R data/news/en_US/20041019.markdown
  R data/news/en_US/20041022.markdown
  R data/news/en_US/20041028.markdown
  R data/news/en_US/20041205.markdown
  R data/news/en_US/20041206.markdown
  R data/news/en_US/20041217.markdown
  R data/news/en_US/20041223.markdown
  R data/news/en_US/20041224.markdown
  R data/news/en_US/20050101.markdown
  R data/news/en_US/20050309.markdown
  R data/news/en_US/20050313.markdown
  R data/news/en_US/20050328.markdown
  R data/news/en_US/20050330.markdown
  R data/news/en_US/20050401.markdown
  R data/news/en_US/20050511.markdown
  R data/news/en_US/20050804.markdown
  R data/news/en_US/20050830.markdown
  R data/news/en_US/20050909.markdown
  R data/news/en_US/20051011.markdown
  R data/news/en_US/20051030.markdown
  R data/news/en_US/20051101.markdown
  R data/news/en_US/20051109.markdown
  R data/news/en_US/20051113.markdown
  R data/news/en_US/20051114.markdown
  R data/news/en_US/20051202.markdown
  R data/news/en_US/20051205.markdown
  R data/news/en_US/20060109.markdown
  R data/news/en_US/20060114.markdown
  R data/news/en_US/20060131.markdown
  R data/news/en_US/20060208.markdown
  R data/news/en_US/20060212.markdown
  R data/news/en_US/20060314.markdown
  R data/news/en_US/20060319.markdown
  R data/news/en_US/20060409.markdown
  R data/news/en_US/20060425.markdown
  R data/news/en_US/20060513.markdown
  R data/news/en_US/20060524.markdown
  R data/news/en_US/20060527.markdown
  R data/news/en_US/20060625.markdown
  R data/news/en_US/20060704.markdown
  R data/news/en_US/20060830.markdown
  R data/news/en_US/20061029.markdown
  R data/news/en_US/20061114.markdown
  R data/news/en_US/20061117.markdown
  R data/news/en_US/20061215.markdown
  R data/news/en_US/20061218.markdown
  R data/news/en_US/20061219.markdown
  R data/news/en_US/20070103.markdown
  R data/news/en_US/20070105.markdown
  R data/news/en_US/20070130.markdown
  R data/news/en_US/20070210.markdown
  R data/news/en_US/20070216.markdown
  R data/news/en_US/20070307.markdown
  R data/news/en_US/20070315.markdown
  R data/news/en_US/20070401.markdown
  R data/news/en_US/20070412.markdown
  R data/news/en_US/20070422.markdown
  R data/news/en_US/20070519.markdown
  R data/news/en_US/20070520.markdown
  R data/news/en_US/20070606.markdown
  R data/news/en_US/20070620.markdown
  R data/news/en_US/20070703.markdown
  R data/news/en_US/20070722.markdown
  R data/news/en_US/20070731.markdown
  R data/news/en_US/20070805.markdown
  R data/news/en_US/20070916.markdown
  R data/news/en_US/20071012.markdown
  R data/news/en_US/20071127.markdown
  R data/news/en_US/20071130.markdown
  R data/news/en_US/20071202.markdown
  R data/news/en_US/20071206.markdown
  R data/news/en_US/20071228.markdown
  R data/news/en_US/20080115.markdown
  R data/news/en_US/20080229.markdown
  R data/news/en_US/20080302.markdown
  R data/news/en_US/20080321.markdown
  R data/news/en_US/20080331.markdown
  R data/news/en_US/20080401.markdown
  R data/news/en_US/20080511.markdown
  R data/news/en_US/20080522.markdown
  R data/news/en_US/20080526.markdown
  R data/news/en_US/20080622.markdown
  R data/news/en_US/20080703.markdown
  R data/news/en_US/20080721.markdown
  R data/news/en_US/20080831.markdown
  R data/news/en_US/20080906.markdown
  R data/news/en_US/20080914.markdown
  R data/news/en_US/20081201.markdown
  R data/news/en_US/20081214.markdown
  R data/news/en_US/20081216.markdown
  R data/news/en_US/20090104.markdown
  R data/news/en_US/20090114.markdown
  R data/news/en_US/20090117.markdown
  R data/news/en_US/20090122.markdown
  R data/news/en_US/20090215.markdown
  R data/news/en_US/20090228.markdown
  R data/news/en_US/20090307.markdown
  R data/news/en_US/20090318.markdown
  R data/news/en_US/20090421.markdown
  R data/news/en_US/20090423.markdown
  R data/news/en_US/20090427.markdown
  R data/news/en_US/20090514.markdown
  R data/news/en_US/20090517.markdown
  R data/news/en_US/20090523.markdown
  R data/news/en_US/20090607.markdown
  R data/news/en_US/20090616.markdown
  R data/news/en_US/20090623.markdown
  R data/news/en_US/20090630.markdown
  R data/news/en_US/20090702.markdown
  R data/news/en_US/20090709.markdown
  R data/news/en_US/20090710a.markdown
  R data/news/en_US/20090710b.markdown
  R data/news/en_US/20090724.markdown
  R data/news/en_US/20090802.markdown
  R data/news/en_US/20090821.markdown
  R data/news/en_US/20090831.markdown
  R data/news/en_US/20090920.markdown
  R data/news/en_US/20091030.markdown
  R data/news/en_US/20091115.markdown
  R data/news/en_US/20091221.markdown
  R data/news/en_US/20091222.markdown
  R data/news/en_US/20100109.markdown
  R data/news/en_US/20100222.markdown
  R data/news/en_US/20100318.markdown
  R data/news/en_US/20100401.markdown
  R data/news/en_US/20100404.markdown
  R data/news/en_US/20100428.markdown
  R data/news/en_US/20100502.markdown
  R data/news/en_US/20100725.markdown
  R data/news/en_US/20100828.markdown
  R data/news/en_US/20100912.markdown
  R data/news/en_US/20101015.markdown
  R data/news/en_US/20101219.markdown
  R data/news/en_US/20110123.markdown
  R data/news/en_US/20110203.markdown
  R data/news/en_US/20110212.markdown
  R data/news/en_US/20110318.markdown
  R data/news/en_US/20110328.markdown
  R data/news/en_US/20110401.markdown
  R data/news/en_US/20110416.markdown
  R data/news/en_US/20110422.markdown
  R data/news/en_US/20110528.markdown
  R data/news/en_US/20110602.markdown
  R data/news/en_US/20110712.markdown
  R data/news/en_US/20110804.markdown
  R data/news/en_US/20111003.markdown
  R data/news/en_US/20111106.markdown
  R data/news/en_US/20111111.markdown
  R data/news/en_US/20111121.markdown
  R data/news/en_US/20111126.markdown
  R data/news/en_US/20111210.markdown
  R data/news/en_US/20111219.markdown
  R data/news/en_US/20120127.markdown
  R data/news/en_US/20120316.markdown
  R data/news/en_US/20120328.markdown
  R data/news/en_US/20120401.markdown
  R data/news/en_US/20120401b.markdown
  R data/news/en_US/20120424.markdown
  R data/news/en_US/20120502.markdown
  R data/news/en_US/20120609.markdown
  R data/news/en_US/20120616.markdown
  R data/news/en_US/20120629.markdown
  R data/news/en_US/20120727.markdown
  R data/news/en_US/20120809.markdown
  R data/news/en_US/20120916.markdown
  R data/news/en_US/20121002.markdown
  R data/news/en_US/20121017.markdown
  R data/news/en_US/20121021.markdown
  R data/news/en_US/20121025.markdown
  R data/news/en_US/20121130.markdown
  R data/news/en_US/20121222.markdown
  R data/news/en_US/20130102.markdown
  R data/news/en_US/20130328.markdown
  R data/news/en_US/20130412.markdown
  R data/news/en_US/20130420.markdown
  R data/news/en_US/20130421.markdown
  R data/news/en_US/20130531a.markdown
  R data/news/en_US/20130531b.markdown
  R data/news/en_US/20131011.markdown
  R data/news/en_US/20131105.markdown
  R data/news/en_US/20131202.markdown
  R data/news/en_US/20131227.markdown
  R data/news/en_US/20140112.markdown
  R data/news/en_US/20140118.markdown
  R data/news/en_US/20140225.markdown
  R data/news/en_US/20140305.markdown
  R data/news/en_US/20140401.markdown
  R data/news/en_US/20140401b.markdown
  R data/news/en_US/20140423.markdown
  R data/news/en_US/20140519.markdown
  R data/news/en_US/20140607.markdown
  R data/news/en_US/20140616.markdown
  R data/news/en_US/20140721.markdown
  R data/news/en_US/20140810.markdown
  R data/news/en_US/20140918.markdown
  R data/news/en_US/20150111.markdown
  R data/news/en_US/20150330.markdown
  R data/news/en_US/20150913.markdown
  R data/news/en_US/20151111.markdown
  R data/news/en_US/20151122.markdown
  R data/news/en_US/20151206.markdown
  R data/news/en_US/20160119.markdown
  R data/news/en_US/20160123.markdown
  R data/news/en_US/20160201.markdown
  R data/news/en_US/20160301.markdown
  R data/news/en_US/20160304.markdown
  R data/news/en_US/20160327.markdown
  R data/news/en_US/20160401.markdown
  R data/news/en_US/20160425.markdown
  R data/news/en_US/20160502.markdown
  R data/news/en_US/20160525.markdown
  R data/news/en_US/20160606.markdown
  R data/news/en_US/20160816.markdown
  R data/news/en_US/20160913.markdown
  R data/news/en_US/20160915.markdown
  R data/news/en_US/20161017.markdown
  R data/news/en_US/20161127.markdown
  R data/news/en_US/20161201.markdown
  R data/news/en_US/20170306.markdown
  R data/news/en_US/20170401.markdown
  R data/news/en_US/20170401a.markdown
  R data/news/en_US/20170428.markdown
  R data/news/en_US/20170505.markdown
  R data/news/en_US/20170617.markdown
  R data/news/en_US/20170702.markdown
  R data/news/en_US/20170731.markdown
  R data/news/en_US/20170801.markdown
  R data/news/en_US/20171010.markdown
  R data/news/en_US/20171122.markdown
  R data/news/en_US/20171217.markdown
  R data/news/en_US/20180214.markdown
  R data/news/en_US/20180331.markdown
  R data/news/en_US/20180423.markdown
  R data/news/en_US/20180501.markdown
  R data/news/en_US/20180612.markdown
  R data/news/en_US/20180629.markdown
  R data/news/en_US/20180701.markdown
  R data/news/en_US/20181023.markdown
  R data/news/en_US/20181024.markdown
  R data/news/en_US/20181118.markdown
  R data/news/en_US/20181210.markdown
  R data/news/en_US/20190306.markdown
  R data/news/en_US/20190413.markdown
  R data/news/en_US/20190513.markdown
  R data/news/en_US/20190603.markdown
  R data/news/en_US/20190608.markdown
  R data/news/en_US/20190616.markdown
  R data/news/en_US/20190630.markdown
  R data/news/en_US/20190728.markdown
  R data/news/en_US/20190904.markdown
  R data/news/en_US/20190912.markdown
  R data/news/en_US/20190913.markdown
  R data/news/en_US/20190917.markdown
  R data/news/en_US/20190919.markdown
  R data/news/en_US/20191013.markdown
  R data/news/en_US/20191217.markdown
  R data/news/en_US/20200131.markdown
  R data/news/en_US/20200222.markdown
  R data/news/en_US/20200331.markdown
  R data/news/en_US/20200430.markdown
  R data/news/en_US/20200504.markdown
  R data/news/en_US/20200514.markdown
  R data/news/en_US/20200521.markdown
  R data/news/en_US/20200524.markdown
  R data/news/en_US/20200622.markdown
  R data/news/en_US/20200817.markdown
  R data/news/en_US/20200820.markdown
  R data/news/en_US/20200823.markdown
  R data/news/en_US/20200825.markdown
  R data/news/en_US/20200830.markdown
  R data/news/en_US/20200906.markdown
  R data/news/en_US/20200927.markdown
  R data/news/es_ES/.gitignore
  R data/news/fr_FR/.gitignore
  R data/news/it_IT/.gitignore
  R data/news/pt_BR/.gitignore
  R data/news/ru_RU/.gitignore


diff --git a/data/localization/de_DE/news.json b/data/localization/de/news.json
similarity index 100%
rename from data/localization/de_DE/news.json
rename to data/localization/de/news.json
diff --git a/data/localization/de_DE/strings.json b/data/localization/de/strings.json
similarity index 100%
rename from data/localization/de_DE/strings.json
rename to data/localization/de/strings.json
diff --git a/data/localization/el_GR/news.json b/data/localization/el/news.json
similarity index 100%
rename from data/localization/el_GR/news.json
rename to data/localization/el/news.json
diff --git a/data/localization/el_GR/strings.json b/data/localization/el/strings.json
similarity index 100%
rename from data/localization/el_GR/strings.json
rename to data/localization/el/strings.json
diff --git a/data/localization/en_US/news.json b/data/localization/en/news.json
similarity index 100%
rename from data/localization/en_US/news.json
rename to data/localization/en/news.json
diff --git a/data/localization/en_US/strings.json b/data/localization/en/strings.json
similarity index 100%
rename from data/localization/en_US/strings.json
rename to data/localization/en/strings.json
diff --git a/data/localization/es_ES/news.json b/data/localization/es/news.json
similarity index 100%
rename from data/localization/es_ES/news.json
rename to data/localization/es/news.json
diff --git a/data/localization/es_ES/strings.json b/data/localization/es/strings.json
similarity index 100%
rename from data/localization/es_ES/strings.json
rename to data/localization/es/strings.json
diff --git a/data/localization/fr_FR/news.json b/data/localization/fr/news.json
similarity index 100%
rename from data/localization/fr_FR/news.json
rename to data/localization/fr/news.json
diff --git a/data/localization/fr_FR/strings.json b/data/localization/fr/strings.json
similarity index 100%
rename from data/localization/fr_FR/strings.json
rename to data/localization/fr/strings.json
diff --git a/data/localization/he_IL/strings.json b/data/localization/he/strings.json
similarity index 100%
rename from data/localization/he_IL/strings.json
rename to data/localization/he/strings.json
diff --git a/data/localization/it_IT/news.json b/data/localization/it/news.json
similarity index 100%
rename from data/localization/it_IT/news.json
rename to data/localization/it/news.json
diff --git a/data/localization/it_IT/strings.json b/data/localization/it/strings.json
similarity index 100%
rename from data/localization/it_IT/strings.json
rename to data/localization/it/strings.json
diff --git a/data/localization/pl_PL/strings.json b/data/localization/pl/strings.json
similarity index 100%
rename from data/localization/pl_PL/strings.json
rename to data/localization/pl/strings.json
diff --git a/data/localization/pt_BR/news.json b/data/localization/pt-BR/news.json
similarity index 100%
rename from data/localization/pt_BR/news.json
rename to data/localization/pt-BR/news.json
diff --git a/data/localization/pt_BR/strings.json b/data/localization/pt-BR/strings.json
similarity index 100%
rename from data/localization/pt_BR/strings.json
rename to data/localization/pt-BR/strings.json
diff --git a/data/localization/pt_PT/strings.json b/data/localization/pt-PT/strings.json
similarity index 100%
rename from data/localization/pt_PT/strings.json
rename to data/localization/pt-PT/strings.json
diff --git a/data/localization/ru_RU/news.json b/data/localization/ru/news.json
similarity index 100%
rename from data/localization/ru_RU/news.json
rename to data/localization/ru/news.json
diff --git a/data/localization/ru_RU/strings.json b/data/localization/ru/strings.json
similarity index 100%
rename from data/localization/ru_RU/strings.json
rename to data/localization/ru/strings.json
diff --git a/data/news/de_DE/.gitignore b/data/news/de/.gitignore
similarity index 100%
rename from data/news/de_DE/.gitignore
rename to data/news/de/.gitignore
diff --git a/data/news/de_DE/20020308.png b/data/news/de/20020308.png
similarity index 100%
rename from data/news/de_DE/20020308.png
rename to data/news/de/20020308.png
diff --git a/data/news/de_DE/20070401_1.png b/data/news/de/20070401_1.png
similarity index 100%
rename from data/news/de_DE/20070401_1.png
rename to data/news/de/20070401_1.png
diff --git a/data/news/de_DE/20070401_2.png b/data/news/de/20070401_2.png
similarity index 100%
rename from data/news/de_DE/20070401_2.png
rename to data/news/de/20070401_2.png
diff --git a/data/news/de_DE/20100401_2.jpg b/data/news/de/20100401_2.jpg
similarity index 100%
rename from data/news/de_DE/20100401_2.jpg
rename to data/news/de/20100401_2.jpg
diff --git a/data/news/de_DE/20120401_3.png b/data/news/de/20120401_3.png
similarity index 100%
rename from data/news/de_DE/20120401_3.png
rename to data/news/de/20120401_3.png
diff --git a/data/news/de_DE/20120401_4.png b/data/news/de/20120401_4.png
similarity index 100%
rename from data/news/de_DE/20120401_4.png
rename to data/news/de/20120401_4.png
diff --git a/data/news/de_DE/20140401_1.png b/data/news/de/20140401_1.png
similarity index 100%
rename from data/news/de_DE/20140401_1.png
rename to data/news/de/20140401_1.png
diff --git a/data/news/de_DE/20140401_2.png b/data/news/de/20140401_2.png
similarity index 100%
rename from data/news/de_DE/20140401_2.png
rename to data/news/de/20140401_2.png
diff --git a/data/news/de_DE/20140401_3.png b/data/news/de/20140401_3.png
similarity index 100%
rename from data/news/de_DE/20140401_3.png
rename to data/news/de/20140401_3.png
diff --git a/data/news/de_DE/20140401_4.png b/data/news/de/20140401_4.png
similarity index 100%
rename from data/news/de_DE/20140401_4.png
rename to data/news/de/20140401_4.png
diff --git a/data/news/de_DE/20140401_5.png b/data/news/de/20140401_5.png
similarity index 100%
rename from data/news/de_DE/20140401_5.png
rename to data/news/de/20140401_5.png
diff --git a/data/news/de_DE/20140401_6.png b/data/news/de/20140401_6.png
similarity index 100%
rename from data/news/de_DE/20140401_6.png
rename to data/news/de/20140401_6.png
diff --git a/data/news/de_DE/20140401_7.png b/data/news/de/20140401_7.png
similarity index 100%
rename from data/news/de_DE/20140401_7.png
rename to data/news/de/20140401_7.png
diff --git a/data/news/de_DE/20140401_8.png b/data/news/de/20140401_8.png
similarity index 100%
rename from data/news/de_DE/20140401_8.png
rename to data/news/de/20140401_8.png
diff --git a/data/news/el_GR/.gitignore b/data/news/el/.gitignore
similarity index 100%
rename from data/news/el_GR/.gitignore
rename to data/news/el/.gitignore
diff --git a/data/news/en_US/20011122.markdown b/data/news/en/20011122.markdown
similarity index 100%
rename from data/news/en_US/20011122.markdown
rename to data/news/en/20011122.markdown
diff --git a/data/news/en_US/20020113.markdown b/data/news/en/20020113.markdown
similarity index 100%
rename from data/news/en_US/20020113.markdown
rename to data/news/en/20020113.markdown
diff --git a/data/news/en_US/20020121.markdown b/data/news/en/20020121.markdown
similarity index 100%
rename from data/news/en_US/20020121.markdown
rename to data/news/en/20020121.markdown
diff --git a/data/news/en_US/20020203.markdown b/data/news/en/20020203.markdown
similarity index 100%
rename from data/news/en_US/20020203.markdown
rename to data/news/en/20020203.markdown
diff --git a/data/news/en_US/20020214.markdown b/data/news/en/20020214.markdown
similarity index 100%
rename from data/news/en_US/20020214.markdown
rename to data/news/en/20020214.markdown
diff --git a/data/news/en_US/20020220.markdown b/data/news/en/20020220.markdown
similarity index 100%
rename from data/news/en_US/20020220.markdown
rename to data/news/en/20020220.markdown
diff --git a/data/news/en_US/20020308.markdown b/data/news/en/20020308.markdown
similarity index 100%
rename from data/news/en_US/20020308.markdown
rename to data/news/en/20020308.markdown
diff --git a/data/news/en_US/20020320.markdown b/data/news/en/20020320.markdown
similarity index 100%
rename from data/news/en_US/20020320.markdown
rename to data/news/en/20020320.markdown
diff --git a/data/news/en_US/20020404.markdown b/data/news/en/20020404.markdown
similarity index 100%
rename from data/news/en_US/20020404.markdown
rename to data/news/en/20020404.markdown
diff --git a/data/news/en_US/20020406.markdown b/data/news/en/20020406.markdown
similarity index 100%
rename from data/news/en_US/20020406.markdown
rename to data/news/en/20020406.markdown
diff --git a/data/news/en_US/20020409.markdown b/data/news/en/20020409.markdown
similarity index 100%
rename from data/news/en_US/20020409.markdown
rename to data/news/en/20020409.markdown
diff --git a/data/news/en_US/20020414.markdown b/data/news/en/20020414.markdown
similarity index 100%
rename from data/news/en_US/20020414.markdown
rename to data/news/en/20020414.markdown
diff --git a/data/news/en_US/20020501.markdown b/data/news/en/20020501.markdown
similarity index 100%
rename from data/news/en_US/20020501.markdown
rename to data/news/en/20020501.markdown
diff --git a/data/news/en_US/20020511.markdown b/data/news/en/20020511.markdown
similarity index 100%
rename from data/news/en_US/20020511.markdown
rename to data/news/en/20020511.markdown
diff --git a/data/news/en_US/20020514.markdown b/data/news/en/20020514.markdown
similarity index 100%
rename from data/news/en_US/20020514.markdown
rename to data/news/en/20020514.markdown
diff --git a/data/news/en_US/20020527.markdown b/data/news/en/20020527.markdown
similarity index 100%
rename from data/news/en_US/20020527.markdown
rename to data/news/en/20020527.markdown
diff --git a/data/news/en_US/20020616.markdown b/data/news/en/20020616.markdown
similarity index 100%
rename from data/news/en_US/20020616.markdown
rename to data/news/en/20020616.markdown
diff --git a/data/news/en_US/20020625.markdown b/data/news/en/20020625.markdown
similarity index 100%
rename from data/news/en_US/20020625.markdown
rename to data/news/en/20020625.markdown
diff --git a/data/news/en_US/20020701.markdown b/data/news/en/20020701.markdown
similarity index 100%
rename from data/news/en_US/20020701.markdown
rename to data/news/en/20020701.markdown
diff --git a/data/news/en_US/20020812.markdown b/data/news/en/20020812.markdown
similarity index 100%
rename from data/news/en_US/20020812.markdown
rename to data/news/en/20020812.markdown
diff --git a/data/news/en_US/20020829.markdown b/data/news/en/20020829.markdown
similarity index 100%
rename from data/news/en_US/20020829.markdown
rename to data/news/en/20020829.markdown
diff --git a/data/news/en_US/20020915.markdown b/data/news/en/20020915.markdown
similarity index 100%
rename from data/news/en_US/20020915.markdown
rename to data/news/en/20020915.markdown
diff --git a/data/news/en_US/20021004.markdown b/data/news/en/20021004.markdown
similarity index 100%
rename from data/news/en_US/20021004.markdown
rename to data/news/en/20021004.markdown
diff --git a/data/news/en_US/20021017.markdown b/data/news/en/20021017.markdown
similarity index 100%
rename from data/news/en_US/20021017.markdown
rename to data/news/en/20021017.markdown
diff --git a/data/news/en_US/20021105.markdown b/data/news/en/20021105.markdown
similarity index 100%
rename from data/news/en_US/20021105.markdown
rename to data/news/en/20021105.markdown
diff --git a/data/news/en_US/20021108.markdown b/data/news/en/20021108.markdown
similarity index 100%
rename from data/news/en_US/20021108.markdown
rename to data/news/en/20021108.markdown
diff --git a/data/news/en_US/20021207.markdown b/data/news/en/20021207.markdown
similarity index 100%
rename from data/news/en_US/20021207.markdown
rename to data/news/en/20021207.markdown
diff --git a/data/news/en_US/20021214.markdown b/data/news/en/20021214.markdown
similarity index 100%
rename from data/news/en_US/20021214.markdown
rename to data/news/en/20021214.markdown
diff --git a/data/news/en_US/20021227.markdown b/data/news/en/20021227.markdown
similarity index 100%
rename from data/news/en_US/20021227.markdown
rename to data/news/en/20021227.markdown
diff --git a/data/news/en_US/20021230.markdown b/data/news/en/20021230.markdown
similarity index 100%
rename from data/news/en_US/20021230.markdown
rename to data/news/en/20021230.markdown
diff --git a/data/news/en_US/20030104.markdown b/data/news/en/20030104.markdown
similarity index 100%
rename from data/news/en_US/20030104.markdown
rename to data/news/en/20030104.markdown
diff --git a/data/news/en_US/20030106.markdown b/data/news/en/20030106.markdown
similarity index 100%
rename from data/news/en_US/20030106.markdown
rename to data/news/en/20030106.markdown
diff --git a/data/news/en_US/20030114.markdown b/data/news/en/20030114.markdown
similarity index 100%
rename from data/news/en_US/20030114.markdown
rename to data/news/en/20030114.markdown
diff --git a/data/news/en_US/20030128.markdown b/data/news/en/20030128.markdown
similarity index 100%
rename from data/news/en_US/20030128.markdown
rename to data/news/en/20030128.markdown
diff --git a/data/news/en_US/20030308.markdown b/data/news/en/20030308.markdown
similarity index 100%
rename from data/news/en_US/20030308.markdown
rename to data/news/en/20030308.markdown
diff --git a/data/news/en_US/20030318.markdown b/data/news/en/20030318.markdown
similarity index 100%
rename from data/news/en_US/20030318.markdown
rename to data/news/en/20030318.markdown
diff --git a/data/news/en_US/20030424.markdown b/data/news/en/20030424.markdown
similarity index 100%
rename from data/news/en_US/20030424.markdown
rename to data/news/en/20030424.markdown
diff --git a/data/news/en_US/20030512.markdown b/data/news/en/20030512.markdown
similarity index 100%
rename from data/news/en_US/20030512.markdown
rename to data/news/en/20030512.markdown
diff --git a/data/news/en_US/20030525.markdown b/data/news/en/20030525.markdown
similarity index 100%
rename from data/news/en_US/20030525.markdown
rename to data/news/en/20030525.markdown
diff --git a/data/news/en_US/20030711.markdown b/data/news/en/20030711.markdown
similarity index 100%
rename from data/news/en_US/20030711.markdown
rename to data/news/en/20030711.markdown
diff --git a/data/news/en_US/20030802.markdown b/data/news/en/20030802.markdown
similarity index 100%
rename from data/news/en_US/20030802.markdown
rename to data/news/en/20030802.markdown
diff --git a/data/news/en_US/20030803.markdown b/data/news/en/20030803.markdown
similarity index 100%
rename from data/news/en_US/20030803.markdown
rename to data/news/en/20030803.markdown
diff --git a/data/news/en_US/20030808.markdown b/data/news/en/20030808.markdown
similarity index 100%
rename from data/news/en_US/20030808.markdown
rename to data/news/en/20030808.markdown
diff --git a/data/news/en_US/20030909.markdown b/data/news/en/20030909.markdown
similarity index 100%
rename from data/news/en_US/20030909.markdown
rename to data/news/en/20030909.markdown
diff --git a/data/news/en_US/20031212.markdown b/data/news/en/20031212.markdown
similarity index 100%
rename from data/news/en_US/20031212.markdown
rename to data/news/en/20031212.markdown
diff --git a/data/news/en_US/20031225.markdown b/data/news/en/20031225.markdown
similarity index 100%
rename from data/news/en_US/20031225.markdown
rename to data/news/en/20031225.markdown
diff --git a/data/news/en_US/20040117.markdown b/data/news/en/20040117.markdown
similarity index 100%
rename from data/news/en_US/20040117.markdown
rename to data/news/en/20040117.markdown
diff --git a/data/news/en_US/20040118.markdown b/data/news/en/20040118.markdown
similarity index 100%
rename from data/news/en_US/20040118.markdown
rename to data/news/en/20040118.markdown
diff --git a/data/news/en_US/20040130.markdown b/data/news/en/20040130.markdown
similarity index 100%
rename from data/news/en_US/20040130.markdown
rename to data/news/en/20040130.markdown
diff --git a/data/news/en_US/20040219.markdown b/data/news/en/20040219.markdown
similarity index 100%
rename from data/news/en_US/20040219.markdown
rename to data/news/en/20040219.markdown
diff --git a/data/news/en_US/20040309.markdown b/data/news/en/20040309.markdown
similarity index 100%
rename from data/news/en_US/20040309.markdown
rename to data/news/en/20040309.markdown
diff --git a/data/news/en_US/20040315.markdown b/data/news/en/20040315.markdown
similarity index 100%
rename from data/news/en_US/20040315.markdown
rename to data/news/en/20040315.markdown
diff --git a/data/news/en_US/20040316.markdown b/data/news/en/20040316.markdown
similarity index 100%
rename from data/news/en_US/20040316.markdown
rename to data/news/en/20040316.markdown
diff --git a/data/news/en_US/20040318.markdown b/data/news/en/20040318.markdown
similarity index 100%
rename from data/news/en_US/20040318.markdown
rename to data/news/en/20040318.markdown
diff --git a/data/news/en_US/20040401.markdown b/data/news/en/20040401.markdown
similarity index 100%
rename from data/news/en_US/20040401.markdown
rename to data/news/en/20040401.markdown
diff --git a/data/news/en_US/20040402.markdown b/data/news/en/20040402.markdown
similarity index 100%
rename from data/news/en_US/20040402.markdown
rename to data/news/en/20040402.markdown
diff --git a/data/news/en_US/20040510.markdown b/data/news/en/20040510.markdown
similarity index 100%
rename from data/news/en_US/20040510.markdown
rename to data/news/en/20040510.markdown
diff --git a/data/news/en_US/20040727.markdown b/data/news/en/20040727.markdown
similarity index 100%
rename from data/news/en_US/20040727.markdown
rename to data/news/en/20040727.markdown
diff --git a/data/news/en_US/20040728.markdown b/data/news/en/20040728.markdown
similarity index 100%
rename from data/news/en_US/20040728.markdown
rename to data/news/en/20040728.markdown
diff --git a/data/news/en_US/20040805.markdown b/data/news/en/20040805.markdown
similarity index 100%
rename from data/news/en_US/20040805.markdown
rename to data/news/en/20040805.markdown
diff --git a/data/news/en_US/20040911.markdown b/data/news/en/20040911.markdown
similarity index 100%
rename from data/news/en_US/20040911.markdown
rename to data/news/en/20040911.markdown
diff --git a/data/news/en_US/20040930.markdown b/data/news/en/20040930.markdown
similarity index 100%
rename from data/news/en_US/20040930.markdown
rename to data/news/en/20040930.markdown
diff --git a/data/news/en_US/20041011.markdown b/data/news/en/20041011.markdown
similarity index 100%
rename from data/news/en_US/20041011.markdown
rename to data/news/en/20041011.markdown
diff --git a/data/news/en_US/20041019.markdown b/data/news/en/20041019.markdown
similarity index 100%
rename from data/news/en_US/20041019.markdown
rename to data/news/en/20041019.markdown
diff --git a/data/news/en_US/20041022.markdown b/data/news/en/20041022.markdown
similarity index 100%
rename from data/news/en_US/20041022.markdown
rename to data/news/en/20041022.markdown
diff --git a/data/news/en_US/20041028.markdown b/data/news/en/20041028.markdown
similarity index 100%
rename from data/news/en_US/20041028.markdown
rename to data/news/en/20041028.markdown
diff --git a/data/news/en_US/20041205.markdown b/data/news/en/20041205.markdown
similarity index 100%
rename from data/news/en_US/20041205.markdown
rename to data/news/en/20041205.markdown
diff --git a/data/news/en_US/20041206.markdown b/data/news/en/20041206.markdown
similarity index 100%
rename from data/news/en_US/20041206.markdown
rename to data/news/en/20041206.markdown
diff --git a/data/news/en_US/20041217.markdown b/data/news/en/20041217.markdown
similarity index 100%
rename from data/news/en_US/20041217.markdown
rename to data/news/en/20041217.markdown
diff --git a/data/news/en_US/20041223.markdown b/data/news/en/20041223.markdown
similarity index 100%
rename from data/news/en_US/20041223.markdown
rename to data/news/en/20041223.markdown
diff --git a/data/news/en_US/20041224.markdown b/data/news/en/20041224.markdown
similarity index 100%
rename from data/news/en_US/20041224.markdown
rename to data/news/en/20041224.markdown
diff --git a/data/news/en_US/20050101.markdown b/data/news/en/20050101.markdown
similarity index 100%
rename from data/news/en_US/20050101.markdown
rename to data/news/en/20050101.markdown
diff --git a/data/news/en_US/20050309.markdown b/data/news/en/20050309.markdown
similarity index 100%
rename from data/news/en_US/20050309.markdown
rename to data/news/en/20050309.markdown
diff --git a/data/news/en_US/20050313.markdown b/data/news/en/20050313.markdown
similarity index 100%
rename from data/news/en_US/20050313.markdown
rename to data/news/en/20050313.markdown
diff --git a/data/news/en_US/20050328.markdown b/data/news/en/20050328.markdown
similarity index 100%
rename from data/news/en_US/20050328.markdown
rename to data/news/en/20050328.markdown
diff --git a/data/news/en_US/20050330.markdown b/data/news/en/20050330.markdown
similarity index 100%
rename from data/news/en_US/20050330.markdown
rename to data/news/en/20050330.markdown
diff --git a/data/news/en_US/20050401.markdown b/data/news/en/20050401.markdown
similarity index 100%
rename from data/news/en_US/20050401.markdown
rename to data/news/en/20050401.markdown
diff --git a/data/news/en_US/20050511.markdown b/data/news/en/20050511.markdown
similarity index 100%
rename from data/news/en_US/20050511.markdown
rename to data/news/en/20050511.markdown
diff --git a/data/news/en_US/20050804.markdown b/data/news/en/20050804.markdown
similarity index 100%
rename from data/news/en_US/20050804.markdown
rename to data/news/en/20050804.markdown
diff --git a/data/news/en_US/20050830.markdown b/data/news/en/20050830.markdown
similarity index 100%
rename from data/news/en_US/20050830.markdown
rename to data/news/en/20050830.markdown
diff --git a/data/news/en_US/20050909.markdown b/data/news/en/20050909.markdown
similarity index 100%
rename from data/news/en_US/20050909.markdown
rename to data/news/en/20050909.markdown
diff --git a/data/news/en_US/20051011.markdown b/data/news/en/20051011.markdown
similarity index 100%
rename from data/news/en_US/20051011.markdown
rename to data/news/en/20051011.markdown
diff --git a/data/news/en_US/20051030.markdown b/data/news/en/20051030.markdown
similarity index 100%
rename from data/news/en_US/20051030.markdown
rename to data/news/en/20051030.markdown
diff --git a/data/news/en_US/20051101.markdown b/data/news/en/20051101.markdown
similarity index 100%
rename from data/news/en_US/20051101.markdown
rename to data/news/en/20051101.markdown
diff --git a/data/news/en_US/20051109.markdown b/data/news/en/20051109.markdown
similarity index 100%
rename from data/news/en_US/20051109.markdown
rename to data/news/en/20051109.markdown
diff --git a/data/news/en_US/20051113.markdown b/data/news/en/20051113.markdown
similarity index 100%
rename from data/news/en_US/20051113.markdown
rename to data/news/en/20051113.markdown
diff --git a/data/news/en_US/20051114.markdown b/data/news/en/20051114.markdown
similarity index 100%
rename from data/news/en_US/20051114.markdown
rename to data/news/en/20051114.markdown
diff --git a/data/news/en_US/20051202.markdown b/data/news/en/20051202.markdown
similarity index 100%
rename from data/news/en_US/20051202.markdown
rename to data/news/en/20051202.markdown
diff --git a/data/news/en_US/20051205.markdown b/data/news/en/20051205.markdown
similarity index 100%
rename from data/news/en_US/20051205.markdown
rename to data/news/en/20051205.markdown
diff --git a/data/news/en_US/20060109.markdown b/data/news/en/20060109.markdown
similarity index 100%
rename from data/news/en_US/20060109.markdown
rename to data/news/en/20060109.markdown
diff --git a/data/news/en_US/20060114.markdown b/data/news/en/20060114.markdown
similarity index 100%
rename from data/news/en_US/20060114.markdown
rename to data/news/en/20060114.markdown
diff --git a/data/news/en_US/20060131.markdown b/data/news/en/20060131.markdown
similarity index 100%
rename from data/news/en_US/20060131.markdown
rename to data/news/en/20060131.markdown
diff --git a/data/news/en_US/20060208.markdown b/data/news/en/20060208.markdown
similarity index 100%
rename from data/news/en_US/20060208.markdown
rename to data/news/en/20060208.markdown
diff --git a/data/news/en_US/20060212.markdown b/data/news/en/20060212.markdown
similarity index 100%
rename from data/news/en_US/20060212.markdown
rename to data/news/en/20060212.markdown
diff --git a/data/news/en_US/20060314.markdown b/data/news/en/20060314.markdown
similarity index 100%
rename from data/news/en_US/20060314.markdown
rename to data/news/en/20060314.markdown
diff --git a/data/news/en_US/20060319.markdown b/data/news/en/20060319.markdown
similarity index 100%
rename from data/news/en_US/20060319.markdown
rename to data/news/en/20060319.markdown
diff --git a/data/news/en_US/20060409.markdown b/data/news/en/20060409.markdown
similarity index 100%
rename from data/news/en_US/20060409.markdown
rename to data/news/en/20060409.markdown
diff --git a/data/news/en_US/20060425.markdown b/data/news/en/20060425.markdown
similarity index 100%
rename from data/news/en_US/20060425.markdown
rename to data/news/en/20060425.markdown
diff --git a/data/news/en_US/20060513.markdown b/data/news/en/20060513.markdown
similarity index 100%
rename from data/news/en_US/20060513.markdown
rename to data/news/en/20060513.markdown
diff --git a/data/news/en_US/20060524.markdown b/data/news/en/20060524.markdown
similarity index 100%
rename from data/news/en_US/20060524.markdown
rename to data/news/en/20060524.markdown
diff --git a/data/news/en_US/20060527.markdown b/data/news/en/20060527.markdown
similarity index 100%
rename from data/news/en_US/20060527.markdown
rename to data/news/en/20060527.markdown
diff --git a/data/news/en_US/20060625.markdown b/data/news/en/20060625.markdown
similarity index 100%
rename from data/news/en_US/20060625.markdown
rename to data/news/en/20060625.markdown
diff --git a/data/news/en_US/20060704.markdown b/data/news/en/20060704.markdown
similarity index 100%
rename from data/news/en_US/20060704.markdown
rename to data/news/en/20060704.markdown
diff --git a/data/news/en_US/20060830.markdown b/data/news/en/20060830.markdown
similarity index 100%
rename from data/news/en_US/20060830.markdown
rename to data/news/en/20060830.markdown
diff --git a/data/news/en_US/20061029.markdown b/data/news/en/20061029.markdown
similarity index 100%
rename from data/news/en_US/20061029.markdown
rename to data/news/en/20061029.markdown
diff --git a/data/news/en_US/20061114.markdown b/data/news/en/20061114.markdown
similarity index 100%
rename from data/news/en_US/20061114.markdown
rename to data/news/en/20061114.markdown
diff --git a/data/news/en_US/20061117.markdown b/data/news/en/20061117.markdown
similarity index 100%
rename from data/news/en_US/20061117.markdown
rename to data/news/en/20061117.markdown
diff --git a/data/news/en_US/20061215.markdown b/data/news/en/20061215.markdown
similarity index 100%
rename from data/news/en_US/20061215.markdown
rename to data/news/en/20061215.markdown
diff --git a/data/news/en_US/20061218.markdown b/data/news/en/20061218.markdown
similarity index 100%
rename from data/news/en_US/20061218.markdown
rename to data/news/en/20061218.markdown
diff --git a/data/news/en_US/20061219.markdown b/data/news/en/20061219.markdown
similarity index 100%
rename from data/news/en_US/20061219.markdown
rename to data/news/en/20061219.markdown
diff --git a/data/news/en_US/20070103.markdown b/data/news/en/20070103.markdown
similarity index 100%
rename from data/news/en_US/20070103.markdown
rename to data/news/en/20070103.markdown
diff --git a/data/news/en_US/20070105.markdown b/data/news/en/20070105.markdown
similarity index 100%
rename from data/news/en_US/20070105.markdown
rename to data/news/en/20070105.markdown
diff --git a/data/news/en_US/20070130.markdown b/data/news/en/20070130.markdown
similarity index 100%
rename from data/news/en_US/20070130.markdown
rename to data/news/en/20070130.markdown
diff --git a/data/news/en_US/20070210.markdown b/data/news/en/20070210.markdown
similarity index 100%
rename from data/news/en_US/20070210.markdown
rename to data/news/en/20070210.markdown
diff --git a/data/news/en_US/20070216.markdown b/data/news/en/20070216.markdown
similarity index 100%
rename from data/news/en_US/20070216.markdown
rename to data/news/en/20070216.markdown
diff --git a/data/news/en_US/20070307.markdown b/data/news/en/20070307.markdown
similarity index 100%
rename from data/news/en_US/20070307.markdown
rename to data/news/en/20070307.markdown
diff --git a/data/news/en_US/20070315.markdown b/data/news/en/20070315.markdown
similarity index 100%
rename from data/news/en_US/20070315.markdown
rename to data/news/en/20070315.markdown
diff --git a/data/news/en_US/20070401.markdown b/data/news/en/20070401.markdown
similarity index 100%
rename from data/news/en_US/20070401.markdown
rename to data/news/en/20070401.markdown
diff --git a/data/news/en_US/20070412.markdown b/data/news/en/20070412.markdown
similarity index 100%
rename from data/news/en_US/20070412.markdown
rename to data/news/en/20070412.markdown
diff --git a/data/news/en_US/20070422.markdown b/data/news/en/20070422.markdown
similarity index 100%
rename from data/news/en_US/20070422.markdown
rename to data/news/en/20070422.markdown
diff --git a/data/news/en_US/20070519.markdown b/data/news/en/20070519.markdown
similarity index 100%
rename from data/news/en_US/20070519.markdown
rename to data/news/en/20070519.markdown
diff --git a/data/news/en_US/20070520.markdown b/data/news/en/20070520.markdown
similarity index 100%
rename from data/news/en_US/20070520.markdown
rename to data/news/en/20070520.markdown
diff --git a/data/news/en_US/20070606.markdown b/data/news/en/20070606.markdown
similarity index 100%
rename from data/news/en_US/20070606.markdown
rename to data/news/en/20070606.markdown
diff --git a/data/news/en_US/20070620.markdown b/data/news/en/20070620.markdown
similarity index 100%
rename from data/news/en_US/20070620.markdown
rename to data/news/en/20070620.markdown
diff --git a/data/news/en_US/20070703.markdown b/data/news/en/20070703.markdown
similarity index 100%
rename from data/news/en_US/20070703.markdown
rename to data/news/en/20070703.markdown
diff --git a/data/news/en_US/20070722.markdown b/data/news/en/20070722.markdown
similarity index 100%
rename from data/news/en_US/20070722.markdown
rename to data/news/en/20070722.markdown
diff --git a/data/news/en_US/20070731.markdown b/data/news/en/20070731.markdown
similarity index 100%
rename from data/news/en_US/20070731.markdown
rename to data/news/en/20070731.markdown
diff --git a/data/news/en_US/20070805.markdown b/data/news/en/20070805.markdown
similarity index 100%
rename from data/news/en_US/20070805.markdown
rename to data/news/en/20070805.markdown
diff --git a/data/news/en_US/20070916.markdown b/data/news/en/20070916.markdown
similarity index 100%
rename from data/news/en_US/20070916.markdown
rename to data/news/en/20070916.markdown
diff --git a/data/news/en_US/20071012.markdown b/data/news/en/20071012.markdown
similarity index 100%
rename from data/news/en_US/20071012.markdown
rename to data/news/en/20071012.markdown
diff --git a/data/news/en_US/20071127.markdown b/data/news/en/20071127.markdown
similarity index 100%
rename from data/news/en_US/20071127.markdown
rename to data/news/en/20071127.markdown
diff --git a/data/news/en_US/20071130.markdown b/data/news/en/20071130.markdown
similarity index 100%
rename from data/news/en_US/20071130.markdown
rename to data/news/en/20071130.markdown
diff --git a/data/news/en_US/20071202.markdown b/data/news/en/20071202.markdown
similarity index 100%
rename from data/news/en_US/20071202.markdown
rename to data/news/en/20071202.markdown
diff --git a/data/news/en_US/20071206.markdown b/data/news/en/20071206.markdown
similarity index 100%
rename from data/news/en_US/20071206.markdown
rename to data/news/en/20071206.markdown
diff --git a/data/news/en_US/20071228.markdown b/data/news/en/20071228.markdown
similarity index 100%
rename from data/news/en_US/20071228.markdown
rename to data/news/en/20071228.markdown
diff --git a/data/news/en_US/20080115.markdown b/data/news/en/20080115.markdown
similarity index 100%
rename from data/news/en_US/20080115.markdown
rename to data/news/en/20080115.markdown
diff --git a/data/news/en_US/20080229.markdown b/data/news/en/20080229.markdown
similarity index 100%
rename from data/news/en_US/20080229.markdown
rename to data/news/en/20080229.markdown
diff --git a/data/news/en_US/20080302.markdown b/data/news/en/20080302.markdown
similarity index 100%
rename from data/news/en_US/20080302.markdown
rename to data/news/en/20080302.markdown
diff --git a/data/news/en_US/20080321.markdown b/data/news/en/20080321.markdown
similarity index 100%
rename from data/news/en_US/20080321.markdown
rename to data/news/en/20080321.markdown
diff --git a/data/news/en_US/20080331.markdown b/data/news/en/20080331.markdown
similarity index 100%
rename from data/news/en_US/20080331.markdown
rename to data/news/en/20080331.markdown
diff --git a/data/news/en_US/20080401.markdown b/data/news/en/20080401.markdown
similarity index 100%
rename from data/news/en_US/20080401.markdown
rename to data/news/en/20080401.markdown
diff --git a/data/news/en_US/20080511.markdown b/data/news/en/20080511.markdown
similarity index 100%
rename from data/news/en_US/20080511.markdown
rename to data/news/en/20080511.markdown
diff --git a/data/news/en_US/20080522.markdown b/data/news/en/20080522.markdown
similarity index 100%
rename from data/news/en_US/20080522.markdown
rename to data/news/en/20080522.markdown
diff --git a/data/news/en_US/20080526.markdown b/data/news/en/20080526.markdown
similarity index 100%
rename from data/news/en_US/20080526.markdown
rename to data/news/en/20080526.markdown
diff --git a/data/news/en_US/20080622.markdown b/data/news/en/20080622.markdown
similarity index 100%
rename from data/news/en_US/20080622.markdown
rename to data/news/en/20080622.markdown
diff --git a/data/news/en_US/20080703.markdown b/data/news/en/20080703.markdown
similarity index 100%
rename from data/news/en_US/20080703.markdown
rename to data/news/en/20080703.markdown
diff --git a/data/news/en_US/20080721.markdown b/data/news/en/20080721.markdown
similarity index 100%
rename from data/news/en_US/20080721.markdown
rename to data/news/en/20080721.markdown
diff --git a/data/news/en_US/20080831.markdown b/data/news/en/20080831.markdown
similarity index 100%
rename from data/news/en_US/20080831.markdown
rename to data/news/en/20080831.markdown
diff --git a/data/news/en_US/20080906.markdown b/data/news/en/20080906.markdown
similarity index 100%
rename from data/news/en_US/20080906.markdown
rename to data/news/en/20080906.markdown
diff --git a/data/news/en_US/20080914.markdown b/data/news/en/20080914.markdown
similarity index 100%
rename from data/news/en_US/20080914.markdown
rename to data/news/en/20080914.markdown
diff --git a/data/news/en_US/20081201.markdown b/data/news/en/20081201.markdown
similarity index 100%
rename from data/news/en_US/20081201.markdown
rename to data/news/en/20081201.markdown
diff --git a/data/news/en_US/20081214.markdown b/data/news/en/20081214.markdown
similarity index 100%
rename from data/news/en_US/20081214.markdown
rename to data/news/en/20081214.markdown
diff --git a/data/news/en_US/20081216.markdown b/data/news/en/20081216.markdown
similarity index 100%
rename from data/news/en_US/20081216.markdown
rename to data/news/en/20081216.markdown
diff --git a/data/news/en_US/20090104.markdown b/data/news/en/20090104.markdown
similarity index 100%
rename from data/news/en_US/20090104.markdown
rename to data/news/en/20090104.markdown
diff --git a/data/news/en_US/20090114.markdown b/data/news/en/20090114.markdown
similarity index 100%
rename from data/news/en_US/20090114.markdown
rename to data/news/en/20090114.markdown
diff --git a/data/news/en_US/20090117.markdown b/data/news/en/20090117.markdown
similarity index 100%
rename from data/news/en_US/20090117.markdown
rename to data/news/en/20090117.markdown
diff --git a/data/news/en_US/20090122.markdown b/data/news/en/20090122.markdown
similarity index 100%
rename from data/news/en_US/20090122.markdown
rename to data/news/en/20090122.markdown
diff --git a/data/news/en_US/20090215.markdown b/data/news/en/20090215.markdown
similarity index 100%
rename from data/news/en_US/20090215.markdown
rename to data/news/en/20090215.markdown
diff --git a/data/news/en_US/20090228.markdown b/data/news/en/20090228.markdown
similarity index 100%
rename from data/news/en_US/20090228.markdown
rename to data/news/en/20090228.markdown
diff --git a/data/news/en_US/20090307.markdown b/data/news/en/20090307.markdown
similarity index 100%
rename from data/news/en_US/20090307.markdown
rename to data/news/en/20090307.markdown
diff --git a/data/news/en_US/20090318.markdown b/data/news/en/20090318.markdown
similarity index 100%
rename from data/news/en_US/20090318.markdown
rename to data/news/en/20090318.markdown
diff --git a/data/news/en_US/20090421.markdown b/data/news/en/20090421.markdown
similarity index 100%
rename from data/news/en_US/20090421.markdown
rename to data/news/en/20090421.markdown
diff --git a/data/news/en_US/20090423.markdown b/data/news/en/20090423.markdown
similarity index 100%
rename from data/news/en_US/20090423.markdown
rename to data/news/en/20090423.markdown
diff --git a/data/news/en_US/20090427.markdown b/data/news/en/20090427.markdown
similarity index 100%
rename from data/news/en_US/20090427.markdown
rename to data/news/en/20090427.markdown
diff --git a/data/news/en_US/20090514.markdown b/data/news/en/20090514.markdown
similarity index 100%
rename from data/news/en_US/20090514.markdown
rename to data/news/en/20090514.markdown
diff --git a/data/news/en_US/20090517.markdown b/data/news/en/20090517.markdown
similarity index 100%
rename from data/news/en_US/20090517.markdown
rename to data/news/en/20090517.markdown
diff --git a/data/news/en_US/20090523.markdown b/data/news/en/20090523.markdown
similarity index 100%
rename from data/news/en_US/20090523.markdown
rename to data/news/en/20090523.markdown
diff --git a/data/news/en_US/20090607.markdown b/data/news/en/20090607.markdown
similarity index 100%
rename from data/news/en_US/20090607.markdown
rename to data/news/en/20090607.markdown
diff --git a/data/news/en_US/20090616.markdown b/data/news/en/20090616.markdown
similarity index 100%
rename from data/news/en_US/20090616.markdown
rename to data/news/en/20090616.markdown
diff --git a/data/news/en_US/20090623.markdown b/data/news/en/20090623.markdown
similarity index 100%
rename from data/news/en_US/20090623.markdown
rename to data/news/en/20090623.markdown
diff --git a/data/news/en_US/20090630.markdown b/data/news/en/20090630.markdown
similarity index 100%
rename from data/news/en_US/20090630.markdown
rename to data/news/en/20090630.markdown
diff --git a/data/news/en_US/20090702.markdown b/data/news/en/20090702.markdown
similarity index 100%
rename from data/news/en_US/20090702.markdown
rename to data/news/en/20090702.markdown
diff --git a/data/news/en_US/20090709.markdown b/data/news/en/20090709.markdown
similarity index 100%
rename from data/news/en_US/20090709.markdown
rename to data/news/en/20090709.markdown
diff --git a/data/news/en_US/20090710a.markdown b/data/news/en/20090710a.markdown
similarity index 100%
rename from data/news/en_US/20090710a.markdown
rename to data/news/en/20090710a.markdown
diff --git a/data/news/en_US/20090710b.markdown b/data/news/en/20090710b.markdown
similarity index 100%
rename from data/news/en_US/20090710b.markdown
rename to data/news/en/20090710b.markdown
diff --git a/data/news/en_US/20090724.markdown b/data/news/en/20090724.markdown
similarity index 100%
rename from data/news/en_US/20090724.markdown
rename to data/news/en/20090724.markdown
diff --git a/data/news/en_US/20090802.markdown b/data/news/en/20090802.markdown
similarity index 100%
rename from data/news/en_US/20090802.markdown
rename to data/news/en/20090802.markdown
diff --git a/data/news/en_US/20090821.markdown b/data/news/en/20090821.markdown
similarity index 100%
rename from data/news/en_US/20090821.markdown
rename to data/news/en/20090821.markdown
diff --git a/data/news/en_US/20090831.markdown b/data/news/en/20090831.markdown
similarity index 100%
rename from data/news/en_US/20090831.markdown
rename to data/news/en/20090831.markdown
diff --git a/data/news/en_US/20090920.markdown b/data/news/en/20090920.markdown
similarity index 100%
rename from data/news/en_US/20090920.markdown
rename to data/news/en/20090920.markdown
diff --git a/data/news/en_US/20091030.markdown b/data/news/en/20091030.markdown
similarity index 100%
rename from data/news/en_US/20091030.markdown
rename to data/news/en/20091030.markdown
diff --git a/data/news/en_US/20091115.markdown b/data/news/en/20091115.markdown
similarity index 100%
rename from data/news/en_US/20091115.markdown
rename to data/news/en/20091115.markdown
diff --git a/data/news/en_US/20091221.markdown b/data/news/en/20091221.markdown
similarity index 100%
rename from data/news/en_US/20091221.markdown
rename to data/news/en/20091221.markdown
diff --git a/data/news/en_US/20091222.markdown b/data/news/en/20091222.markdown
similarity index 100%
rename from data/news/en_US/20091222.markdown
rename to data/news/en/20091222.markdown
diff --git a/data/news/en_US/20100109.markdown b/data/news/en/20100109.markdown
similarity index 100%
rename from data/news/en_US/20100109.markdown
rename to data/news/en/20100109.markdown
diff --git a/data/news/en_US/20100222.markdown b/data/news/en/20100222.markdown
similarity index 100%
rename from data/news/en_US/20100222.markdown
rename to data/news/en/20100222.markdown
diff --git a/data/news/en_US/20100318.markdown b/data/news/en/20100318.markdown
similarity index 100%
rename from data/news/en_US/20100318.markdown
rename to data/news/en/20100318.markdown
diff --git a/data/news/en_US/20100401.markdown b/data/news/en/20100401.markdown
similarity index 100%
rename from data/news/en_US/20100401.markdown
rename to data/news/en/20100401.markdown
diff --git a/data/news/en_US/20100404.markdown b/data/news/en/20100404.markdown
similarity index 100%
rename from data/news/en_US/20100404.markdown
rename to data/news/en/20100404.markdown
diff --git a/data/news/en_US/20100428.markdown b/data/news/en/20100428.markdown
similarity index 100%
rename from data/news/en_US/20100428.markdown
rename to data/news/en/20100428.markdown
diff --git a/data/news/en_US/20100502.markdown b/data/news/en/20100502.markdown
similarity index 100%
rename from data/news/en_US/20100502.markdown
rename to data/news/en/20100502.markdown
diff --git a/data/news/en_US/20100725.markdown b/data/news/en/20100725.markdown
similarity index 100%
rename from data/news/en_US/20100725.markdown
rename to data/news/en/20100725.markdown
diff --git a/data/news/en_US/20100828.markdown b/data/news/en/20100828.markdown
similarity index 100%
rename from data/news/en_US/20100828.markdown
rename to data/news/en/20100828.markdown
diff --git a/data/news/en_US/20100912.markdown b/data/news/en/20100912.markdown
similarity index 100%
rename from data/news/en_US/20100912.markdown
rename to data/news/en/20100912.markdown
diff --git a/data/news/en_US/20101015.markdown b/data/news/en/20101015.markdown
similarity index 100%
rename from data/news/en_US/20101015.markdown
rename to data/news/en/20101015.markdown
diff --git a/data/news/en_US/20101219.markdown b/data/news/en/20101219.markdown
similarity index 100%
rename from data/news/en_US/20101219.markdown
rename to data/news/en/20101219.markdown
diff --git a/data/news/en_US/20110123.markdown b/data/news/en/20110123.markdown
similarity index 100%
rename from data/news/en_US/20110123.markdown
rename to data/news/en/20110123.markdown
diff --git a/data/news/en_US/20110203.markdown b/data/news/en/20110203.markdown
similarity index 100%
rename from data/news/en_US/20110203.markdown
rename to data/news/en/20110203.markdown
diff --git a/data/news/en_US/20110212.markdown b/data/news/en/20110212.markdown
similarity index 100%
rename from data/news/en_US/20110212.markdown
rename to data/news/en/20110212.markdown
diff --git a/data/news/en_US/20110318.markdown b/data/news/en/20110318.markdown
similarity index 100%
rename from data/news/en_US/20110318.markdown
rename to data/news/en/20110318.markdown
diff --git a/data/news/en_US/20110328.markdown b/data/news/en/20110328.markdown
similarity index 100%
rename from data/news/en_US/20110328.markdown
rename to data/news/en/20110328.markdown
diff --git a/data/news/en_US/20110401.markdown b/data/news/en/20110401.markdown
similarity index 100%
rename from data/news/en_US/20110401.markdown
rename to data/news/en/20110401.markdown
diff --git a/data/news/en_US/20110416.markdown b/data/news/en/20110416.markdown
similarity index 100%
rename from data/news/en_US/20110416.markdown
rename to data/news/en/20110416.markdown
diff --git a/data/news/en_US/20110422.markdown b/data/news/en/20110422.markdown
similarity index 100%
rename from data/news/en_US/20110422.markdown
rename to data/news/en/20110422.markdown
diff --git a/data/news/en_US/20110528.markdown b/data/news/en/20110528.markdown
similarity index 100%
rename from data/news/en_US/20110528.markdown
rename to data/news/en/20110528.markdown
diff --git a/data/news/en_US/20110602.markdown b/data/news/en/20110602.markdown
similarity index 100%
rename from data/news/en_US/20110602.markdown
rename to data/news/en/20110602.markdown
diff --git a/data/news/en_US/20110712.markdown b/data/news/en/20110712.markdown
similarity index 100%
rename from data/news/en_US/20110712.markdown
rename to data/news/en/20110712.markdown
diff --git a/data/news/en_US/20110804.markdown b/data/news/en/20110804.markdown
similarity index 100%
rename from data/news/en_US/20110804.markdown
rename to data/news/en/20110804.markdown
diff --git a/data/news/en_US/20111003.markdown b/data/news/en/20111003.markdown
similarity index 100%
rename from data/news/en_US/20111003.markdown
rename to data/news/en/20111003.markdown
diff --git a/data/news/en_US/20111106.markdown b/data/news/en/20111106.markdown
similarity index 100%
rename from data/news/en_US/20111106.markdown
rename to data/news/en/20111106.markdown
diff --git a/data/news/en_US/20111111.markdown b/data/news/en/20111111.markdown
similarity index 100%
rename from data/news/en_US/20111111.markdown
rename to data/news/en/20111111.markdown
diff --git a/data/news/en_US/20111121.markdown b/data/news/en/20111121.markdown
similarity index 100%
rename from data/news/en_US/20111121.markdown
rename to data/news/en/20111121.markdown
diff --git a/data/news/en_US/20111126.markdown b/data/news/en/20111126.markdown
similarity index 100%
rename from data/news/en_US/20111126.markdown
rename to data/news/en/20111126.markdown
diff --git a/data/news/en_US/20111210.markdown b/data/news/en/20111210.markdown
similarity index 100%
rename from data/news/en_US/20111210.markdown
rename to data/news/en/20111210.markdown
diff --git a/data/news/en_US/20111219.markdown b/data/news/en/20111219.markdown
similarity index 100%
rename from data/news/en_US/20111219.markdown
rename to data/news/en/20111219.markdown
diff --git a/data/news/en_US/20120127.markdown b/data/news/en/20120127.markdown
similarity index 100%
rename from data/news/en_US/20120127.markdown
rename to data/news/en/20120127.markdown
diff --git a/data/news/en_US/20120316.markdown b/data/news/en/20120316.markdown
similarity index 100%
rename from data/news/en_US/20120316.markdown
rename to data/news/en/20120316.markdown
diff --git a/data/news/en_US/20120328.markdown b/data/news/en/20120328.markdown
similarity index 100%
rename from data/news/en_US/20120328.markdown
rename to data/news/en/20120328.markdown
diff --git a/data/news/en_US/20120401.markdown b/data/news/en/20120401.markdown
similarity index 100%
rename from data/news/en_US/20120401.markdown
rename to data/news/en/20120401.markdown
diff --git a/data/news/en_US/20120401b.markdown b/data/news/en/20120401b.markdown
similarity index 100%
rename from data/news/en_US/20120401b.markdown
rename to data/news/en/20120401b.markdown
diff --git a/data/news/en_US/20120424.markdown b/data/news/en/20120424.markdown
similarity index 100%
rename from data/news/en_US/20120424.markdown
rename to data/news/en/20120424.markdown
diff --git a/data/news/en_US/20120502.markdown b/data/news/en/20120502.markdown
similarity index 100%
rename from data/news/en_US/20120502.markdown
rename to data/news/en/20120502.markdown
diff --git a/data/news/en_US/20120609.markdown b/data/news/en/20120609.markdown
similarity index 100%
rename from data/news/en_US/20120609.markdown
rename to data/news/en/20120609.markdown
diff --git a/data/news/en_US/20120616.markdown b/data/news/en/20120616.markdown
similarity index 100%
rename from data/news/en_US/20120616.markdown
rename to data/news/en/20120616.markdown
diff --git a/data/news/en_US/20120629.markdown b/data/news/en/20120629.markdown
similarity index 100%
rename from data/news/en_US/20120629.markdown
rename to data/news/en/20120629.markdown
diff --git a/data/news/en_US/20120727.markdown b/data/news/en/20120727.markdown
similarity index 100%
rename from data/news/en_US/20120727.markdown
rename to data/news/en/20120727.markdown
diff --git a/data/news/en_US/20120809.markdown b/data/news/en/20120809.markdown
similarity index 100%
rename from data/news/en_US/20120809.markdown
rename to data/news/en/20120809.markdown
diff --git a/data/news/en_US/20120916.markdown b/data/news/en/20120916.markdown
similarity index 100%
rename from data/news/en_US/20120916.markdown
rename to data/news/en/20120916.markdown
diff --git a/data/news/en_US/20121002.markdown b/data/news/en/20121002.markdown
similarity index 100%
rename from data/news/en_US/20121002.markdown
rename to data/news/en/20121002.markdown
diff --git a/data/news/en_US/20121017.markdown b/data/news/en/20121017.markdown
similarity index 100%
rename from data/news/en_US/20121017.markdown
rename to data/news/en/20121017.markdown
diff --git a/data/news/en_US/20121021.markdown b/data/news/en/20121021.markdown
similarity index 100%
rename from data/news/en_US/20121021.markdown
rename to data/news/en/20121021.markdown
diff --git a/data/news/en_US/20121025.markdown b/data/news/en/20121025.markdown
similarity index 100%
rename from data/news/en_US/20121025.markdown
rename to data/news/en/20121025.markdown
diff --git a/data/news/en_US/20121130.markdown b/data/news/en/20121130.markdown
similarity index 100%
rename from data/news/en_US/20121130.markdown
rename to data/news/en/20121130.markdown
diff --git a/data/news/en_US/20121222.markdown b/data/news/en/20121222.markdown
similarity index 100%
rename from data/news/en_US/20121222.markdown
rename to data/news/en/20121222.markdown
diff --git a/data/news/en_US/20130102.markdown b/data/news/en/20130102.markdown
similarity index 100%
rename from data/news/en_US/20130102.markdown
rename to data/news/en/20130102.markdown
diff --git a/data/news/en_US/20130328.markdown b/data/news/en/20130328.markdown
similarity index 100%
rename from data/news/en_US/20130328.markdown
rename to data/news/en/20130328.markdown
diff --git a/data/news/en_US/20130412.markdown b/data/news/en/20130412.markdown
similarity index 100%
rename from data/news/en_US/20130412.markdown
rename to data/news/en/20130412.markdown
diff --git a/data/news/en_US/20130420.markdown b/data/news/en/20130420.markdown
similarity index 100%
rename from data/news/en_US/20130420.markdown
rename to data/news/en/20130420.markdown
diff --git a/data/news/en_US/20130421.markdown b/data/news/en/20130421.markdown
similarity index 100%
rename from data/news/en_US/20130421.markdown
rename to data/news/en/20130421.markdown
diff --git a/data/news/en_US/20130531a.markdown b/data/news/en/20130531a.markdown
similarity index 100%
rename from data/news/en_US/20130531a.markdown
rename to data/news/en/20130531a.markdown
diff --git a/data/news/en_US/20130531b.markdown b/data/news/en/20130531b.markdown
similarity index 100%
rename from data/news/en_US/20130531b.markdown
rename to data/news/en/20130531b.markdown
diff --git a/data/news/en_US/20131011.markdown b/data/news/en/20131011.markdown
similarity index 100%
rename from data/news/en_US/20131011.markdown
rename to data/news/en/20131011.markdown
diff --git a/data/news/en_US/20131105.markdown b/data/news/en/20131105.markdown
similarity index 100%
rename from data/news/en_US/20131105.markdown
rename to data/news/en/20131105.markdown
diff --git a/data/news/en_US/20131202.markdown b/data/news/en/20131202.markdown
similarity index 100%
rename from data/news/en_US/20131202.markdown
rename to data/news/en/20131202.markdown
diff --git a/data/news/en_US/20131227.markdown b/data/news/en/20131227.markdown
similarity index 100%
rename from data/news/en_US/20131227.markdown
rename to data/news/en/20131227.markdown
diff --git a/data/news/en_US/20140112.markdown b/data/news/en/20140112.markdown
similarity index 100%
rename from data/news/en_US/20140112.markdown
rename to data/news/en/20140112.markdown
diff --git a/data/news/en_US/20140118.markdown b/data/news/en/20140118.markdown
similarity index 100%
rename from data/news/en_US/20140118.markdown
rename to data/news/en/20140118.markdown
diff --git a/data/news/en_US/20140225.markdown b/data/news/en/20140225.markdown
similarity index 100%
rename from data/news/en_US/20140225.markdown
rename to data/news/en/20140225.markdown
diff --git a/data/news/en_US/20140305.markdown b/data/news/en/20140305.markdown
similarity index 100%
rename from data/news/en_US/20140305.markdown
rename to data/news/en/20140305.markdown
diff --git a/data/news/en_US/20140401.markdown b/data/news/en/20140401.markdown
similarity index 100%
rename from data/news/en_US/20140401.markdown
rename to data/news/en/20140401.markdown
diff --git a/data/news/en_US/20140401b.markdown b/data/news/en/20140401b.markdown
similarity index 100%
rename from data/news/en_US/20140401b.markdown
rename to data/news/en/20140401b.markdown
diff --git a/data/news/en_US/20140423.markdown b/data/news/en/20140423.markdown
similarity index 100%
rename from data/news/en_US/20140423.markdown
rename to data/news/en/20140423.markdown
diff --git a/data/news/en_US/20140519.markdown b/data/news/en/20140519.markdown
similarity index 100%
rename from data/news/en_US/20140519.markdown
rename to data/news/en/20140519.markdown
diff --git a/data/news/en_US/20140607.markdown b/data/news/en/20140607.markdown
similarity index 100%
rename from data/news/en_US/20140607.markdown
rename to data/news/en/20140607.markdown
diff --git a/data/news/en_US/20140616.markdown b/data/news/en/20140616.markdown
similarity index 100%
rename from data/news/en_US/20140616.markdown
rename to data/news/en/20140616.markdown
diff --git a/data/news/en_US/20140721.markdown b/data/news/en/20140721.markdown
similarity index 100%
rename from data/news/en_US/20140721.markdown
rename to data/news/en/20140721.markdown
diff --git a/data/news/en_US/20140810.markdown b/data/news/en/20140810.markdown
similarity index 100%
rename from data/news/en_US/20140810.markdown
rename to data/news/en/20140810.markdown
diff --git a/data/news/en_US/20140918.markdown b/data/news/en/20140918.markdown
similarity index 100%
rename from data/news/en_US/20140918.markdown
rename to data/news/en/20140918.markdown
diff --git a/data/news/en_US/20150111.markdown b/data/news/en/20150111.markdown
similarity index 100%
rename from data/news/en_US/20150111.markdown
rename to data/news/en/20150111.markdown
diff --git a/data/news/en_US/20150330.markdown b/data/news/en/20150330.markdown
similarity index 100%
rename from data/news/en_US/20150330.markdown
rename to data/news/en/20150330.markdown
diff --git a/data/news/en_US/20150913.markdown b/data/news/en/20150913.markdown
similarity index 100%
rename from data/news/en_US/20150913.markdown
rename to data/news/en/20150913.markdown
diff --git a/data/news/en_US/20151111.markdown b/data/news/en/20151111.markdown
similarity index 100%
rename from data/news/en_US/20151111.markdown
rename to data/news/en/20151111.markdown
diff --git a/data/news/en_US/20151122.markdown b/data/news/en/20151122.markdown
similarity index 100%
rename from data/news/en_US/20151122.markdown
rename to data/news/en/20151122.markdown
diff --git a/data/news/en_US/20151206.markdown b/data/news/en/20151206.markdown
similarity index 100%
rename from data/news/en_US/20151206.markdown
rename to data/news/en/20151206.markdown
diff --git a/data/news/en_US/20160119.markdown b/data/news/en/20160119.markdown
similarity index 100%
rename from data/news/en_US/20160119.markdown
rename to data/news/en/20160119.markdown
diff --git a/data/news/en_US/20160123.markdown b/data/news/en/20160123.markdown
similarity index 100%
rename from data/news/en_US/20160123.markdown
rename to data/news/en/20160123.markdown
diff --git a/data/news/en_US/20160201.markdown b/data/news/en/20160201.markdown
similarity index 100%
rename from data/news/en_US/20160201.markdown
rename to data/news/en/20160201.markdown
diff --git a/data/news/en_US/20160301.markdown b/data/news/en/20160301.markdown
similarity index 100%
rename from data/news/en_US/20160301.markdown
rename to data/news/en/20160301.markdown
diff --git a/data/news/en_US/20160304.markdown b/data/news/en/20160304.markdown
similarity index 100%
rename from data/news/en_US/20160304.markdown
rename to data/news/en/20160304.markdown
diff --git a/data/news/en_US/20160327.markdown b/data/news/en/20160327.markdown
similarity index 100%
rename from data/news/en_US/20160327.markdown
rename to data/news/en/20160327.markdown
diff --git a/data/news/en_US/20160401.markdown b/data/news/en/20160401.markdown
similarity index 100%
rename from data/news/en_US/20160401.markdown
rename to data/news/en/20160401.markdown
diff --git a/data/news/en_US/20160425.markdown b/data/news/en/20160425.markdown
similarity index 100%
rename from data/news/en_US/20160425.markdown
rename to data/news/en/20160425.markdown
diff --git a/data/news/en_US/20160502.markdown b/data/news/en/20160502.markdown
similarity index 100%
rename from data/news/en_US/20160502.markdown
rename to data/news/en/20160502.markdown
diff --git a/data/news/en_US/20160525.markdown b/data/news/en/20160525.markdown
similarity index 100%
rename from data/news/en_US/20160525.markdown
rename to data/news/en/20160525.markdown
diff --git a/data/news/en_US/20160606.markdown b/data/news/en/20160606.markdown
similarity index 100%
rename from data/news/en_US/20160606.markdown
rename to data/news/en/20160606.markdown
diff --git a/data/news/en_US/20160816.markdown b/data/news/en/20160816.markdown
similarity index 100%
rename from data/news/en_US/20160816.markdown
rename to data/news/en/20160816.markdown
diff --git a/data/news/en_US/20160913.markdown b/data/news/en/20160913.markdown
similarity index 100%
rename from data/news/en_US/20160913.markdown
rename to data/news/en/20160913.markdown
diff --git a/data/news/en_US/20160915.markdown b/data/news/en/20160915.markdown
similarity index 100%
rename from data/news/en_US/20160915.markdown
rename to data/news/en/20160915.markdown
diff --git a/data/news/en_US/20161017.markdown b/data/news/en/20161017.markdown
similarity index 100%
rename from data/news/en_US/20161017.markdown
rename to data/news/en/20161017.markdown
diff --git a/data/news/en_US/20161127.markdown b/data/news/en/20161127.markdown
similarity index 100%
rename from data/news/en_US/20161127.markdown
rename to data/news/en/20161127.markdown
diff --git a/data/news/en_US/20161201.markdown b/data/news/en/20161201.markdown
similarity index 100%
rename from data/news/en_US/20161201.markdown
rename to data/news/en/20161201.markdown
diff --git a/data/news/en_US/20170306.markdown b/data/news/en/20170306.markdown
similarity index 100%
rename from data/news/en_US/20170306.markdown
rename to data/news/en/20170306.markdown
diff --git a/data/news/en_US/20170401.markdown b/data/news/en/20170401.markdown
similarity index 100%
rename from data/news/en_US/20170401.markdown
rename to data/news/en/20170401.markdown
diff --git a/data/news/en_US/20170401a.markdown b/data/news/en/20170401a.markdown
similarity index 100%
rename from data/news/en_US/20170401a.markdown
rename to data/news/en/20170401a.markdown
diff --git a/data/news/en_US/20170428.markdown b/data/news/en/20170428.markdown
similarity index 100%
rename from data/news/en_US/20170428.markdown
rename to data/news/en/20170428.markdown
diff --git a/data/news/en_US/20170505.markdown b/data/news/en/20170505.markdown
similarity index 100%
rename from data/news/en_US/20170505.markdown
rename to data/news/en/20170505.markdown
diff --git a/data/news/en_US/20170617.markdown b/data/news/en/20170617.markdown
similarity index 100%
rename from data/news/en_US/20170617.markdown
rename to data/news/en/20170617.markdown
diff --git a/data/news/en_US/20170702.markdown b/data/news/en/20170702.markdown
similarity index 100%
rename from data/news/en_US/20170702.markdown
rename to data/news/en/20170702.markdown
diff --git a/data/news/en_US/20170731.markdown b/data/news/en/20170731.markdown
similarity index 100%
rename from data/news/en_US/20170731.markdown
rename to data/news/en/20170731.markdown
diff --git a/data/news/en_US/20170801.markdown b/data/news/en/20170801.markdown
similarity index 100%
rename from data/news/en_US/20170801.markdown
rename to data/news/en/20170801.markdown
diff --git a/data/news/en_US/20171010.markdown b/data/news/en/20171010.markdown
similarity index 100%
rename from data/news/en_US/20171010.markdown
rename to data/news/en/20171010.markdown
diff --git a/data/news/en_US/20171122.markdown b/data/news/en/20171122.markdown
similarity index 100%
rename from data/news/en_US/20171122.markdown
rename to data/news/en/20171122.markdown
diff --git a/data/news/en_US/20171217.markdown b/data/news/en/20171217.markdown
similarity index 100%
rename from data/news/en_US/20171217.markdown
rename to data/news/en/20171217.markdown
diff --git a/data/news/en_US/20180214.markdown b/data/news/en/20180214.markdown
similarity index 100%
rename from data/news/en_US/20180214.markdown
rename to data/news/en/20180214.markdown
diff --git a/data/news/en_US/20180331.markdown b/data/news/en/20180331.markdown
similarity index 100%
rename from data/news/en_US/20180331.markdown
rename to data/news/en/20180331.markdown
diff --git a/data/news/en_US/20180423.markdown b/data/news/en/20180423.markdown
similarity index 100%
rename from data/news/en_US/20180423.markdown
rename to data/news/en/20180423.markdown
diff --git a/data/news/en_US/20180501.markdown b/data/news/en/20180501.markdown
similarity index 100%
rename from data/news/en_US/20180501.markdown
rename to data/news/en/20180501.markdown
diff --git a/data/news/en_US/20180612.markdown b/data/news/en/20180612.markdown
similarity index 100%
rename from data/news/en_US/20180612.markdown
rename to data/news/en/20180612.markdown
diff --git a/data/news/en_US/20180629.markdown b/data/news/en/20180629.markdown
similarity index 100%
rename from data/news/en_US/20180629.markdown
rename to data/news/en/20180629.markdown
diff --git a/data/news/en_US/20180701.markdown b/data/news/en/20180701.markdown
similarity index 100%
rename from data/news/en_US/20180701.markdown
rename to data/news/en/20180701.markdown
diff --git a/data/news/en_US/20181023.markdown b/data/news/en/20181023.markdown
similarity index 100%
rename from data/news/en_US/20181023.markdown
rename to data/news/en/20181023.markdown
diff --git a/data/news/en_US/20181024.markdown b/data/news/en/20181024.markdown
similarity index 100%
rename from data/news/en_US/20181024.markdown
rename to data/news/en/20181024.markdown
diff --git a/data/news/en_US/20181118.markdown b/data/news/en/20181118.markdown
similarity index 100%
rename from data/news/en_US/20181118.markdown
rename to data/news/en/20181118.markdown
diff --git a/data/news/en_US/20181210.markdown b/data/news/en/20181210.markdown
similarity index 100%
rename from data/news/en_US/20181210.markdown
rename to data/news/en/20181210.markdown
diff --git a/data/news/en_US/20190306.markdown b/data/news/en/20190306.markdown
similarity index 100%
rename from data/news/en_US/20190306.markdown
rename to data/news/en/20190306.markdown
diff --git a/data/news/en_US/20190413.markdown b/data/news/en/20190413.markdown
similarity index 100%
rename from data/news/en_US/20190413.markdown
rename to data/news/en/20190413.markdown
diff --git a/data/news/en_US/20190513.markdown b/data/news/en/20190513.markdown
similarity index 100%
rename from data/news/en_US/20190513.markdown
rename to data/news/en/20190513.markdown
diff --git a/data/news/en_US/20190603.markdown b/data/news/en/20190603.markdown
similarity index 100%
rename from data/news/en_US/20190603.markdown
rename to data/news/en/20190603.markdown
diff --git a/data/news/en_US/20190608.markdown b/data/news/en/20190608.markdown
similarity index 100%
rename from data/news/en_US/20190608.markdown
rename to data/news/en/20190608.markdown
diff --git a/data/news/en_US/20190616.markdown b/data/news/en/20190616.markdown
similarity index 100%
rename from data/news/en_US/20190616.markdown
rename to data/news/en/20190616.markdown
diff --git a/data/news/en_US/20190630.markdown b/data/news/en/20190630.markdown
similarity index 100%
rename from data/news/en_US/20190630.markdown
rename to data/news/en/20190630.markdown
diff --git a/data/news/en_US/20190728.markdown b/data/news/en/20190728.markdown
similarity index 100%
rename from data/news/en_US/20190728.markdown
rename to data/news/en/20190728.markdown
diff --git a/data/news/en_US/20190904.markdown b/data/news/en/20190904.markdown
similarity index 100%
rename from data/news/en_US/20190904.markdown
rename to data/news/en/20190904.markdown
diff --git a/data/news/en_US/20190912.markdown b/data/news/en/20190912.markdown
similarity index 100%
rename from data/news/en_US/20190912.markdown
rename to data/news/en/20190912.markdown
diff --git a/data/news/en_US/20190913.markdown b/data/news/en/20190913.markdown
similarity index 100%
rename from data/news/en_US/20190913.markdown
rename to data/news/en/20190913.markdown
diff --git a/data/news/en_US/20190917.markdown b/data/news/en/20190917.markdown
similarity index 100%
rename from data/news/en_US/20190917.markdown
rename to data/news/en/20190917.markdown
diff --git a/data/news/en_US/20190919.markdown b/data/news/en/20190919.markdown
similarity index 100%
rename from data/news/en_US/20190919.markdown
rename to data/news/en/20190919.markdown
diff --git a/data/news/en_US/20191013.markdown b/data/news/en/20191013.markdown
similarity index 100%
rename from data/news/en_US/20191013.markdown
rename to data/news/en/20191013.markdown
diff --git a/data/news/en_US/20191217.markdown b/data/news/en/20191217.markdown
similarity index 100%
rename from data/news/en_US/20191217.markdown
rename to data/news/en/20191217.markdown
diff --git a/data/news/en_US/20200131.markdown b/data/news/en/20200131.markdown
similarity index 100%
rename from data/news/en_US/20200131.markdown
rename to data/news/en/20200131.markdown
diff --git a/data/news/en_US/20200222.markdown b/data/news/en/20200222.markdown
similarity index 100%
rename from data/news/en_US/20200222.markdown
rename to data/news/en/20200222.markdown
diff --git a/data/news/en_US/20200331.markdown b/data/news/en/20200331.markdown
similarity index 100%
rename from data/news/en_US/20200331.markdown
rename to data/news/en/20200331.markdown
diff --git a/data/news/en_US/20200430.markdown b/data/news/en/20200430.markdown
similarity index 100%
rename from data/news/en_US/20200430.markdown
rename to data/news/en/20200430.markdown
diff --git a/data/news/en_US/20200504.markdown b/data/news/en/20200504.markdown
similarity index 100%
rename from data/news/en_US/20200504.markdown
rename to data/news/en/20200504.markdown
diff --git a/data/news/en_US/20200514.markdown b/data/news/en/20200514.markdown
similarity index 100%
rename from data/news/en_US/20200514.markdown
rename to data/news/en/20200514.markdown
diff --git a/data/news/en_US/20200521.markdown b/data/news/en/20200521.markdown
similarity index 100%
rename from data/news/en_US/20200521.markdown
rename to data/news/en/20200521.markdown
diff --git a/data/news/en_US/20200524.markdown b/data/news/en/20200524.markdown
similarity index 100%
rename from data/news/en_US/20200524.markdown
rename to data/news/en/20200524.markdown
diff --git a/data/news/en_US/20200622.markdown b/data/news/en/20200622.markdown
similarity index 100%
rename from data/news/en_US/20200622.markdown
rename to data/news/en/20200622.markdown
diff --git a/data/news/en_US/20200817.markdown b/data/news/en/20200817.markdown
similarity index 100%
rename from data/news/en_US/20200817.markdown
rename to data/news/en/20200817.markdown
diff --git a/data/news/en_US/20200820.markdown b/data/news/en/20200820.markdown
similarity index 100%
rename from data/news/en_US/20200820.markdown
rename to data/news/en/20200820.markdown
diff --git a/data/news/en_US/20200823.markdown b/data/news/en/20200823.markdown
similarity index 100%
rename from data/news/en_US/20200823.markdown
rename to data/news/en/20200823.markdown
diff --git a/data/news/en_US/20200825.markdown b/data/news/en/20200825.markdown
similarity index 100%
rename from data/news/en_US/20200825.markdown
rename to data/news/en/20200825.markdown
diff --git a/data/news/en_US/20200830.markdown b/data/news/en/20200830.markdown
similarity index 100%
rename from data/news/en_US/20200830.markdown
rename to data/news/en/20200830.markdown
diff --git a/data/news/en_US/20200906.markdown b/data/news/en/20200906.markdown
similarity index 100%
rename from data/news/en_US/20200906.markdown
rename to data/news/en/20200906.markdown
diff --git a/data/news/en_US/20200927.markdown b/data/news/en/20200927.markdown
similarity index 100%
rename from data/news/en_US/20200927.markdown
rename to data/news/en/20200927.markdown
diff --git a/data/news/es_ES/.gitignore b/data/news/es/.gitignore
similarity index 100%
rename from data/news/es_ES/.gitignore
rename to data/news/es/.gitignore
diff --git a/data/news/fr_FR/.gitignore b/data/news/fr/.gitignore
similarity index 100%
rename from data/news/fr_FR/.gitignore
rename to data/news/fr/.gitignore
diff --git a/data/news/it_IT/.gitignore b/data/news/it/.gitignore
similarity index 100%
rename from data/news/it_IT/.gitignore
rename to data/news/it/.gitignore
diff --git a/data/news/pt_BR/.gitignore b/data/news/pt-BR/.gitignore
similarity index 100%
rename from data/news/pt_BR/.gitignore
rename to data/news/pt-BR/.gitignore
diff --git a/data/news/ru_RU/.gitignore b/data/news/ru/.gitignore
similarity index 100%
rename from data/news/ru_RU/.gitignore
rename to data/news/ru/.gitignore


Commit: e483873d57f45b2cbd6910f229fa8bf18fb79647
    https://github.com/scummvm/scummvm-web/commit/e483873d57f45b2cbd6910f229fa8bf18fb79647
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
WEB: Remove the lang cookie and leverage the url path instead

Changed paths:
    include/Constants.php
    include/Controller.php
    include/LocalizationUtils.php
    include/XMLParser.php
    public_html/index.php
    templates/components/lang_menu.tpl
    templates/components/menu_group.tpl
    templates/pages/index.tpl


diff --git a/include/Constants.php b/include/Constants.php
index 1fc1d453..eed1fb3b 100644
--- a/include/Constants.php
+++ b/include/Constants.php
@@ -45,7 +45,7 @@ class Constants
         define('DIR_SCREENSHOTS', 'data/screenshots/');
 
         /* Locale */
-        define('DEFAULT_LOCALE', 'en_US');
+        define('DEFAULT_LOCALE', 'en');
 
         /* Downloads */
         define('DOWNLOADS_URL', '/frs/scummvm/{$release}/');
diff --git a/include/Controller.php b/include/Controller.php
index f09cb1fc..73ae47b3 100644
--- a/include/Controller.php
+++ b/include/Controller.php
@@ -65,8 +65,8 @@ class Controller
         }
 
         // Construct lang URL
-        $pageurl = preg_replace('/\?lang=[a-zA-Z_]*$/', '', $_SERVER['REQUEST_URI']);
-
+        $langs = join("|", array_keys($available_languages));
+        $pageurl = preg_replace("/\/($langs)/i", '', $_SERVER['REQUEST_URI']);
         /* Check RTL */
         $rtl = $this->isRtl($available_languages[$lang]);
 
@@ -78,6 +78,7 @@ class Controller
             'menus' => $menus,
             'pageurl' => $pageurl,
             'available_languages' => $available_languages,
+            'lang' => $lang === DEFAULT_LOCALE ? '' : $lang,
             'rtl' => $rtl,
         );
         $this->smarty->assign($vars);
diff --git a/include/LocalizationUtils.php b/include/LocalizationUtils.php
index fe4ed552..32957d43 100644
--- a/include/LocalizationUtils.php
+++ b/include/LocalizationUtils.php
@@ -74,7 +74,7 @@ class LocalizationUtils
                 }
 
                 // Special handling of french colon character
-                if ($lang === 'fr_FR') {
+                if ($lang === 'fr') {
                     $content = preg_replace_callback(
                         "/(?<=\(http)(.*?)(?=\))/u",
                         function ($matches) {
diff --git a/include/XMLParser.php b/include/XMLParser.php
index 91e3e182..17eed2a7 100644
--- a/include/XMLParser.php
+++ b/include/XMLParser.php
@@ -55,7 +55,7 @@ class XMLParser
     {
         global $lang;
 
-        if ($lang != 'en') {
+        if ($lang != DEFAULT_LOCALE) {
             $fname = substr($filename, 0, strrpos($filename, '.'));
             $fext  = strrchr($filename, '.');
 
diff --git a/public_html/index.php b/public_html/index.php
index 2e9fd6df..f88869ab 100644
--- a/public_html/index.php
+++ b/public_html/index.php
@@ -22,28 +22,17 @@ global $lang, $available_languages;
 $languages = array_slice(scandir(DIR_LANG),2);
 $available_languages = [];
 foreach ($languages as $l) {
-  if (\in_array($l, ['pt_PT', 'pt_BR'])) {
-    $available_languages[$l] = \locale_get_display_name($l, $l);
-  } else {
-    $available_languages[$l] = \locale_get_display_language($l, $l);
-  }
+    if ($lang === DEFAULT_LOCALE) {
+      continue;
+    }
 
+    $available_languages[$l] = \locale_get_display_name($l, $l);
 }
 
-if (!empty($_GET['lang'])) {
-    $lang = $_GET['lang'];
-    $cookie_options = array (
-      'expires' => time()+86400,
-      'path' => '/',
-      'domain' => 'www.scummvm.org',
-      'secure' => true,
-      'samesite' => 'None'
-      );
-    setcookie("lang", $lang, $cookie_options);
-} elseif (!empty($_COOKIE['lang'])) {
-    $lang = $_COOKIE['lang'];
-} elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
-    $lang = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);
+$langs = join("|", array_keys($available_languages));
+$langMatches = [];
+if (\preg_match("/^\/($langs)\//i", $_SERVER['REQUEST_URI'], $langMatches)) {
+    $lang = $langMatches[1];
 }
 
 if (!array_key_exists($lang, $available_languages)) {
@@ -62,46 +51,50 @@ if (!is_writeable(SMARTY_DIR_COMPILE)) {
 }
 
 /* Exception handling. */
-set_exception_handler(array('ScummVM\ExceptionHandler', 'handleException'));
+// set_exception_handler(array('ScummVM\ExceptionHandler', 'handleException'));
 
 /* Page mapping. */
 $pages = array(
-    '/compatibility'                         => '\ScummVM\Pages\CompatibilityPage',
-    '/compatibility/[cId:version]'           => '\ScummVM\Pages\CompatibilityPage',
-    '/compatibility/[cId:version]/[a:game]'  => '\ScummVM\Pages\CompatibilityPage',
-    '/contact'                               => '\ScummVM\Pages\ContactPage',
-    '/credits'                               => '\ScummVM\Pages\CreditsPage',
-    '/demos'                                 => '\ScummVM\Pages\DemosPage',
-    '/documentation'                         => '\ScummVM\Pages\DocumentationPage',
-    '/downloads'                             => '\ScummVM\Pages\DownloadsPage',
-    '/games'                                 => '\ScummVM\Pages\GamesPage',
-    '/faq'                                   => '\ScummVM\Pages\FAQPage',
-    '/feeds'                                 => '\ScummVM\Pages\FeedsPage',
-    '/feeds/[a:type]'                        => '\ScummVM\Pages\FeedsPage',
-    '/links'                                 => '\ScummVM\Pages\LinksPage',
-    '/'                                      => '\ScummVM\Pages\NewsPage',
-    '/news'                                  => '\ScummVM\Pages\NewsPage',
-    '/news/[a:date]'                         => '\ScummVM\Pages\NewsPage',
-    '/press'                                 => '\ScummVM\Pages\PressPage',
-    '/presssnowberry'                        => '\ScummVM\Pages\PressSnowberryPage', // HACK
-    '/screenshots'                           => '\ScummVM\Pages\ScreenshotsPage',
-    '/screenshots/[a:category]'              => '\ScummVM\Pages\ScreenshotsPage',
-    '/screenshots/[a:category]/[:game]'      => '\ScummVM\Pages\ScreenshotsPage',
-    '/subprojects'                           => '\ScummVM\Pages\SubprojectsPage',
-    '/sponsors'                              => '\ScummVM\Pages\SponsorsPage',
+    'compatibility'                         => '\ScummVM\Pages\CompatibilityPage',
+    'compatibility/[cId:version]'           => '\ScummVM\Pages\CompatibilityPage',
+    'compatibility/[cId:version]/[a:game]'  => '\ScummVM\Pages\CompatibilityPage',
+    'contact'                               => '\ScummVM\Pages\ContactPage',
+    'credits'                               => '\ScummVM\Pages\CreditsPage',
+    'demos'                                 => '\ScummVM\Pages\DemosPage',
+    'documentation'                         => '\ScummVM\Pages\DocumentationPage',
+    'downloads'                             => '\ScummVM\Pages\DownloadsPage',
+    'games'                                 => '\ScummVM\Pages\GamesPage',
+    'faq'                                   => '\ScummVM\Pages\FAQPage',
+    'feeds'                                 => '\ScummVM\Pages\FeedsPage',
+    'feeds/[a:type]'                        => '\ScummVM\Pages\FeedsPage',
+    'links'                                 => '\ScummVM\Pages\LinksPage',
+    ''                                      => '\ScummVM\Pages\NewsPage',
+    'news'                                  => '\ScummVM\Pages\NewsPage',
+    'news/[a:date]'                         => '\ScummVM\Pages\NewsPage',
+    'press'                                 => '\ScummVM\Pages\PressPage',
+    'presssnowberry'                        => '\ScummVM\Pages\PressSnowberryPage', // HACK
+    'screenshots'                           => '\ScummVM\Pages\ScreenshotsPage',
+    'screenshots/[a:category]'              => '\ScummVM\Pages\ScreenshotsPage',
+    'screenshots/[a:category]/[:game]'      => '\ScummVM\Pages\ScreenshotsPage',
+    'subprojects'                           => '\ScummVM\Pages\SubprojectsPage',
+    'sponsors'                              => '\ScummVM\Pages\SponsorsPage',
 );
 
 $router = new \AltoRouter();
 
-// Custom match for Compatability ID.
-$router->addMatchTypes(array('cId' => "dev|[\d\.]+([rc\d]+)?"));
+// Custom match for Compatibility ID.
+$router->addMatchTypes([
+  'cId' => "dev|[\d\.]+([rc\d]+)?",
+  'lang' => \join("|", array_keys(array_change_key_case($available_languages, CASE_LOWER)))
+]);
 
 foreach ($pages as $key => $value) {
-    $router->map('GET', $key, $value);
-    $router->map('GET', $key . '/', $value);
+    $router->map('GET', "/[lang:lang]?/$key", $value);
+    $router->map('GET', "/[lang:lang]?/$key/", $value);
 }
 
 $match = $router->match(strtolower($_SERVER['REQUEST_URI']));
+
 if ($match) {
     $page = new $match['target']();
     return $page->index($match['params']);
diff --git a/templates/components/lang_menu.tpl b/templates/components/lang_menu.tpl
index 8c77a2bd..1235b5bf 100644
--- a/templates/components/lang_menu.tpl
+++ b/templates/components/lang_menu.tpl
@@ -3,9 +3,12 @@
     <dt>
         <label for="menu-lang">Language</label>
     </dt>
+    <dd>
+        <span class="bullet"></span><a href="{$pageurl}">English</a>
+    </dd>
     {foreach from=$available_languages key=key item=item}
     <dd>
-        <span class="bullet"></span><a href="{$pageurl}?lang={$key}">{$item|escape}</a>
+        <span class="bullet"></span><a href="{$key}{$pageurl}">{$item}</a>
     </dd>
     {/foreach}
 </dl>
diff --git a/templates/components/menu_group.tpl b/templates/components/menu_group.tpl
index 68d771f1..4dc48690 100644
--- a/templates/components/menu_group.tpl
+++ b/templates/components/menu_group.tpl
@@ -4,6 +4,6 @@
 		<label for="{$menu->getClass()}">{eval var=$menu->getName()}</label>
 	</dt>
 	{foreach from=$menu->getEntries() key=text item=url}
-		<dd><span class="bullet"></span><a href="{eval var=$url}">{eval var=$text}</a></dd>
+		<dd><span class="bullet"></span><a href="{$lang}{eval var=$url}">{eval var=$text}</a></dd>
 	{/foreach}
 </dl>
diff --git a/templates/pages/index.tpl b/templates/pages/index.tpl
index d37e4e6c..371074ba 100644
--- a/templates/pages/index.tpl
+++ b/templates/pages/index.tpl
@@ -4,29 +4,32 @@
 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 	<meta name="viewport" content="width=device-width, initial-scale=1">
 	<meta name="referrer" content="no-referrer">
-  <base href="{$baseurl}">
-  <link rel="alternate" type="application/atom+xml" title="{#indexAtomFeed#}" href="{$baseurl}feeds/atom/">
+  	<base href="{$baseurl}">
+  	<link rel="alternate" type="application/atom+xml" title="{#indexAtomFeed#}" href="{$baseurl}feeds/atom/">
 	<link rel="alternate" type="application/rss+xml" title="{#indexRSSFeed#}" href="{$baseurl}feeds/rss/">
 	<title>ScummVM :: {$title}</title>
-  <!-- Favicon -->
-  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=oLBEjaJ9ag">
-  <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png?v=oLBEjaJ9ag">
-  <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png?v=oLBEjaJ9ag">
-  <link rel="manifest" href="/site.webmanifest?v=oLBEjaJ9ag">
-  <link rel="mask-icon" href="/safari-pinned-tab.svg?v=oLBEjaJ9ag" color="#046c00">
-  <link rel="shortcut icon" href="/favicon.ico?v=oLBEjaJ9ag">
-  <meta name="apple-mobile-web-app-title" content="ScummVM">
-  <meta name="application-name" content="ScummVM">
-  <meta name="msapplication-TileColor" content="#cc6600">
-  <meta name="theme-color" content="#cc6600">
-  <!-- OpenGraph -->
-  <meta property="og:image:width" content="1200">
-  <meta property="og:image:height" content="630">
-  <meta property="og:title" content="ScummVM">
-  <meta property="og:description" content="ScummVM is a collection of game engines for playing classic graphical RPGs and point-and-click adventure games on modern hardware.">
-  <meta property="og:url" content="https://www.scummvm.org">
-  <meta property="og:image" content="https://www.scummvm.org/images/og-image.jpg">
-
+	<!-- Favicon -->
+	<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=oLBEjaJ9ag">
+	<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png?v=oLBEjaJ9ag">
+	<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png?v=oLBEjaJ9ag">
+	<link rel="manifest" href="/site.webmanifest?v=oLBEjaJ9ag">
+	<link rel="mask-icon" href="/safari-pinned-tab.svg?v=oLBEjaJ9ag" color="#046c00">
+	<link rel="shortcut icon" href="/favicon.ico?v=oLBEjaJ9ag">
+	<meta name="apple-mobile-web-app-title" content="ScummVM">
+	<meta name="application-name" content="ScummVM">
+	<meta name="msapplication-TileColor" content="#cc6600">
+	<meta name="theme-color" content="#cc6600">
+	<!-- OpenGraph -->
+	<meta property="og:image:width" content="1200">
+	<meta property="og:image:height" content="630">
+	<meta property="og:title" content="ScummVM">
+	<meta property="og:description" content="ScummVM is a collection of game engines for playing classic graphical RPGs and point-and-click adventure games on modern hardware.">
+	<meta property="og:url" content="https://www.scummvm.org">
+	<meta property="og:image" content="https://www.scummvm.org/images/og-image.jpg">
+	<!-- Translations -->
+	{foreach from=$available_languages key=key item=item}
+    <link rel="alternate" hreflang="{$key}" href="{$baseurl}{$key}{$pageurl}">
+    {/foreach}
 	{* Cache bust CSS if making major changes *}
 	{$css = "2.0.0"}
 	<link rel="stylesheet" href="{$baseurl}css/main_{($rtl) ? 'rtl' : 'ltr'}.css?v={$css}">


Commit: 053bad7b115c39a474215b3fc6efc3229104106d
    https://github.com/scummvm/scummvm-web/commit/053bad7b115c39a474215b3fc6efc3229104106d
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
WEB: Fix screenshots in development

Changed paths:
    public_html/index.php


diff --git a/public_html/index.php b/public_html/index.php
index f88869ab..c96ac8b9 100644
--- a/public_html/index.php
+++ b/public_html/index.php
@@ -4,9 +4,11 @@ namespace ScummVM;
 /**
  * Development only
  * Don't re-route static file requests to index.php
+ * And change directory context to public_html
  */
 if (isset($_SERVER['SERVER_SOFTWARE']) &&
 \preg_match("/PHP [\d\.]+ Development Server/",$_SERVER['SERVER_SOFTWARE'])) {
+  chdir('public_html');
   if (\preg_match('/\.(?:png|jpg|jpeg|gif|css|js)/', $_SERVER["REQUEST_URI"])) {
     return false;
   }
@@ -22,7 +24,7 @@ global $lang, $available_languages;
 $languages = array_slice(scandir(DIR_LANG),2);
 $available_languages = [];
 foreach ($languages as $l) {
-    if ($lang === DEFAULT_LOCALE) {
+    if ($l === DEFAULT_LOCALE) {
       continue;
     }
 


Commit: 89cf4801e0f2b33b9d5e7378e3c7d64b8d0eeb1f
    https://github.com/scummvm/scummvm-web/commit/89cf4801e0f2b33b9d5e7378e3c7d64b8d0eeb1f
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
WEB: Fix menu links for localized pages

Changed paths:
    templates/components/menu_group.tpl


diff --git a/templates/components/menu_group.tpl b/templates/components/menu_group.tpl
index 4dc48690..68594022 100644
--- a/templates/components/menu_group.tpl
+++ b/templates/components/menu_group.tpl
@@ -4,6 +4,6 @@
 		<label for="{$menu->getClass()}">{eval var=$menu->getName()}</label>
 	</dt>
 	{foreach from=$menu->getEntries() key=text item=url}
-		<dd><span class="bullet"></span><a href="{$lang}{eval var=$url}">{eval var=$text}</a></dd>
+		<dd><span class="bullet"></span><a href="{eval var=$url|regex_replace:"/^\//":"$lang/"}">{eval var=$text}</a></dd>
 	{/foreach}
 </dl>


Commit: cae79c85e33f83913d83ccee431ce9002e69f7bc
    https://github.com/scummvm/scummvm-web/commit/cae79c85e33f83913d83ccee431ce9002e69f7bc
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
L10N: Add new smarty modifier function to add lang url path

Changed paths:
    include/Controller.php
    public_html/index.php


diff --git a/include/Controller.php b/include/Controller.php
index 73ae47b3..49b23088 100644
--- a/include/Controller.php
+++ b/include/Controller.php
@@ -53,6 +53,7 @@ class Controller
 
         /* Give Smarty-template access to date(). */
         $this->smarty->registerPlugin('modifier', 'date_localized', array(&$this, 'dateLocalizedSmartyModifier'));
+        $this->smarty->registerPlugin('modifier', 'lang', array(&$this, 'langModifier'));
 
         $this->css_files = array();
         $this->js_files = array();
@@ -78,7 +79,7 @@ class Controller
             'menus' => $menus,
             'pageurl' => $pageurl,
             'available_languages' => $available_languages,
-            'lang' => $lang === DEFAULT_LOCALE ? '' : $lang,
+            'lang' => $lang,
             'rtl' => $rtl,
         );
         $this->smarty->assign($vars);
@@ -104,6 +105,27 @@ class Controller
         return $string;
     }
 
+    public function langModifier($path) {
+        global $lang;
+        if ($lang == DEFAULT_LOCALE || !$lang) {
+            return $path;
+        }
+
+        // Absolute path (https://www.scummvm.org/*)
+        $host = $_SERVER['HTTP_HOST'];
+        if (\preg_match("/$host/i", $path)) {
+            return preg_replace("/$host(\/|$)?/i", "$host/$lang", $path);
+        }
+
+        // Relative path (/screenshots/)
+        if (\preg_match("/^\//", $path)) {
+            return "/$lang" . $path;
+        }
+
+        // Can't replace
+        return $path;
+    }
+
     /**
      * Formating of dateAs, registered as a modifier for Smarty templates.
      */
diff --git a/public_html/index.php b/public_html/index.php
index c96ac8b9..c936f962 100644
--- a/public_html/index.php
+++ b/public_html/index.php
@@ -24,16 +24,13 @@ global $lang, $available_languages;
 $languages = array_slice(scandir(DIR_LANG),2);
 $available_languages = [];
 foreach ($languages as $l) {
-    if ($l === DEFAULT_LOCALE) {
-      continue;
-    }
-
     $available_languages[$l] = \locale_get_display_name($l, $l);
 }
 
 $langs = join("|", array_keys($available_languages));
 $langMatches = [];
-if (\preg_match("/^\/($langs)\//i", $_SERVER['REQUEST_URI'], $langMatches)) {
+
+if (\preg_match("/^\/($langs)(\/|$)/i", $_SERVER['REQUEST_URI'], $langMatches)) {
     $lang = $langMatches[1];
 }
 


Commit: a656fe3c7169dfd2f409f3132fbe5afaca6ce03d
    https://github.com/scummvm/scummvm-web/commit/a656fe3c7169dfd2f409f3132fbe5afaca6ce03d
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
L10N: Update templates to use new lang modifier

Changed paths:
    data/menus.yaml
    templates/base/base.tpl
    templates/components/compatibility_details.tpl
    templates/components/lang_menu.tpl
    templates/components/list_items.tpl
    templates/components/menu_group.tpl
    templates/layout/header.tpl
    templates/pages/compatibility.tpl
    templates/pages/credits.tpl
    templates/pages/downloads.tpl
    templates/pages/faq.tpl
    templates/pages/game_demos.tpl
    templates/pages/games.tpl
    templates/pages/index.tpl
    templates/pages/news.tpl
    templates/pages/press_snowberry.tpl
    templates/pages/screenshots.tpl
    templates/pages/screenshots_category.tpl


diff --git a/data/menus.yaml b/data/menus.yaml
index 968c3708..003c29bc 100644
--- a/data/menus.yaml
+++ b/data/menus.yaml
@@ -2,7 +2,7 @@
   class: menu-main
   links:
     - name: '{#menuMainHome#}'
-      href: '{$baseurl}'
+      href: '{$baseurl|lang}'
     - name: '{#menuMainScreenshots#}'
       href: /screenshots/
     - name: '{#menuMainForums#}'
diff --git a/templates/base/base.tpl b/templates/base/base.tpl
index 446f74ab..5402ac2b 100644
--- a/templates/base/base.tpl
+++ b/templates/base/base.tpl
@@ -3,10 +3,10 @@
 <head>
 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 	<meta name="viewport" content="width=device-width, initial-scale=1">
-	<base href="{$baseurl}">
-	<link rel="stylesheet" href="{$baseurl}css/main.css">
-	<link rel="alternate" type="application/atom+xml" title="{#indexAtomFeed#}" href="{$baseurl}feeds/atom/">
-	<link rel="alternate" type="application/rss+xml" title="{#indexRSSFeed#}" href="{$baseurl}feeds/rss/">
+	<base href="{$baseurl|lang}">
+	<link rel="stylesheet" href="/css/main.css">
+	<link rel="alternate" type="application/atom+xml" title="{#indexAtomFeed#}" href="{$baseurl|lang}feeds/atom/">
+	<link rel="alternate" type="application/rss+xml" title="{#indexRSSFeed#}" href="{$baseurl|lang}feeds/rss/">
 	<link rel="apple-touch-icon" href="/images/scummvm.png">
 	<title>ScummVM :: {block name=title}{/block}</title>
 </head>
diff --git a/templates/components/compatibility_details.tpl b/templates/components/compatibility_details.tpl
index eebef523..183b8e4d 100644
--- a/templates/components/compatibility_details.tpl
+++ b/templates/components/compatibility_details.tpl
@@ -27,7 +27,7 @@
 		</tbody>
 	</table>
 	<p class="bottom-link">
-		<a href="/compatibility/{$version}/">{#compatibilityDetailsBack#}</a>
+		<a href="{'/compatibility/'|lang}{$version}/">{#compatibilityDetailsBack#}</a>
 	</p>
 {/capture}
 
diff --git a/templates/components/lang_menu.tpl b/templates/components/lang_menu.tpl
index 1235b5bf..8438fe3f 100644
--- a/templates/components/lang_menu.tpl
+++ b/templates/components/lang_menu.tpl
@@ -3,12 +3,15 @@
     <dt>
         <label for="menu-lang">Language</label>
     </dt>
-    <dd>
-        <span class="bullet"></span><a href="{$pageurl}">English</a>
-    </dd>
     {foreach from=$available_languages key=key item=item}
+    {if $key != $lang}
     <dd>
-        <span class="bullet"></span><a href="{$key}{$pageurl}">{$item}</a>
+        {if $key == $smarty.const.DEFAULT_LOCALE}
+        <span class="bullet"></span><a href="{$pageurl}">{$item}</a>
+        {else}
+        <span class="bullet"></span><a href="/{$key}{$pageurl}">{$item}</a>
+        {/if}
     </dd>
+    {/if}
     {/foreach}
 </dl>
diff --git a/templates/components/list_items.tpl b/templates/components/list_items.tpl
index 6fe0b7fb..593c3ea9 100644
--- a/templates/components/list_items.tpl
+++ b/templates/components/list_items.tpl
@@ -39,7 +39,7 @@
     {elseif $item instanceof ScummVM\Objects\Screenshot}
       <li class="file">
         <span class="sprite-games-{$item->getCategory()} sprite"></span>
-				<a href="/screenshots/{$arr.category}/{$item->getCategory()}/">{$item->getName()}</a>
+				<a href="{'/screenshots/'|lang}{$arr.category}/{$item->getCategory()}/">{$item->getName()}</a>
         <span class="green">({$item->getFiles()|@count} shots)</span>
       </li>
     {/if}
diff --git a/templates/components/menu_group.tpl b/templates/components/menu_group.tpl
index 68594022..5d64cc30 100644
--- a/templates/components/menu_group.tpl
+++ b/templates/components/menu_group.tpl
@@ -4,6 +4,6 @@
 		<label for="{$menu->getClass()}">{eval var=$menu->getName()}</label>
 	</dt>
 	{foreach from=$menu->getEntries() key=text item=url}
-		<dd><span class="bullet"></span><a href="{eval var=$url|regex_replace:"/^\//":"$lang/"}">{eval var=$text}</a></dd>
+		<dd><span class="bullet"></span><a href="{eval var=$url|lang}">{eval var=$text}</a></dd>
 	{/foreach}
 </dl>
diff --git a/templates/layout/header.tpl b/templates/layout/header.tpl
index 516d49b0..3ab2453a 100644
--- a/templates/layout/header.tpl
+++ b/templates/layout/header.tpl
@@ -7,7 +7,7 @@
   <div class="row topper">
     <div class="col-1-2 col-sm-1">
       <img class="logo maniac hide-small" src="/images/maniac-half.png" alt="Maniac Mansion kids">
-      <a href="{$baseurl}"><img class="logo" src="/images/scummvm_logo.png" alt="{#indexLogo#}"></a>
+      <a href="{$baseurl|lang}"><img class="logo" src="/images/scummvm_logo.png" alt="{#indexLogo#}"></a>
     </div>
     <div class="col-1-2 hide-small float_right">
       <span class="scummvm float_right">Script Creation Utility for Maniac Mansion Virtual Machine</span>
diff --git a/templates/pages/compatibility.tpl b/templates/pages/compatibility.tpl
index 973867f9..09a2eaec 100644
--- a/templates/pages/compatibility.tpl
+++ b/templates/pages/compatibility.tpl
@@ -10,7 +10,7 @@
       {#compatibilityDevContent#}
       <select name="versions" class="version-select">
         {foreach from=$versions item=ver}
-          <option {($version==$ver) ? 'selected' : ''} value="/compatibility/{$ver}/">{$ver}</option>
+          <option {($version==$ver) ? 'selected' : ''} value="{'/compatibility/'|lang}{$ver}/">{$ver}</option>
         {/foreach}
       </select>)
     </p>
@@ -71,7 +71,7 @@
         {assign var="pct_class" value=$support_level_class.$x}
         {assign var="support_level" value=$support_level_header.$x}
         <tr class="color{cycle values='2,0'}">
-          <td class="gameFullName"><a href="/compatibility/{$version}/{$game->getGame()->getId()}/">{$game->getGame()->getName()}</a></td>
+          <td class="gameFullName"><a href="{'/compatibility/'|lang}{$version}/{$game->getGame()->getId()}/">{$game->getGame()->getName()}</a></td>
           <td class="gameShortName">{$game->getGame()->getId()}</td>
           <td class="gameDatafiles">
           {if $game->getDatafiles()}
diff --git a/templates/pages/credits.tpl b/templates/pages/credits.tpl
index ef19a3c1..12af2d86 100644
--- a/templates/pages/credits.tpl
+++ b/templates/pages/credits.tpl
@@ -3,18 +3,18 @@
   <div class="navigation col-1-1">
     <h4 class="subhead">{#screenshotsNavigation#}</h4>
     <ul>
-      {foreach from=$credits item=csection}      
+      {foreach from=$credits item=csection}
         {if $csection->getSubsections()|@count > 0}
           {foreach from=$csection->getSubsections() item=subcsection}
-          <li><a href="/credits/#{$subcsection->getAnchor()}">{$subcsection->getTitle()}</a></li>
-          {/foreach}   
+          <li><a href="{'/credits/'|lang}#{$subcsection->getAnchor()}">{$subcsection->getTitle()}</a></li>
+          {/foreach}
         {else}
-          <li><a href="/credits/#{$csection->getAnchor()}">{$csection->getTitle()}</a></li>
-        {/if}   
-      {/foreach}    
+          <li><a href="{'/credits/'|lang}#{$csection->getAnchor()}">{$csection->getTitle()}</a></li>
+        {/if}
+      {/foreach}
     </ul>
-  </div>  
-</div>  
+  </div>
+</div>
 {/capture}
 
 {foreach from=$credits item=csection name=credits}
@@ -49,5 +49,5 @@
   {else}
     {include file="components/box.tpl" head=$csection->getTitle() id=$csection->getAnchor() content=$smarty.capture.content}
   {/if}
-  
+
 {/foreach}
diff --git a/templates/pages/downloads.tpl b/templates/pages/downloads.tpl
index b90332fa..22e4447b 100644
--- a/templates/pages/downloads.tpl
+++ b/templates/pages/downloads.tpl
@@ -4,7 +4,7 @@
 		<h4 class="subhead">{#downloadsHeader#}</h4>
 		<ul>
 			{foreach from=$sections item=arr}
-			<li><a href="/downloads/#{$arr.anchor}">{eval var=$arr.title}</a></li>
+			<li><a href="{'/downloads'/|lang}#{$arr.anchor}">{eval var=$arr.title}</a></li>
 			{/foreach}
 		</ul>
 	</div>
diff --git a/templates/pages/faq.tpl b/templates/pages/faq.tpl
index 8e6daafc..88c54687 100644
--- a/templates/pages/faq.tpl
+++ b/templates/pages/faq.tpl
@@ -3,12 +3,12 @@
 <dl>
   {foreach from=$contents item=section name='toc_loop'}
     {assign var='toc_num' value=$smarty.foreach.toc_loop.iteration}
-    <dt>{$toc_num}. <a href="/faq/#{$toc_num}">{$section->getTitle()}</a></dt>
+    <dt>{$toc_num}. <a href="{'/faq'/|lang}#{$toc_num}">{$section->getTitle()}</a></dt>
     <dd>
       <dl>
       {foreach from=$section->getTOC() key=href item=name name='toc_section_loop'}
         {assign var='toc_section_num' value=$smarty.foreach.toc_section_loop.iteration}
-        <dt>{$toc_num}.{$toc_section_num}. <a href="/faq/#{$toc_num}_{$toc_section_num}">{$name}</a></dt>
+        <dt>{$toc_num}.{$toc_section_num}. <a href="{'/faq'/|lang}#{$toc_num}_{$toc_section_num}">{$name}</a></dt>
       {/foreach}
       </dl>
     </dd>
@@ -24,7 +24,7 @@
 				<dl>
 					{foreach from=$section->getTOC() key=href item=name name='question_loop'}
 						{assign var='question_num' value=$smarty.foreach.question_loop.iteration}
-						<dt>{$section_num}.{$question_num}. <a href="/faq/#{$section_num}_{$question_num}">{$name}</a></dt>
+						<dt>{$section_num}.{$question_num}. <a href="{$lang}/faq/#{$section_num}_{$question_num}">{$name}</a></dt>
 					{/foreach}
 				</dl>
 				{foreach from=$section->getEntries() item=entry name='entry_loop'}
diff --git a/templates/pages/game_demos.tpl b/templates/pages/game_demos.tpl
index 181ad359..1c513623 100644
--- a/templates/pages/game_demos.tpl
+++ b/templates/pages/game_demos.tpl
@@ -6,7 +6,7 @@
 			<h4 class="subhead">{#gamesDemosHeading#}</h4>
 			<ul>
 			{foreach $demos $group}
-				<li><a href="/demos/#{$group.href}">{$group.name}</a></li>
+				<li><a href="{'/demos/'|lang}#{$group.href}">{$group.name}</a></li>
 			{/foreach}
 			</ul>
 		</div>
diff --git a/templates/pages/games.tpl b/templates/pages/games.tpl
index 5a7eb85b..885e0083 100644
--- a/templates/pages/games.tpl
+++ b/templates/pages/games.tpl
@@ -4,7 +4,7 @@
       <h4 class="subhead">{#gamesHeader#}</h4>
       <ul>
       {foreach from=$sections item=arr}
-        <li><a href="/games/#{$arr.anchor}">{eval var=$arr.title}</a></li>
+        <li><a href="{'/games/|lang}'#{$arr.anchor}">{eval var=$arr.title}</a></li>
       {/foreach}
       </ul>
     </div>
diff --git a/templates/pages/index.tpl b/templates/pages/index.tpl
index 371074ba..b217b88b 100644
--- a/templates/pages/index.tpl
+++ b/templates/pages/index.tpl
@@ -4,9 +4,9 @@
 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 	<meta name="viewport" content="width=device-width, initial-scale=1">
 	<meta name="referrer" content="no-referrer">
-  	<base href="{$baseurl}">
-  	<link rel="alternate" type="application/atom+xml" title="{#indexAtomFeed#}" href="{$baseurl}feeds/atom/">
-	<link rel="alternate" type="application/rss+xml" title="{#indexRSSFeed#}" href="{$baseurl}feeds/rss/">
+  	<base href="{$baseurl|lang}">
+  	<link rel="alternate" type="application/atom+xml" title="{#indexAtomFeed#}" href="{$baseurl|lang}/feeds/atom/">
+	<link rel="alternate" type="application/rss+xml" title="{#indexRSSFeed#}" href="{$baseurl|lang}/feeds/rss/">
 	<title>ScummVM :: {$title}</title>
 	<!-- Favicon -->
 	<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=oLBEjaJ9ag">
@@ -24,18 +24,20 @@
 	<meta property="og:image:height" content="630">
 	<meta property="og:title" content="ScummVM">
 	<meta property="og:description" content="ScummVM is a collection of game engines for playing classic graphical RPGs and point-and-click adventure games on modern hardware.">
-	<meta property="og:url" content="https://www.scummvm.org">
+	<meta property="og:url" content="{'https://www.scummvm.org'|lang}">
 	<meta property="og:image" content="https://www.scummvm.org/images/og-image.jpg">
 	<!-- Translations -->
 	{foreach from=$available_languages key=key item=item}
-    <link rel="alternate" hreflang="{$key}" href="{$baseurl}{$key}{$pageurl}">
+	{if $lang != $key}
+    	<link rel="alternate" hreflang="{$key}" href="{$baseurl}{$key}{$pageurl}">
+	{/if}
     {/foreach}
 	{* Cache bust CSS if making major changes *}
 	{$css = "2.0.0"}
-	<link rel="stylesheet" href="{$baseurl}css/main_{($rtl) ? 'rtl' : 'ltr'}.css?v={$css}">
+	<link rel="stylesheet" href="/css/main_{($rtl) ? 'rtl' : 'ltr'}.css?v={$css}">
 	{* Page specific, or other extra CSS rules. *}
 	{foreach from=$css_files item=filename}
-	<link rel="stylesheet" href="{$baseurl}css/{$filename}">
+	<link rel="stylesheet" href="/css/{$filename}">
 	{/foreach}
 
 	{if $smarty.cookies.cookie_consent == "true"}
@@ -67,7 +69,7 @@
 		<header class="site-header">
 			<div class="logo">
 					<img class="background hide-small" src="/images/maniac-half.png" alt="Maniac Mansion kids">
-					<a href="{$baseurl}">
+					<a href="{$baseurl|lang}">
 						<img class="foreground" src="/images/scummvm_logo.png" alt="{#indexLogo#}">
 					</a>
 			</div>
diff --git a/templates/pages/news.tpl b/templates/pages/news.tpl
index 95cb93b8..4848828e 100644
--- a/templates/pages/news.tpl
+++ b/templates/pages/news.tpl
@@ -20,9 +20,9 @@
 {if is_bool($news_archive_link) && $news_archive_link}
 <p class="bottom-link">
 	<span class="feeds float_left">
-		<a href="/feeds/atom/">Atom</a> |
-		<a href="/feeds/rss/">RSS</a>
+		<a href="{'/feeds/atom/'|lang}">Atom</a> |
+		<a href="{'/feeds/rss/'|lang}">RSS</a>
 	</span>
-	<a href="/news/archive/" class="float_right">{#newsMoreNews#}</a>
+	<a href="{'/news/archive/'|lang}" class="float_right">{#newsMoreNews#}</a>
 </p>
 {/if}
diff --git a/templates/pages/press_snowberry.tpl b/templates/pages/press_snowberry.tpl
index 6d519622..9cc91f26 100644
--- a/templates/pages/press_snowberry.tpl
+++ b/templates/pages/press_snowberry.tpl
@@ -30,7 +30,7 @@ ScummVM is a program which allows you to run certain classic graphical point-and
 </p>
 
 <p>
-More information is available here: <a href="/">http://www.scummvm.org/</a>
+More information is available here: <a href="{'/'|lang}">http://www.scummvm.org/</a>
 </p>
 
 <h4>About Gobliiins 4</h4>
diff --git a/templates/pages/screenshots.tpl b/templates/pages/screenshots.tpl
index d4c08b3b..152f2c0a 100644
--- a/templates/pages/screenshots.tpl
+++ b/templates/pages/screenshots.tpl
@@ -4,7 +4,7 @@
       <h4 class="subhead">{#screenshotsNavigation#}</h4>
       <ul>
       {foreach from=$screenshots item=arr}
-        <li><a href="/screenshots/#{$arr.category}">{eval var=$arr.title}</a></li>
+        <li><a href="{'/screenshots/'|lang}#{$arr.category}">{eval var=$arr.title}</a></li>
       {/foreach}
       </ul>
     </div>
@@ -17,7 +17,7 @@
 {capture "content"}
   {foreach from=$screenshots item=arr}
     <div class="subhead" id="{$arr.category}">
-      <a href="/screenshots/{$arr.category}/">{$arr.title}</a>
+      <a href="{'/screenshots/'|lang}{$arr.category}/">{$arr.title}</a>
     </div>
     <div class="scr-content scr-content-{$arr.category}">
       {include file='components/list_items.tpl' list=$arr.games type='games'}
diff --git a/templates/pages/screenshots_category.tpl b/templates/pages/screenshots_category.tpl
index 2a50bde8..172eebd2 100644
--- a/templates/pages/screenshots_category.tpl
+++ b/templates/pages/screenshots_category.tpl
@@ -6,7 +6,7 @@
     {/if}
     <div class="gallery">
       <div class="row">
-        <h3 class="subhead"><a href="/screenshots/{$category}/{$g->getCategory()}/">{$g->getName()}</a></h3>
+        <h3 class="subhead"><a href="{'/screenshots/'|lang}{$category}/{$g->getCategory()}/">{$g->getName()}</a></h3>
         {foreach from=$g->getFiles() item=fdata name=game_loop}
           <div class="col-1-4 col-md-1">
             <div class="card">
@@ -30,9 +30,9 @@
 {include file="components/box.tpl" head=#screenshotsCategoryHeading# content=$smarty.capture.content}
 
 {if $game}
-  <a href="/screenshots/{$category}/">{#screenshotsCategoryBack#}</a>
+  <a href="{'/screenshots/'|lang}{$category}/">{#screenshotsCategoryBack#}</a>
 {else}
-  <a href="/screenshots/">{#screenshotsCategoryBack#}</a>
+  <a href="{'/screenshots/'|lang}">{#screenshotsCategoryBack#}</a>
 {/if}
 
 <script>


Commit: 6d0899847bb51e9bb92e36ab89147566b6d0fc43
    https://github.com/scummvm/scummvm-web/commit/6d0899847bb51e9bb92e36ab89147566b6d0fc43
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
WEB: Cache based on locale

Changed paths:
    include/Models/BasicModel.php


diff --git a/include/Models/BasicModel.php b/include/Models/BasicModel.php
index ba9a7ed8..f016f45f 100644
--- a/include/Models/BasicModel.php
+++ b/include/Models/BasicModel.php
@@ -22,7 +22,8 @@ abstract class BasicModel
         if ($key) {
             $key = "_$key";
         }
-        $cacheKey = str_replace("\\", "_", \get_called_class() . $key);
+        global $lang;
+        $cacheKey = str_replace("\\", "_", \get_called_class() . $key . "_$lang");
         self::$cache->set($cacheKey, $data, 3600);
     }
 
@@ -31,7 +32,8 @@ abstract class BasicModel
         if ($key) {
             $key = "_$key";
         }
-        $cacheKey = str_replace("\\", "_", \get_called_class() . $key);
+        global $lang;
+        $cacheKey = str_replace("\\", "_", \get_called_class() . $key . "_$lang");
         $cachedData = self::$cache->get($cacheKey);
         return $cachedData;
     }


Commit: 9b79a7590e6015f67f4dbe07ec45e33256409339
    https://github.com/scummvm/scummvm-web/commit/9b79a7590e6015f67f4dbe07ec45e33256409339
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
L10N: Add backward compatibility support for users with lang params or cookies

Changed paths:
    public_html/index.php


diff --git a/public_html/index.php b/public_html/index.php
index c936f962..0b2e9142 100644
--- a/public_html/index.php
+++ b/public_html/index.php
@@ -27,6 +27,18 @@ foreach ($languages as $l) {
     $available_languages[$l] = \locale_get_display_name($l, $l);
 }
 
+// Backwards compatibility for lang query param & cookie
+if (!empty($_GET['lang'])) {
+  $lang = $_GET['lang'];
+  $uri = str_replace("?lang=$lang", "", $_SERVER['REQUEST_URI']);
+  header("Location: " . "/$lang" . $uri);
+} elseif (!empty($_COOKIE['lang'])) {
+  $lang = $_COOKIE['lang'];
+  unset($_COOKIE['lang']);
+  setcookie("lang", null, -1);
+  header("Location: " . "/$lang" . $_SERVER['REQUEST_URI']);
+}
+
 $langs = join("|", array_keys($available_languages));
 $langMatches = [];
 


Commit: 12965cf65871f9f8779503db4f292bc1e9ace6a9
    https://github.com/scummvm/scummvm-web/commit/12965cf65871f9f8779503db4f292bc1e9ace6a9
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
WEB: Fix template syntax errors

Changed paths:
    templates/pages/downloads.tpl
    templates/pages/faq.tpl
    templates/pages/games.tpl


diff --git a/templates/pages/downloads.tpl b/templates/pages/downloads.tpl
index 22e4447b..e876ec0c 100644
--- a/templates/pages/downloads.tpl
+++ b/templates/pages/downloads.tpl
@@ -4,7 +4,7 @@
 		<h4 class="subhead">{#downloadsHeader#}</h4>
 		<ul>
 			{foreach from=$sections item=arr}
-			<li><a href="{'/downloads'/|lang}#{$arr.anchor}">{eval var=$arr.title}</a></li>
+			<li><a href="{'/downloads/'|lang}#{$arr.anchor}">{eval var=$arr.title}</a></li>
 			{/foreach}
 		</ul>
 	</div>
diff --git a/templates/pages/faq.tpl b/templates/pages/faq.tpl
index 88c54687..d65759d9 100644
--- a/templates/pages/faq.tpl
+++ b/templates/pages/faq.tpl
@@ -3,12 +3,12 @@
 <dl>
   {foreach from=$contents item=section name='toc_loop'}
     {assign var='toc_num' value=$smarty.foreach.toc_loop.iteration}
-    <dt>{$toc_num}. <a href="{'/faq'/|lang}#{$toc_num}">{$section->getTitle()}</a></dt>
+    <dt>{$toc_num}. <a href="{'/faq/'|lang}#{$toc_num}">{$section->getTitle()}</a></dt>
     <dd>
       <dl>
       {foreach from=$section->getTOC() key=href item=name name='toc_section_loop'}
         {assign var='toc_section_num' value=$smarty.foreach.toc_section_loop.iteration}
-        <dt>{$toc_num}.{$toc_section_num}. <a href="{'/faq'/|lang}#{$toc_num}_{$toc_section_num}">{$name}</a></dt>
+        <dt>{$toc_num}.{$toc_section_num}. <a href="{'/faq/'|lang}#{$toc_num}_{$toc_section_num}">{$name}</a></dt>
       {/foreach}
       </dl>
     </dd>
@@ -24,7 +24,7 @@
 				<dl>
 					{foreach from=$section->getTOC() key=href item=name name='question_loop'}
 						{assign var='question_num' value=$smarty.foreach.question_loop.iteration}
-						<dt>{$section_num}.{$question_num}. <a href="{$lang}/faq/#{$section_num}_{$question_num}">{$name}</a></dt>
+						<dt>{$section_num}.{$question_num}. <a href="{'/faq/'|lang}#{$section_num}_{$question_num}">{$name}</a></dt>
 					{/foreach}
 				</dl>
 				{foreach from=$section->getEntries() item=entry name='entry_loop'}
diff --git a/templates/pages/games.tpl b/templates/pages/games.tpl
index 885e0083..90a3bffd 100644
--- a/templates/pages/games.tpl
+++ b/templates/pages/games.tpl
@@ -4,7 +4,7 @@
       <h4 class="subhead">{#gamesHeader#}</h4>
       <ul>
       {foreach from=$sections item=arr}
-        <li><a href="{'/games/|lang}'#{$arr.anchor}">{eval var=$arr.title}</a></li>
+        <li><a href="{'/games/'|lang}#{$arr.anchor}">{eval var=$arr.title}</a></li>
       {/foreach}
       </ul>
     </div>


Commit: 35039fedb30268601901265fcde2e402d1138c53
    https://github.com/scummvm/scummvm-web/commit/35039fedb30268601901265fcde2e402d1138c53
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
WEB: Update news and feed templates to use canonical language URLs

Changed paths:
    include/Controller.php
    templates/pages/feed_atom.tpl
    templates/pages/feed_rss.tpl
    templates/pages/news.tpl


diff --git a/include/Controller.php b/include/Controller.php
index 49b23088..19f86ca6 100644
--- a/include/Controller.php
+++ b/include/Controller.php
@@ -114,7 +114,7 @@ class Controller
         // Absolute path (https://www.scummvm.org/*)
         $host = $_SERVER['HTTP_HOST'];
         if (\preg_match("/$host/i", $path)) {
-            return preg_replace("/$host(\/|$)?/i", "$host/$lang", $path);
+            return preg_replace("/$host(\/|$)?/i", "$host/$lang/", $path);
         }
 
         // Relative path (/screenshots/)
diff --git a/templates/pages/feed_atom.tpl b/templates/pages/feed_atom.tpl
index 46e40022..715cedb1 100644
--- a/templates/pages/feed_atom.tpl
+++ b/templates/pages/feed_atom.tpl
@@ -2,16 +2,16 @@
 {assign var='timezone_offset' value=$news[0]->getDate()|date_format:'Z'}
 {assign var='updated' value=$news[0]->getDate()-$timezone_offset}
 <?xml version="1.0" encoding="UTF-8" ?>
-<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom">
-	<id>{$baseurl}</id>
-	<link rel="alternate" type="text/html" href="http://www.scummvm.org" />
-	<link rel="self" type="application/atom+xml" href="{$baseurl}feeds/atom/" />
+<feed xml:lang="{$lang}" xmlns="http://www.w3.org/2005/Atom">
+	<id>{$baseurl|lang}</id>
+	<link rel="alternate" type="text/html" href="{$baseurl|lang}" />
+	<link rel="self" type="application/atom+xml" href="{$baseurl|lang}feeds/atom/" />
 	<title type="text">{#feedAtomTitle#}</title>
 	<subtitle type="html"><![CDATA[{#feedAtomDescription#}]]></subtitle>
 	<icon>{$baseurl}favicon.ico</icon>
 	<author>
 		<name>ScummVM team</name>
-		<uri>http://www.scummvm.org/</uri>
+		<uri>{$baseurl|lang}/</uri>
 	</author>
 	<updated>{$updated|date_format:'Y-m-d\TH:i:s\Z'}</updated>
 	{foreach from=$news item=n}
@@ -20,13 +20,13 @@
 		{assign var='news_filename' value=$n->getFilename()|substr:'0':'-5'}
     {assign var='link' value=$n->getLink()}
 
-		<entry xml:lang="en">
-			<id>{$baseurl}news/archive/#{$news_filename}</id>
-			<link rel="alternate" href="{$link}" />
+		<entry xml:lang="{$lang}">
+			<id>{$baseurl|lang}news/archive/#{$n->getDate()|date_format:'Y-m-d'}{if $news_filename|strlen == 9}{$news_filename|substr:'-1'}{/if}</id>
+			<link rel="alternate" href="{$link|lang}" />
 			<updated>{$updated|date_format:'Y-m-d\TH:i:s\Z'}</updated>
 			<published>{$updated|date_format:'Y-m-d\TH:i:s\Z'}</published>
 			<title type="html">{htmlspecialchars($n->getTitle())}</title>
-			<content type="html" xml:base="http://www.scummvm.org">{htmlspecialchars($n->getContent())}</content>
+			<content type="html" xml:base="{$baseurl|lang}">{htmlspecialchars($n->getContent())}</content>
 			{if $n->getAuthor() != ''}
 			<author><name>{$n->getAuthor()}</name></author>
 			{/if}
diff --git a/templates/pages/feed_rss.tpl b/templates/pages/feed_rss.tpl
index 5ee61137..39f04d4b 100644
--- a/templates/pages/feed_rss.tpl
+++ b/templates/pages/feed_rss.tpl
@@ -2,10 +2,10 @@
 <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
 	<channel>
 		<title>{#feedRSSTitle#}</title>
-		<link>http://www.scummvm.org/</link>
-		<atom:link rel="self" type="application/rss+xml" href="{$baseurl}feeds/rss/" />
+		<link>{$baseurl|lang}</link>
+		<atom:link rel="self" type="application/rss+xml" href="{$baseurl|lang}feeds/rss/" />
 		<description>{#feedRSSDescription#}</description>
-		<language>en</language>
+		<language>{$lang}</language>
 		{foreach from=$news item=n}
 		{assign var='news_filename' value=$n->getFilename()|substr:'0':'-4'}
 		<item>
@@ -15,8 +15,8 @@
 			{if $n->getAuthor() != ''}
 			<author>nospam at scummvm.org ({$n->getAuthor()})</author>
 			{/if}
-			<guid isPermaLink='true'>{$baseurl}news/archive/#{$n->getDate()|date_format:'Y-m-d'}{if $news_filename|strlen == 9}{$news_filename|substr:'-1'}{/if}</guid>
-			<link>{$n->getLink()}/</link>
+			<guid isPermaLink='true'>{$baseurl|lang}news/archive/#{$n->getDate()|date_format:'Y-m-d'}{if $news_filename|strlen == 9}{$news_filename|substr:'-1'}{/if}</guid>
+			<link>{$n->getLink()|lang}/</link>
 		</item>
 		{/foreach}
 	</channel>
diff --git a/templates/pages/news.tpl b/templates/pages/news.tpl
index 4848828e..82eab574 100644
--- a/templates/pages/news.tpl
+++ b/templates/pages/news.tpl
@@ -2,7 +2,7 @@
 	{$news_filename = $news->getFilename()|substr:'0':'-4'}
 	{$id = "{$news->getDate()|date_format:"%Y-%m-%d"}{if $news_filename|strlen == 9}{$news_filename|substr:'-1'}{/if}"}
 	{capture "head"}
-		<a href="{$news->getLink()}/">
+		<a href="{$news->getLink()|lang}/">
 			<span class="news-date">{$news->getDate()|date_localized}</span>:
 			{$news->getTitle()}
 		</a>


Commit: 2a7620aff8ca54b7b81c9008a1522b3a7aff5b78
    https://github.com/scummvm/scummvm-web/commit/2a7620aff8ca54b7b81c9008a1522b3a7aff5b78
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
DATA: Rename faq L10N files

Changed paths:
  A data/faq-xml.de.xml
  A data/faq-xml.ru.xml
  R data/faq-xml.de_DE.xml
  R data/faq-xml.ru_RU.xml


diff --git a/data/faq-xml.de_DE.xml b/data/faq-xml.de.xml
similarity index 100%
rename from data/faq-xml.de_DE.xml
rename to data/faq-xml.de.xml
diff --git a/data/faq-xml.ru_RU.xml b/data/faq-xml.ru.xml
similarity index 100%
rename from data/faq-xml.ru_RU.xml
rename to data/faq-xml.ru.xml


Commit: 29f694654a523f615b650953fa260afa8061fd13
    https://github.com/scummvm/scummvm-web/commit/29f694654a523f615b650953fa260afa8061fd13
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
WEB: Fix images in localized pages

Changed paths:
    include/Constants.php
    include/Objects/Screenshot.php


diff --git a/include/Constants.php b/include/Constants.php
index eed1fb3b..91cdaf78 100644
--- a/include/Constants.php
+++ b/include/Constants.php
@@ -42,7 +42,7 @@ class Constants
         define('DIR_LANG', DIR_DATA . '/localization');
         define('DIR_COMPAT', DIR_DATA . '/compatibility');
         define('DIR_DOWNLOADS', '/downloads');
-        define('DIR_SCREENSHOTS', 'data/screenshots/');
+        define('DIR_SCREENSHOTS', '/data/screenshots');
 
         /* Locale */
         define('DEFAULT_LOCALE', 'en');
diff --git a/include/Objects/Screenshot.php b/include/Objects/Screenshot.php
index e9b39ace..548b3393 100644
--- a/include/Objects/Screenshot.php
+++ b/include/Objects/Screenshot.php
@@ -23,12 +23,12 @@ class Screenshot extends DataObject
         $this->filename = $this->assignFromArray('filemask', $data, true);
         $this->game = $this->assignFromArray($data['id'], $games);
         $this->files = [];
-        foreach (glob(DIR_SCREENSHOTS . $this->filename) as $file) {
+        foreach (glob("./" . DIR_SCREENSHOTS . "/" . $this->filename) as $file) {
             if (\strpos($file, "_full.") > 0) {
                 continue;
             }
-            // Remove the folder and extension
-            $name = str_replace(DIR_SCREENSHOTS, "", $file);
+            // Remove the base folder and extension
+            $name = str_replace("./" . DIR_SCREENSHOTS . "/", "", $file);
             $name = \substr($name, 0, \strlen($name) - 4);
             $this->files[] = [
                 'filename' => $name,


Commit: 8b04f8d07304e0885b9a90fe56ce9a927d7e2375
    https://github.com/scummvm/scummvm-web/commit/8b04f8d07304e0885b9a90fe56ce9a927d7e2375
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
WEB: Fix sponsors pages in localized pages

Changed paths:
    data/sponsors.yaml


diff --git a/data/sponsors.yaml b/data/sponsors.yaml
index 468b9d0b..9abf54db 100644
--- a/data/sponsors.yaml
+++ b/data/sponsors.yaml
@@ -1,16 +1,16 @@
 - name: Fastly
   link: 'https://www.fastly.com'
-  image: images/sponsors/fastly.png
+  image: /images/sponsors/fastly.png
   description: CDN Provider
 - name: Manitu
   link: 'https://www.manitu.de'
-  image: images/sponsors/manitu.png
+  image: /images/sponsors/manitu.png
   description: Server & Hosting
 - name: Hex Rays
   link: 'https://www.hex-rays.com'
-  image: images/sponsors/hex-rays.png
+  image: /images/sponsors/hex-rays.png
   description: Developer Tools
 - name: Jetbrains
   link: 'https://www.jetbrains.com'
-  image: images/sponsors/jetbrains.png
+  image: /images/sponsors/jetbrains.png
   description: Developer Tools


Commit: 858b40f31dab1a7ecf7909518a08d2378a1f661a
    https://github.com/scummvm/scummvm-web/commit/858b40f31dab1a7ecf7909518a08d2378a1f661a
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
WEB: Update links in news articles to localized links

Changed paths:
    include/Objects/News.php


diff --git a/include/Objects/News.php b/include/Objects/News.php
index e8f15475..f8985e5b 100644
--- a/include/Objects/News.php
+++ b/include/Objects/News.php
@@ -26,7 +26,8 @@ class News
         $this->title = $processContent ? $this->processText($Parsedown->line($object->title)) : $Parsedown->line($object->title);
         $this->date = $object->date;
         $this->author = $object->author;
-        $this->content = $processContent ? $this->processText($Parsedown->text($object->body())) : $Parsedown->text($object->body());
+        $body = $this->localizeLinks($object->body());
+        $this->content = $processContent ? $this->processText($Parsedown->text($body)) : $Parsedown->text($body);
         $this->filename = basename($filename);
     }
 
@@ -44,6 +45,30 @@ class News
         return html_entity_decode($text, ENT_COMPAT, 'UTF-8');
     }
 
+    private function localizeLinks($body) {
+        global $lang;
+        if ($lang == DEFAULT_LOCALE || !$lang) {
+            return $body;
+        }
+        $regex = "/\[.+\]\((.+)\)/i";
+        $matches = [];
+        if (\preg_match_all($regex, $body, $matches)) {
+            foreach ($matches[1] as $url) {
+                // Don't replace FRS links or static files
+                if (\strpos($url, "/frs") || file_exists("./$url")) {
+                    continue;
+                } elseif (\preg_match("/^\//", $url)) { // Relative path (/screenshots/)
+                    $body = str_replace($url,"/$lang" . $url, $body);
+                } elseif (\strpos($url, "www.scummvm.org")) { // Absolute url (www.scummvm.org/*)
+                    $newUrl = preg_replace("/\.org(\/|$)?/i", ".org/$lang/", $url);
+                    $body = str_replace($url, $newUrl, $body);
+                }
+            }
+        }
+
+        return $body;
+    }
+
     /* Get the title. */
     public function getTitle()
     {


Commit: 13e183e9689daf13b167c4a6ec2245df754ce15f
    https://github.com/scummvm/scummvm-web/commit/13e183e9689daf13b167c4a6ec2245df754ce15f
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
WEB: Add lang attribute to the pages

Changed paths:
    templates/pages/index.tpl


diff --git a/templates/pages/index.tpl b/templates/pages/index.tpl
index b217b88b..a574a164 100644
--- a/templates/pages/index.tpl
+++ b/templates/pages/index.tpl
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html>
+<html lang="{$lang}">
 <head>
 	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 	<meta name="viewport" content="width=device-width, initial-scale=1">


Commit: bcf45949d016d89d5b73122602cfa25471b7be9d
    https://github.com/scummvm/scummvm-web/commit/bcf45949d016d89d5b73122602cfa25471b7be9d
Author: Mataniko (mataniko at gmail.com)
Date: 2020-09-29T16:08:34-04:00

Commit Message:
JANITORIAL: Code lint

Changed paths:
    include/Controller.php
    include/Objects/News.php
    public_html/index.php


diff --git a/include/Controller.php b/include/Controller.php
index 19f86ca6..8e659796 100644
--- a/include/Controller.php
+++ b/include/Controller.php
@@ -105,7 +105,8 @@ class Controller
         return $string;
     }
 
-    public function langModifier($path) {
+    public function langModifier($path)
+    {
         global $lang;
         if ($lang == DEFAULT_LOCALE || !$lang) {
             return $path;
diff --git a/include/Objects/News.php b/include/Objects/News.php
index f8985e5b..2f156397 100644
--- a/include/Objects/News.php
+++ b/include/Objects/News.php
@@ -45,7 +45,8 @@ class News
         return html_entity_decode($text, ENT_COMPAT, 'UTF-8');
     }
 
-    private function localizeLinks($body) {
+    private function localizeLinks($body)
+    {
         global $lang;
         if ($lang == DEFAULT_LOCALE || !$lang) {
             return $body;
@@ -58,7 +59,7 @@ class News
                 if (\strpos($url, "/frs") || file_exists("./$url")) {
                     continue;
                 } elseif (\preg_match("/^\//", $url)) { // Relative path (/screenshots/)
-                    $body = str_replace($url,"/$lang" . $url, $body);
+                    $body = str_replace($url, "/$lang" . $url, $body);
                 } elseif (\strpos($url, "www.scummvm.org")) { // Absolute url (www.scummvm.org/*)
                     $newUrl = preg_replace("/\.org(\/|$)?/i", ".org/$lang/", $url);
                     $body = str_replace($url, $newUrl, $body);
diff --git a/public_html/index.php b/public_html/index.php
index 0b2e9142..28e2596a 100644
--- a/public_html/index.php
+++ b/public_html/index.php
@@ -35,7 +35,7 @@ if (!empty($_GET['lang'])) {
 } elseif (!empty($_COOKIE['lang'])) {
   $lang = $_COOKIE['lang'];
   unset($_COOKIE['lang']);
-  setcookie("lang", null, -1);
+  setcookie("lang", "", -1);
   header("Location: " . "/$lang" . $_SERVER['REQUEST_URI']);
 }
 




More information about the Scummvm-git-logs mailing list