Better language interlinking

This commit is contained in:
Phil Howard 2015-11-08 21:21:57 +00:00
parent 84c63841c7
commit 113dc8ece4
11 changed files with 133 additions and 105 deletions

View File

@ -14,67 +14,6 @@ import urlmapper
reload(sys)
sys.setdefaultencoding('utf8')
lang = "en-GB"
default_strings = {
'made_by': '* Made by {manufacturer}',
'type_hat': '* HAT form-factor',
'type_classic': '* Classic form-factor',
'pin_header': '* {} pin header',
'uses_i2c': '* Uses I2C',
'wiring_pi_pin': 'Wiring Pi pin {}'
}
if len(sys.argv) > 1:
lang = sys.argv[1]
alternate_urls = urlmapper.generate_urls(lang)
pinout.load(lang)
overlays = pinout.settings['overlays']
strings = pinout.get_setting('strings',{})
if type(strings) == list:
_strings = {}
for item in strings:
_strings[item.keys()[0]] = item.values()[0]
strings = _strings
for key, val in default_strings.items():
if key not in strings:
strings[key] = val
base_url = pinout.get_setting('base_url','/pinout/') # '/pinout-tr/pinout/'
resource_url = pinout.get_setting('resource_url','/resources/') # '/pinout-tr/resources/'
url_suffix = pinout.get_setting('url_suffix','') # '.html'
template = open('src/{}/template/layout.html'.format(lang)).read()
pages = {}
navs = {}
select_overlays = []
overlays_html = ''
if not os.path.isdir('output'):
try:
os.mkdir('output')
except OSError:
exit('Failed to create output dir')
if not os.path.isdir('output/{}'.format(lang)):
try:
os.mkdir('output/{}'.format(lang))
except OSError:
exit('Failed to create output/{} dir'.format(lang))
if not os.path.isdir('output/{}/pinout'.format(lang)):
try:
os.mkdir('output/{}/pinout'.format(lang))
except OSError:
exit('Failed to create output/{}/pinout dir'.format(lang))
def cssify(value):
value = slugify(value);
if value[0] == '3' or value[0] == '5':
@ -356,6 +295,102 @@ def render_nav(url, overlay=None):
<ul class="top">
{}</ul>'''.format(html_odd, html_even)
def get_hreflang_urls(src):
hreflang = []
for lang in alternate_urls:
if src in alternate_urls[lang]:
url = alternate_urls[lang][src]
hreflang.append('<link rel="alternate" src="{url}" hreflang="{lang}"/>'.format(
lang=lang,
url=url
))
return hreflang
def get_lang_urls(src):
urls = []
for url_lang in alternate_urls:
if src in alternate_urls[url_lang]:
img_css = ''
if url_lang == lang:
img_css = ' class="grayscale"'
url = alternate_urls[url_lang][src]
urls.append('<li><a href="{url}" rel="alternate" hreflang="{lang}"><img{css} src="{resource_url}{lang}.png" /></a>'.format(
lang=url_lang,
url=url,
resource_url=resource_url,
css=img_css
))
return urls
'''
Main Program Flow
'''
lang = "en-GB"
default_strings = {
'made_by': '* Made by {manufacturer}',
'type_hat': '* HAT form-factor',
'type_classic': '* Classic form-factor',
'pin_header': '* {} pin header',
'uses_i2c': '* Uses I2C',
'wiring_pi_pin': 'Wiring Pi pin {}'
}
if len(sys.argv) > 1:
lang = sys.argv[1]
alternate_urls = urlmapper.generate_urls(lang)
pinout.load(lang)
overlays = pinout.settings['overlays']
strings = pinout.get_setting('strings',{})
if type(strings) == list:
_strings = {}
for item in strings:
_strings[item.keys()[0]] = item.values()[0]
strings = _strings
for key, val in default_strings.items():
if key not in strings:
strings[key] = val
base_url = pinout.get_setting('base_url','/pinout/') # '/pinout-tr/pinout/'
resource_url = pinout.get_setting('resource_url','/resources/') # '/pinout-tr/resources/'
url_suffix = pinout.get_setting('url_suffix','') # '.html'
template = open('src/{}/template/layout.html'.format(lang)).read()
pages = {}
navs = {}
select_overlays = []
overlays_html = ''
if not os.path.isdir('output'):
try:
os.mkdir('output')
except OSError:
exit('Failed to create output dir')
if not os.path.isdir('output/{}'.format(lang)):
try:
os.mkdir('output/{}'.format(lang))
except OSError:
exit('Failed to create output/{} dir'.format(lang))
if not os.path.isdir('output/{}/pinout'.format(lang)):
try:
os.mkdir('output/{}/pinout'.format(lang))
except OSError:
exit('Failed to create output/{}/pinout dir'.format(lang))
overlays = map(load_overlay,overlays)
@ -381,24 +416,12 @@ for pin in range(1,len(pinout.pins)+1):
if pin_url == None:
continue
hreflang = []
src = 'pin{}'.format(pin)
for code in alternate_urls:
if src in alternate_urls[code]:
alt = alternate_urls[code][src]
code_lang = code.split('-')[0] + '.'
if code_lang == 'en.':
code_lang = ''
hreflang.append('<link rel="alternate" src="//{lang}pinout.xyz/pinout/{alt}" hreflang="{code}"/>'.format(
lang=code_lang,
alt=alt,
code=code
))
hreflang = get_hreflang_urls('pin{}'.format(pin))
langlinks = get_lang_urls('pin{}'.format(pin))
pin_nav = render_nav(pin_url)
pin_html = pinout.render_html(template,
lang_links="\n\t\t".join(langlinks),
hreflang = "\n\t\t".join(hreflang),
nav = pin_nav,
content = pin_html,
@ -420,32 +443,16 @@ for url in pages:
content = pages[url]['rendered_html']
nav = navs[url]
hreflang = []
langlinks = []
if url == 'index':
for code in alternate_urls:
code_lang = code.split('-')[0] + '.'
if code_lang == 'en.':
code_lang = ''
hreflang.append('<link rel="alternate" src="//{lang}pinout.xyz" hreflang="{code}"/>'.format(
lang=code_lang,
alt=alt,
code=code
))
hreflang = get_hreflang_urls('index')
langlinks = get_lang_urls('index')
if 'src' in pages[url]:
src = pages[url]['src']
for code in alternate_urls:
if src in alternate_urls[code]:
alt = alternate_urls[code][src]
code_lang = code.split('-')[0] + '.'
if code_lang == 'en.':
code_lang = ''
hreflang.append('<link rel="alternate" src="//{lang}pinout.xyz/pinout/{alt}" hreflang="{code}"/>'.format(
lang=code_lang,
alt=alt,
code=code
))
hreflang = get_hreflang_urls(src)
langlinks = get_lang_urls(src)
if not 'description' in pages[url]:
pages[url]['description'] = pinout.settings['default_desc']
@ -456,6 +463,7 @@ for url in pages:
pages[url]['name'] = pinout.settings['default_title']
html = pinout.render_html(template,
lang_links="\n\t\t".join(langlinks),
hreflang = "\n\t\t".join(hreflang),
nav = nav,
content = content,

View File

Before

Width:  |  Height:  |  Size: 599 B

After

Width:  |  Height:  |  Size: 599 B

BIN
resources/fr-FR.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

View File

Before

Width:  |  Height:  |  Size: 492 B

After

Width:  |  Height:  |  Size: 492 B

View File

@ -5,6 +5,7 @@ default_title: Raspberry Pi GPIO Pinout - Pi 1, B+, Pi 2
title_suffix: " at Raspberry Pi GPIO Pinout"
base_url: /pinout/
resource_url: /resources/
domain: pinout.xyz
url_suffix:
urls:
GND: ground

View File

@ -24,12 +24,11 @@
<body>
<div id="container">
<ul class="main-nav">
<li><img class="grayscale" src="{{resource_url}}gb.png" /></li>
<li><a href="http://tr.pinout.xyz" hreflang="tr-TR"><img src="{{resource_url}}tr.png" /></a></li>
<li><a href="http://pi.gadgetoid.com/">Pi Blog</a></li>
<li><a href="http://eagle.gadgetoid.com">Learn Eagle</a></li>
<li><a href="https://twitter.com/gadgetoid"><i class="fa fa-twitter"></i> @Gadgetoid</a></li>
<li><a href="https://github.com/Gadgetoid/Pinout2"><i class="fa fa-github"></i> Contribute</a></li>
{{lang_links}}
</ul>
<h1 class="logo"><a title="Raspberry Pi GPIO Pinout home" href="/"><img src="{{resource_url}}pinout-logo.png" style="top:8px;" /><span>Raspberry Pi</span>n<span class="out">out</span></a></h1>
<div class="overlay-container">

View File

@ -5,6 +5,7 @@ default_title: Raspberry Pi GPIO Pinout - Pi 1, B+, Pi 2
title_suffix: " at Raspberry Pi GPIO Pinout"
base_url: /pinout/
resource_url: /resources/
domain: fr.pinout.xyz
url_suffix:
urls:
GND: ground

View File

@ -2,6 +2,7 @@
<html>
<head>
<title>{{title}}</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="description" content="{{description}}" />
<link href='//fonts.googleapis.com/css?family=Sanchez|Ubuntu+Mono' rel='stylesheet' type='text/css' />
<link href='{{resource_url}}prettify/prettify.css' rel='stylesheet' />
@ -9,6 +10,7 @@
<link href="{{resource_url}}pinout.css?v={{v}}" rel="stylesheet">
<link href="{{resource_url}}print.css?v={{v}}" rel="stylesheet" media="print">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
{{hreflang}}
<script type='text/javascript'>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-32070014-1']);
@ -27,6 +29,7 @@
<li><a href="http://eagle.gadgetoid.com">Learn Eagle</a></li>
<li><a href="https://twitter.com/gadgetoid"><i class="fa fa-twitter"></i> @Gadgetoid</a></li>
<li><a href="https://github.com/Gadgetoid/Pinout2"><i class="fa fa-github"></i> Contribute</a></li>
{{lang_links}}
</ul>
<h1 class="logo"><a title="Raspberry Pi GPIO Pinout home" href="/pinout"><img src="{{resource_url}}pinout-logo.png" style="top:8px;" /><span>Raspberry Pi</span>n<span class="out">out</span></a></h1>
<div class="overlay-container">

View File

@ -4,6 +4,7 @@ default_title: Raspberry Pi GPIO Pinleri - Pi 1, B+, Pi 2
title_suffix: " - Raspberry Pi Pinleri"
base_url: /pinout/
resource_url: /resources/
domain: tr.pinout.xyz
url_suffix: ''
urls:
GND: ground_toprak

View File

@ -10,21 +10,29 @@
<link href="{{resource_url}}pinout.css?v={{v}}" rel="stylesheet">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
{{hreflang}}
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-69846516-2', 'auto');
ga('send', 'pageview');
</script>
</head>
<body>
<div id="container">
<ul class="main-nav">
<li><a href="http://pinout.xyz" hreflang="en-GB"><img src="{{resource_url}}gb.png" /></a></li>
<li><a><img class="grayscale" src="{{resource_url}}tr.png" /></a></li>
<li><a href="http://www.raspi.gen.tr/">Raspberry Pi Türkiye</a></li>
<li><a href="https://twitter.com/RPiTR"><i class="fa fa-twitter"></i> @RPiTR</a></li>
<li><a href="http://forum.raspi.gen.tr/">Forumlar</a></li>
<li><a href="http://pi.gadgetoid.com/">Pi Blog</a></li>
<li><a href="https://twitter.com/gadgetoid"><i class="fa fa-twitter"></i> @Gadgetoid</a></li>
<li><a href="https://github.com/Ardakilic/Pinout2"><i class="fa fa-github"></i> Destekleyin</a></li>
{{lang_links}}
</ul>
<h1 class="logo"><a title="Raspberry Pi GPIO Pinout home" href="/pinout-tr/pinout.html"><img src="{{resource_url}}pinout-logo.png" style="top:8px;" /><span>Raspberry Pi</span>n<span class="out">out</span></a></h1>
<h1 class="logo"><a title="Raspberry Pi GPIO Pinout home" href="//tr.pinout.xyz"><img src="{{resource_url}}pinout-logo.png" style="top:8px;" /><span>Raspberry Pi</span>n<span class="out">out</span></a></h1>
<div class="overlay-container">
<span>Raspberry Pi Eklenti kartları ve özellikleri <i class="fa fa-arrow-right"></i></span>
<div class="drop-down">

View File

@ -57,6 +57,10 @@ def generate_for_lang(lang="en-GB"):
overlays = pinout.settings['overlays']
base_url = pinout.get_setting('base_url','/pinout/')
domain = pinout.get_setting('domain','pinout.xyz')
overlays_html = ''
overlays = map(lambda overlay: load_overlay_url(overlay, lang),overlays)
@ -66,13 +70,16 @@ def generate_for_lang(lang="en-GB"):
if pin_url is None:
continue
url_lookup['pin{}'.format(pin)] = '{}'.format(pin_url)
url_lookup['pin{}'.format(pin)] = '//{domain}{base_url}{url}'.format(domain=domain,base_url=base_url,url=pin_url)
for url in overlays:
if url is None:
continue
url_lookup['{}'.format(url[0])] = '{}'.format(url[1])
url_lookup['{}'.format(url[0])] = '//{domain}{base_url}{url}'.format(domain=domain,base_url=base_url,url=url[1])
url_lookup['index'] = '//{}'.format(domain)
return url_lookup