50
50
loc_format = """ <url>
51
51
<loc>{0}</loc>
52
52
<lastmod>{1}</lastmod>
53
+ {2}
53
54
</url>
54
55
"""
55
56
69
70
</sitemap>
70
71
"""
71
72
73
+ alternates_format = """<xhtml:link
74
+ rel="alternate"
75
+ hreflang="{0}"
76
+ href="{1}"
77
+ />"""
78
+
79
+
72
80
sitemapindex_footer = "</sitemapindex>"
73
81
74
82
@@ -114,6 +122,7 @@ def gen_tasks(self):
114
122
"mapped_extensions" : self .site .config .get ('MAPPED_EXTENSIONS' , ['.html' , '.htm' , '.xml' , '.rss' ]),
115
123
"robots_exclusions" : self .site .config ["ROBOTS_EXCLUSIONS" ],
116
124
"filters" : self .site .config ["FILTERS" ],
125
+ "translations" : self .site .config ["TRANSLATIONS" ],
117
126
}
118
127
119
128
output = kw ['output_folder' ]
@@ -140,7 +149,14 @@ def scan_locs():
140
149
post = self .site .post_per_file .get (path + kw ['index_file' ])
141
150
if post and (post .is_draft or post .is_private or post .publish_later ):
142
151
continue
143
- urlset [loc ] = loc_format .format (loc , lastmod )
152
+ alternates = []
153
+ if post :
154
+ for lang in kw ['translations' ]:
155
+ alt_url = post .permalink (lang = lang , absolute = True )
156
+ if loc == alt_url :
157
+ continue
158
+ alternates .append (alternates_format .format (lang , alt_url ))
159
+ urlset [loc ] = loc_format .format (loc , lastmod , '\n ' .join (alternates ))
144
160
for fname in files :
145
161
if kw ['strip_indexes' ] and fname == kw ['index_file' ]:
146
162
continue # We already mapped the folder
@@ -179,7 +195,14 @@ def scan_locs():
179
195
path = path .replace (os .sep , '/' )
180
196
lastmod = self .get_lastmod (real_path )
181
197
loc = urljoin (base_url , base_path + path )
182
- urlset [loc ] = loc_format .format (loc , lastmod )
198
+ alternates = []
199
+ if post :
200
+ for lang in kw ['translations' ]:
201
+ alt_url = post .permalink (lang = lang , absolute = True )
202
+ if loc == alt_url :
203
+ continue
204
+ alternates .append (alternates_format .format (lang , alt_url ))
205
+ urlset [loc ] = loc_format .format (loc , lastmod , '\n ' .join (alternates ))
183
206
184
207
def robot_fetch (path ):
185
208
for rule in kw ["robots_exclusions" ]:
0 commit comments