From 525c58cc862dd0043fe51177f6aaf0eb7a00f7aa Mon Sep 17 00:00:00 2001 From: Tim Vink Date: Mon, 9 Dec 2019 11:39:57 +0100 Subject: [PATCH] add localization --- .gitignore | 516 +++++++++++++++++- README.md | 35 +- example.png | Bin 0 -> 63236 bytes .../plugin.py | 70 +++ .../util.py | 29 + mkdocs_git_revision_date_plugin/__init__.py | 0 mkdocs_git_revision_date_plugin/plugin.py | 55 -- mkdocs_git_revision_date_plugin/util.py | 9 - setup.py | 20 +- 9 files changed, 644 insertions(+), 90 deletions(-) create mode 100644 example.png create mode 100644 mkdocs_git_revision_date_localized_plugin/plugin.py create mode 100644 mkdocs_git_revision_date_localized_plugin/util.py delete mode 100644 mkdocs_git_revision_date_plugin/__init__.py delete mode 100644 mkdocs_git_revision_date_plugin/plugin.py delete mode 100644 mkdocs_git_revision_date_plugin/util.py diff --git a/.gitignore b/.gitignore index a91c88e..d700c78 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,518 @@ dist/ build/ __pycache__ -.DS_Store \ No newline at end of file +.DS_Store +# Created by https://www.gitignore.io/api/r,macos,python,pycharm,windows,visualstudio,jupyternotebooks +# Edit at https://www.gitignore.io/?templates=r,macos,python,pycharm,windows,visualstudio,jupyternotebooks + +### JupyterNotebooks ### +# gitignore template for Jupyter Notebooks +# website: http://jupyter.org/ +.ipynb_checkpoints +*/.ipynb_checkpoints/* +# IPython +profile_default/ +ipython_config.py +# Remove previous ipynb_checkpoints +# git rm -r .ipynb_checkpoints/ +### macOS ### +# General +.AppleDouble +.LSOverride +# Icon must end with two \r +Icon +# Thumbnails +._* +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk +### PyCharm ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf +# Generated files +.idea/**/contentModel.xml +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml +# Gradle +.idea/**/gradle.xml +.idea/**/libraries +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr +# CMake +cmake-build-*/ +# Mongo Explorer plugin +.idea/**/mongoSettings.xml +# File-based project format +*.iws +# IntelliJ +out/ +# mpeltonen/sbt-idea plugin +.idea_modules/ +# JIRA plugin +atlassian-ide-plugin.xml +# Cursive Clojure plugin +.idea/replstate.xml +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties +# Editor-based Rest Client +.idea/httpRequests +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser +### PyCharm Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 +# modules.xml +# .idea/misc.xml +# Sonarlint plugin +.idea/**/sonarlint/ +# SonarQube Plugin +.idea/**/sonarIssues.xml +# Markdown Navigator plugin +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator/ +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class +# C extensions +*.so +# Distribution / packaging +.Python +develop-eggs/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec +# Installer logs +pip-log.txt +pip-delete-this-directory.txt +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ +# Translations +*.mo +*.pot +# Scrapy stuff: +.scrapy +# Sphinx documentation +docs/_build/ +# PyBuilder +target/ +# pyenv +.python-version +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock +# celery beat schedule file +celerybeat-schedule +# SageMath parsed files +*.sage.py +# Spyder project settings +.spyderproject +.spyproject +# Rope project settings +.ropeproject +# Mr Developer +.mr.developer.cfg +.project +.pydevproject +# mkdocs documentation +/site +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json +# Pyre type checker +.pyre/ +### R ### +# History files +.Rhistory +.Rapp.history +# Session Data files +.RData +# User-specific files +.Ruserdata +# Example code in package build process +*-Ex.R +# Output files from R CMD build +/*.tar.gz +# Output files from R CMD check +/*.Rcheck/ +# RStudio files +.Rproj.user/ +# produced vignettes +vignettes/*.html +vignettes/*.pdf +# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 +.httr-oauth +# knitr and R markdown default cache directories +*_cache/ +/cache/ +# Temporary files created by R markdown +*.utf8.md +*.knit.md +### R.Bookdown Stack ### +# R package: bookdown caching files +/*_files/ +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db +# Dump file +*.stackdump +# Folder config file +[Dd]esktop.ini +# Recycle Bin used on file shares +$RECYCLE.BIN/ +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp +# Windows shortcuts +*.lnk +### VisualStudio ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs +# Mono auto generated files +mono_crash.* +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ +# Visual Studio 2017 auto generated files +Generated\ Files/ +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c +# Benchmark Results +BenchmarkDotNet.Artifacts/ +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +# StyleCop +StyleCopReport.xml +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc +# Chutzpah Test files +_Chutzpah* +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap +# Visual Studio Trace Files +*.e2e +# TFS 2012 Local Workspace +$tf/ +# Guidance Automation Toolkit +*.gpState +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user +# JustCode is a .NET coding add-in +.JustCode +# TeamCity is a build add-in +_TeamCity* +# DotCover is a Code Coverage Tool +*.dotCover +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json +# Visual Studio code coverage results +*.coverage +*.coveragexml +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* +# MightyMoose +*.mm.* +AutoTest.Net/ +# Web workbench (sass) +.sass-cache/ +# Installshield output folder +[Ee]xpress/ +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html +# Click-Once directory +publish/ +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets +# Microsoft Azure Build Output +csx/ +*.build.csdef +# Microsoft Azure Emulator +ecf/ +rcf/ +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ +# RIA/Silverlight projects +Generated_Code/ +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak +# SQL Server files +*.mdf +*.ldf +*.ndf +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl +# Microsoft Fakes +FakesAssemblies/ +# GhostDoc plugin setting file +*.GhostDoc.xml +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ +# Visual Studio 6 build log +*.plg +# Visual Studio 6 workspace options file +*.opt +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions +# Paket dependency manager +.paket/paket.exe +paket-files/ +# FAKE - F# Make +.fake/ +# CodeRush personal settings +.cr/personal +# Python Tools for Visual Studio (PTVS) +*.pyc +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config +# Tabs Studio +*.tss +# Telerik's JustMock configuration file +*.jmconfig +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs +# OpenCover UI analysis results +OpenCover/ +# Azure Stream Analytics local run output +ASALocalRun/ +# MSBuild Binary and Structured Log +*.binlog +# NVidia Nsight GPU debugger configuration file +*.nvuser +# MFractors (Xamarin productivity tool) working folder +.mfractor/ +# Local History for Visual Studio +.localhistory/ +# BeatPulse healthcheck temp database +healthchecksdb +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ +# End of https://www.gitignore.io/api/r,macos,python,pycharm,windows,visualstudio,jupyternotebooks diff --git a/README.md b/README.md index 90754be..c1beceb 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,16 @@ # mkdocs-git-revision-date-localized-plugin -[MkDocs](https://www.mkdocs.org/) plugin that displays the localized date of the last modification of a markdown file. Forked from [mkdocs-git-revision-date-plugin](https://github.com/zhaoterryy/mkdocs-git-revision-date-plugin) +[MkDocs](https://www.mkdocs.org/) plugin that enables displaying the localized date of the last git modification of a markdown file. Forked from [mkdocs-git-revision-date-plugin](https://github.com/zhaoterryy/mkdocs-git-revision-date-plugin). + +![example](example.png) + +(*Example when used together with [mkdocs-material](https://github.com/squidfunk/mkdocs-material) theme*) ## Setup Install the plugin using pip: ```bash -# FIRST VERSION NOT YET PUBLISHED pip install mkdocs-git-revision-date-localized-plugin ``` @@ -26,7 +29,7 @@ In templates you can use `page.meta.git_revision_date_localized`: ```django hljs {% if page.meta.git_revision_date_localized %} -
Updated {{ page.meta.git_revision_date_localized }}
+ Last update: {{ page.meta.git_revision_date_localized }} {% endif %} ``` @@ -35,29 +38,29 @@ In templates you can use `page.meta.git_revision_date_localized`: In your markdown files you can use `{{ git_revision_date_localized }}`: ```django hljs -Updated {{ git_revision_date_localized_iso }} +Last update: {{ git_revision_date_localized }} ``` -## Localization updates - -There are three date formats: +## Localizated variants -- A date string format (using [babel](https://github.com/python-babel/babel/tree/master/babel) -- A ISO format *(YYYY-mm-dd)* -- A time ago format (using [timeago](https://github.com/hustcc/timeago) +The plugin uses [babel](https://github.com/python-babel/babel/tree/master/babel) and [timeago](https://github.com/hustcc/timeago) to provide different date formats: ```django hljs -Updated {{ git_revision_date_localized }} -Updated {{ git_revision_date_localized_iso }} -Updated {{ git_revision_date_localized_timeago }} +{{ git_revision_date_localized }} +{{ git_revision_date_localized_time }} +{{ git_revision_date_localized_iso }} +{{ git_revision_date_localized_iso_time }} +{{ git_revision_date_localized_timeago }} ``` Output: ``` -Updated 28 November, 2019 -Updated 2019-11-28 -Updated 20 hours agon +28 November, 2019 +28 November, 2019 13:57:28 +2019-11-28 +2019-11-28 13:57:26 +20 hours ago ``` ## Options diff --git a/example.png b/example.png new file mode 100644 index 0000000000000000000000000000000000000000..6213362e0c84e727a20f5c82f8983e238ce6e77a GIT binary patch literal 63236 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 Hqrm?M3rquY literal 0 HcmV?d00001 diff --git a/mkdocs_git_revision_date_localized_plugin/plugin.py b/mkdocs_git_revision_date_localized_plugin/plugin.py new file mode 100644 index 0000000..20013fd --- /dev/null +++ b/mkdocs_git_revision_date_localized_plugin/plugin.py @@ -0,0 +1,70 @@ +from os import environ + +from mkdocs.config import config_options +from mkdocs.plugins import BasePlugin +from mkdocs.utils import string_types +from jinja2 import Template +from .util import Util +from datetime import datetime + + +class GitRevisionDateLocalizedPlugin(BasePlugin): + config_scheme = ( + ('locale', config_options.Type(string_types, default='')), + ('modify_md', config_options.Type(bool, default=True)) + ) + + def __init__(self): + self.locale = 'en' + self.util = Util() + + def on_config(self, config): + + # Get locale settings + mkdocs_locale = config.get('locale') + plugin_locale = self.config['locale'] + theme_locale = vars(config['theme']).get('_vars', {}).get('locale') + if theme_locale is None: + theme_locale = vars(config['theme']).get('_vars', {}).get('language') + + # First prio: plugin locale + if plugin_locale != '': + if plugin_locale != mkdocs_locale: + print(f"WARNING - plugin locale setting '{plugin_locale}' will overwrite mkdocs locale '{mkdocs_locale}'") + self.locale = mkdocs_locale + return + + # Second prio: theme + if theme_locale: + self.locale = theme_locale + # Third is mkdocs locale setting (might be add in the future) + if mkdocs_locale: + self.locale = mkdocs_locale + + # Final fallback is english + return + + + def on_page_markdown(self, markdown, page, config, files): + + revision_dates = self.util.get_revision_date_for_file( + path = page.file.abs_src_path, + locale = self.locale + ) + + for variable, date in revision_dates.items(): + page.meta[variable] = date + + if 'macros' in config['plugins']: + keys = list(config['plugins'].keys()) + vals = list(config['plugins'].values()) + if keys.index('macros') > vals.index(self): + for variable, date in revision_dates.items(): + markdown = '{{% set' + variable + f" = '{date}' " + ' %}}' + markdown + return markdown + else: + print('WARNING - macros plugin must be placed AFTER the git-revision-date-localized plugin. Skipping markdown modifications') + return markdown + else: + return Template(markdown).render(revision_dates) + diff --git a/mkdocs_git_revision_date_localized_plugin/util.py b/mkdocs_git_revision_date_localized_plugin/util.py new file mode 100644 index 0000000..4f9a845 --- /dev/null +++ b/mkdocs_git_revision_date_localized_plugin/util.py @@ -0,0 +1,29 @@ +from git import Git +from datetime import datetime +import timeago +from babel.dates import format_date + +class Util: + + def __init__(self): + self.g = Git() + + def get_revision_date_for_file(self, path: str, locale: str = 'en'): + + unix_timestamp = self.g.log(path, n=1, date='short', format='%at') + if not unix_timestamp: + revision_date = datetime.now() + print('WARNING - %s has no git logs, revision date defaulting to today\'s date' % path) + else: + revision_date = datetime.utcfromtimestamp(int(unix_timestamp)) + + # Localized versions + revision_dates = { + 'git_revision_date_localized' : format_date(revision_date, format="long", locale=locale), + 'git_revision_date_localized_time' : format_date(revision_date, format="long", locale=locale) + ' ' +revision_date.strftime("%H:%M:%S"), + 'git_revision_date_localized_iso' : revision_date.strftime("%Y-%m-%d"), + 'git_revision_date_localized_iso_time' : revision_date.strftime("%Y-%m-%d %H:%M:%S"), + 'git_revision_date_localized_timeago' : timeago.format(revision_date, locale = locale) + } + + return revision_dates \ No newline at end of file diff --git a/mkdocs_git_revision_date_plugin/__init__.py b/mkdocs_git_revision_date_plugin/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/mkdocs_git_revision_date_plugin/plugin.py b/mkdocs_git_revision_date_plugin/plugin.py deleted file mode 100644 index 7c3c952..0000000 --- a/mkdocs_git_revision_date_plugin/plugin.py +++ /dev/null @@ -1,55 +0,0 @@ -from os import environ - -from mkdocs.config import config_options -from mkdocs.plugins import BasePlugin -from mkdocs.utils import string_types -from jinja2 import Template -from .util import Util - - -class GitRevisionDatePlugin(BasePlugin): - config_scheme = ( - ('enabled_if_env', config_options.Type(string_types)), - ('modify_md', config_options.Type(bool, default=True)) - ) - - def __init__(self): - self.enabled = True - self.util = Util() - - def on_config(self, config): - env_name = self.config['enabled_if_env'] - if env_name: - self.enabled = environ.get(env_name) == '1' - if not self.enabled: - print('PDF export is disabled (set environment variable %s to 1 to enable)' % env_name) - return - - def on_page_markdown(self, markdown, page, config, files): - if not self.enabled: - return markdown - - revision_date = self.util.get_revision_date_for_file(page.file.abs_src_path) - - if not revision_date: - from datetime import datetime - revision_date = datetime.now().date() - print('WARNING - %s has no git logs, revision date defaulting to today\'s date' % page.file.src_path) - - page.meta['revision_date'] = revision_date - - if not self.config['modify_md']: - return markdown - - if 'macros' in config['plugins']: - keys = list(config['plugins'].keys()) - vals = list(config['plugins'].values()) - if keys.index('macros') > vals.index(self): - new_markdown = '{{% set git_revision_date = \'{}\' %}}\n'.format(revision_date) + markdown - return new_markdown - else: - print('WARNING - macros plugin must be placed AFTER the git-revision-date plugin. Skipping markdown modifications') - return markdown - else: - md_template = Template(markdown) - return md_template.render({'git_revision_date': revision_date}) \ No newline at end of file diff --git a/mkdocs_git_revision_date_plugin/util.py b/mkdocs_git_revision_date_plugin/util.py deleted file mode 100644 index d9ce8f7..0000000 --- a/mkdocs_git_revision_date_plugin/util.py +++ /dev/null @@ -1,9 +0,0 @@ -from git import Git - -class Util: - - def __init__(self): - self.g = Git() - - def get_revision_date_for_file(self, path: str): - return self.g.log(path, n=1, date='short', format='%ad') \ No newline at end of file diff --git a/setup.py b/setup.py index ae82578..69f4e8f 100644 --- a/setup.py +++ b/setup.py @@ -1,24 +1,26 @@ from setuptools import setup, find_packages setup( - name='mkdocs-git-revision-date-plugin', - version='0.1.5', - description='MkDocs plugin for setting revision date from git per markdown file.', - keywords='mkdocs git meta yaml frontmatter', - url='https://github.com/zhaoterryy/mkdocs-git-revision-date-plugin/', - author='Terry Zhao', - author_email='zhao.terryy@gmail.com', + name='mkdocs-git-revision-date-localized-plugin', + version='0.2', + description='Mkdocs plugin that enables displaying the localized date of the last git modification of a markdown file.', + keywords='mkdocs git date timeago babel plugin', + url='https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/', + author='Tim Vink', + author_email='vinktim@gmail.com', license='MIT', python_requires='>=3.4', install_requires=[ 'mkdocs>=0.17', 'GitPython', - 'jinja2' + 'jinja2', + 'babel>=2.7.0', + 'timeago>=1.0.10' ], packages=find_packages(), entry_points={ 'mkdocs.plugins': [ - 'git-revision-date = mkdocs_git_revision_date_plugin.plugin:GitRevisionDatePlugin' + 'git-revision-date-localized = mkdocs_git_revision_date_localized_plugin.plugin:GitRevisionDateLocalizedPlugin' ] } ) \ No newline at end of file