Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: getnikola/plugins
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 078b43daaecb^
Choose a base ref
...
head repository: getnikola/plugins
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 39e0ff8121d6
Choose a head ref
  • 2 commits
  • 3 files changed
  • 1 contributor

Commits on Sep 4, 2018

  1. Copy the full SHA
    078b43d View commit details
  2. Adjusting to v8.

    felixfontein committed Sep 4, 2018

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    39e0ff8 View commit details
Showing with 68 additions and 0 deletions.
  1. +7 −0 v8/german_slugify/README.md
  2. +11 −0 v8/german_slugify/german_slugify.plugin
  3. +50 −0 v8/german_slugify/german_slugify.py
7 changes: 7 additions & 0 deletions v8/german_slugify/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
This plugin converts German umlauts ä, ö, ü, ß and their upper-case
variants to ae, oe, ue and ss when slugifying. This translation is
only done for languages detected as German, other languages are not
affected.

You currently have to modify the plugin itself to override the
language detection.
11 changes: 11 additions & 0 deletions v8/german_slugify/german_slugify.plugin
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[Core]
Name = german_slugify
Module = german_slugify

[Nikola]
PluginCategory = SignalHandler

[Documentation]
Author = Felix Fontein
Version = 1.0
Description = Converts German umlauts ä, ö, ü, ß to ae, oe, ue, ss while slugifying.
50 changes: 50 additions & 0 deletions v8/german_slugify/german_slugify.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-

from nikola.plugin_categories import SignalHandler
from nikola import utils


def _needs_german_slugifying_rules(lang, locale):
"""Checks whether the given language name with corresponding locale needs German slugifying rules."""
if locale.split('_')[0] in {'de', 'gsw'}: # German and Allemanic German
return True
if lang in {'de',
'de_at', 'de_ch', 'de_de',
'de-at', 'de-ch', 'de-de',
'atde', 'chde', 'dede'}:
return True
return False


class GermanSlugify(SignalHandler): # Could also be any other plugin type which is initialized early enough.
def set_site(self, site):
super(GermanSlugify, self).set_site(site)

# First determine languages which belong to German locales
self.german_languages = set()
for lang in site.config['TRANSLATIONS'].keys():
loc = utils.LocaleBorg.locales.get(lang, lang)
if _needs_german_slugifying_rules(lang, loc):
self.german_languages.add(lang)
if len(self.german_languages) > 0:
utils.LOGGER.debug("Using German slugifying rules for the following languages: {0}".format(', '.join(sorted(self.german_languages))))
else:
utils.LOGGER.debug("Not using German slugifying rules.")

# Store old slugify method
self.old_slugify = utils.slugify

# Define new slugify method
def new_slugify(value, lang=None, force=False):
if lang is not None and lang in self.german_languages:
if not isinstance(value, utils.unicode_str):
raise ValueError("Not a unicode object: {0}".format(value))
value = value.replace('ä', 'ae').replace('ö', 'oe').replace('ü', 'ue').replace('ß', 'ss')
value = value.replace('Ä', 'ae').replace('Ö', 'oe').replace('Ü', 'ue')
return self.old_slugify(value, lang=lang, force=force)

# Setting it as utils.slugify
utils.slugify = new_slugify

# Note that we do not replace utils.unslugify as ae,oe,ue,ss cannot
# be substitued by ä,ö,ü,ß in all cases.