When you update a node, the alias for the translated versions of that node are deleted.

I haven't tested this fully, but I have one node in one language and a translation of that node. Always when one of the nodes are updated the other loses it's alias.

Can someone confirm this problem?

#95 pathauto-aliases-lost-358722-94.patch500 bytesC. Lee
PASSED: [[SimpleTest]]: [MySQL] 304 pass(es).
[ View ]
#93 pathauto-aliases-lost-358722-93.patch584 bytesC. Lee
FAILED: [[SimpleTest]]: [MySQL] 294 pass(es), 10 fail(s), and 0 exception(s).
[ View ]
#55 pathauto-aliases-lost-changed-with-i18nsync-358722-55.patch1.28 KBfmjrey
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch pathauto-aliases-lost-changed-with-i18nsync-358722-55.patch.
[ View ]
#48 pathauto-manual-url-alias-on-translation.patch1.19 KBgnindl
FAILED: [[SimpleTest]]: [MySQL] Invalid patch format in pathauto-manual-url-alias-on-translation.patch.
[ View ]
#40 pathauto.module-i18n-synchronization.diff756 bytesayalon
FAILED: [[SimpleTest]]: [MySQL] Invalid patch format in pathauto.module-i18n-synchronization.diff.
[ View ]
#19 pathauto-i18n-3.diff962 bytesbetarobot
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch pathauto-i18n-3.diff.
[ View ]
#13 pathauto.module.patch1.01 KBvanhanit
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch pathauto.module_27.patch.
[ View ]
#9 pathauto.module.patch1.05 KBvanhanit
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch pathauto.module_26.patch.
[ View ]
#5 pathauto.module.patch511 bytesvanhanit
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch pathauto.module_25.patch.
[ View ]


Status:Active» Closed (duplicate)

I think this is a duplicate of #269877: path_set_alias() doesn't account for same alias in different languages. Can you help testing there?

Well, I'm not convinced that this is the same. I don't get any errors and my two paths aren't the same.
One translation (Swedish) will have the alias "bibliotek", when the English version will have the alias "library".

It's like Pathauto, or some function that Pathauto uses, deletes all aliases related to a translation.
I have Pathauto set so that it should leave old aliases alone and only create new ones when it's needed.

Status:Closed (duplicate)» Active

I just tested this more now. I let Pathauto create one alias automatically for one node in English.
The Swedish node lost it's alias and this time I added an alias manually when editing the node (unchecked the checkbox for Pathauto). The English alias was deleted, so this seems to be a problem somewhere else, my guess is that it's in the Path module.

I made some more testing and this problem ONLY occurs when Pathauto module is activated.
The alias is correctly set when I update one of the translations, but the translated version (doesn't matter if it's the source or translation) gets it's alias either wiped or set to the default path.

Could it be so that some other module loads the translation, edits it and then saves it? How does the syncronisation between translations work, I mean when you update one translation and the other gets some fields set to the same?

One possible fix would be that Pathauto detects if the user is editing the node or if it's edited some other way and only take action if it's the user that is editing.

Version:6.x-1.1» 7.x-1.x-dev
Status:Active» Needs review
new511 bytes
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch pathauto.module_25.patch.
[ View ]

I have confirmed that this problem occurs when:

1. Pathauto is active.
2. One node has one or more translations.

The attached patch fixes this issue, and as far as I have tested nothing else breaks.
This is a patch made for the current dev version, but can be used to patch older versions to.

Please help me review this patch and apply it as soon as possible if it doesn't break anything.

Status:Needs review» Needs work

I don't think this will work. What if the form is rendered at a different URL?

Yes, it's true.

A better fix would be to include some field in the form when the user edits a node and check if that value is present instead.
But, isn't all node edit paths the same? Even if you put an alias for one nodes edit path the arg function will return the parts of the original path.

Can you give any examples when the patch doesn't work?

I'm having the same problem (6.x-1.1 and 6.x-2.x-dev).

vanhanit's patch i #5 solves the problem when editing a single node, but breaks Drupal when bulk updating path aliases on the content page.

Please let me know if I can help in any way.

Status:Needs work» Needs review
new1.05 KB
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch pathauto.module_26.patch.
[ View ]

I now have updated the patch to check for a custom value in the node. If it's not set when inserting or updating the node Pathauto will not run.

This now also works with the bulk update, thanks for reporting that bug!
I haven't tested this more than verifying that this works when updating a node with translation and the bulk generating function, but it's quite small so I belive this will work.

On one note though, on line 231 in pathauto.module this comment occurs: "Only create an alias if the checkbox was not provided or if the checkbox was provided and is checked"
Isn't this a logic error? Why do we want to create an automatic alias if the checkbox wasn't provided? If this logic would change so that the checkbox must be provided and checked, my patch isn't necessary anymore because this logic is the thing that from the beginning creates this problem.

Component:Code» I18n stuff

Setting a better component. Also..

Why do we want to create an automatic alias if the checkbox wasn't provided?

If the checkbox is not in the form submission it's because the user doesn't have permission to see it. In that case, we should take the action that the checkbox would have had by default.

Ok, then my latest patch fixes the problem while allowing bulk updates (as far as I have tested).
The only time Pathauto will not run because of the patch is when some module saves a node in code, which could be a problem for someone.

But, as I stated earlier this bug is most likely because of the syncronisation feature between translations in combination with Pathauto. When you save a node the syncronisation feature loads all other translations, sets their properties and resaves them. When this happens Pathauto deletes their aliases, because it runs even if the checkbox isn't available. This is how far I have traced this problem.

Attached a new patch, moved the form item so that it's always added to the node, even if the user doesn't have access to the Path textfield.

new1.01 KB
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch pathauto.module_27.patch.
[ View ]

I see that Drupal had some problems with the site, my attachment wasn't included above.
Here it is again.

Looks like #13 solved to problem for me. I tested it on one site currently in development. Will do more tests this week.

#13 solved it for me too. We are running with this in production.

I've tested it too with number 13 on the stable 6.x-1.1 version. Thank you!

Status:Needs review» Reviewed & tested by the community

Tested working with 6.x-1.1

So, I know it's somewhat of a pain, but since I don't use this part of the code it's hard for me to test/confirm it's working. Could someone write simpletests for this? We have a basic structure for simpletests in the module already.

new962 bytes
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch pathauto-i18n-3.diff.
[ View ]

Hey greggles,

Just applied the patch again to a few drupal installs (mono and multi lingual) all seems to work fine. I'm not so close with simpletests but attaching diff for current dev (6.x-2.x-dev (2009-May-22)).

It would be lovely to see it committed so I would not patch next dev again :)

UPD: forgot to mention, if you delete all aliases and recreate them again all would go node/000. But at least adding one by one works ok for all languages.

Status:Reviewed & tested by the community» Needs work

if you delete all aliases and recreate them again all would go node/000

Seems like this needs work, then.

Oh heck. #19 works fine actually. It's just me sleepy didn't scroll / page all content but just updated a first page :)

I'd love to see it committed to avoid patching any new dev version.

Status:Needs work» Reviewed & tested by the community

Status:Reviewed & tested by the community» Needs review

It takes more than a self-review to get committed to a module with 70,000 users ;)

Anyone else care to review? @betarobot if you provide tests for this it will make it easier to review/commit.

Well, I can just say that we use my patch on all our sites, without problems.

Working fine for me on node update, but I haven't tested the bulk update.

Tested the bulk update. Working fine.

Status:Needs review» Needs work

The last submitted patch, pathauto-i18n-3.diff, failed testing.

Version:7.x-1.x-dev» 6.x-1.x-dev
Priority:Critical» Normal
Status:Needs work» Postponed (maintainer needs more info)

I can't duplicate this. See #357185: template base_path() code - breaking il8n menu links. I added a default language node with an automatic alias, then a translated version of the node with an automatic alias. Both nodes have the correct aliases created in {url_alias}. No aliases were lost. So like in that issue, we're going to need a step-by-step process to reproduce a Pathauto bug with the latest code, if there even is one.

Version:6.x-1.x-dev» 6.x-2.x-dev
Status:Postponed (maintainer needs more info)» Active

At last, here's a step-by-step process to reproduce the bug (tested with the latest pathauto 6.x-2.x-dev and drupal 6.16).
Contrib modules activated : Pathauto, Token, Internationalization.
Two languages : french and english. Language Negotiation : Path prefix with language fallback.
Content type : Page. Multilingual support: Enabled, with translation.
Pathauto Pattern : [title-raw]

Created a first page, alias was ok. Added a translation, alias ok too. Played a bit with that, everything ok....
UNTIL I activated the Synchronize translations (Internationalization sub-module) and enabled it for the Page content type (checked everything on node type edit page / Multilanguage options / Synchronize translations)... aliases stopped working!

So there's something wrong between Pathauto and Synchronize translations.

See my post #11 above, where I mentioned the translation synchronization.

But thank you for the step-by-step description!

I wrote a lengthy report on my issues with this same problem (similar setup to #29). That issue is newer and has a patch that is similar to this.. But neither has been committed to the dev-version.
Does anyone know if there is a more uptodate issue than this?

Also, I just noticed this issue is set to the "may-eat-your-baby"-version, 6.x-2.x-dev. I'm almost desperate enough to try it.. However, the links to it don't work!

To get "6.x-2.x-dev"
http://drupal.org/project/pathauto points to http://drupal.org/node/95354 which points to http://drupal.org/node/273527 ... which says is the Drupal 7 version. FUUUUU....

Where can I find this? I have no babies yet, so there should be no worries.

Title:Translated nodes and updatesNode aliases lost/changed when using i18n synchronize translations

Better title for other people to find.




Status:Active» Needs review
Issue tags:-translation url-alias

With patch #19 updating a node seems to work without loosing URL alias

Status:Needs review» Needs work
Issue tags:+translation url-alias

The last submitted patch, pathauto-i18n-3.diff, failed testing.



Status:Needs work» Reviewed & tested by the community
new756 bytes
FAILED: [[SimpleTest]]: [MySQL] Invalid patch format in pathauto.module-i18n-synchronization.diff.
[ View ]

This patch is a real time saver! It works perfectly in combination with

I updated the patch for the latest dev version.

Please review and commit it. I think enough people have complained about this bug!

Status:Reviewed & tested by the community» Needs review

Status:Needs review» Needs work

The last submitted patch, pathauto.module-i18n-synchronization.diff, failed testing.

A patch submitted in issue #269877: path_set_alias() doesn't account for same alias in different languages could also fix this one here:

With all these patches around, I'm not sure where to look for a solution.
If anyone as a good handle on this issue, please let us know what the definite patch is.

From what I can tell pathauto and i18n do not play well together. In fact it appears that they haven't done so for at least two years. Unfortunately I don't have a debugging environment, nor really the experience of PHP debugging (I'm a C++ developer), or Drupal to fully analyze the issue.

At the simplest suppose you have "Create a new alias. Leave the existing alias functioning." set and node/200 aliased as

Alias Language
two-hundredth-page All

and you change it to be the default language in preparation to creating a translation set. What you end up with is:

Alias Language
two-hundredth-page Def-Lang

and your 'All' language alias is lost. IOW "Leave the existing alias functioning" is broken. All the other problems probably flow from this bug but it gets expressed in different ways.

The workaround I've found for version 6.x-1.4 is to apply two patches. The first is


which fixes 90%+ of the issues but you also need a patch to path in core


which catches the remaining times that your default language gets zapped. These patches on their own still aren't sufficient because say you have:

Alias Language
two-hundredth-page All
two-hundredth-page Def-Lang
deux-cent-page French

then if you update the French page you end up with another entry for the default language:

Alias Language
two-hundredth-page All
two-hundredth-page Def-Lang
two-hundredth-page Def-Lang
deux-cent-page French

So you need to make sure that each language has a unique alias then it works.

As said above this is not a fix it is a nasty workaround for a bug that is over two years old which no one seems to want to fix.

Whats wrong with my patch in #40?

The solution is simple:

1. use this patch: http://drupal.org/node/269877#comment-3351152 #209

2. if you use i18n_sync you have to apply

Everything done...

This patch may cause serious issues as it prevents path alias creation when a node is saved/updated by node_save().

I think the solution is at #269877: path_set_alias() doesn't account for same alias in different languages

Status:Needs work» Needs review
new1.19 KB
FAILED: [[SimpleTest]]: [MySQL] Invalid patch format in pathauto-manual-url-alias-on-translation.patch.
[ View ]

I found a way to implement it, basically you need 3 patches:

- Path: Allow same path alias in different languages, see #790338: All aliases get deleted when translatable nodes with same URL alias are reverted to previous revision
- i18nsnyc: Support for URL alias synchronization per content type, see #897850: Support for URL alias synchronization per content type
- Pathauto: Prevent pathauto from overwriting manual aliases on new nodes, see attachment

Status:Needs review» Needs work

The last submitted patch, pathauto-manual-url-alias-on-translation.patch, failed testing.

Status:Needs work» Needs review

Should I revert the changes from #269877: path_set_alias() doesn't account for same alias in different languages before testing what is proposed in #48?

@gnindl, post #48: Gottfried, can you please explain if we need both #40 and your latest patch in #48? I am not sure what to test. I mean, should I revert the changes from #40 before applying your patch or does your patch complement the one in #40?

Patch #48 is a new approach to the problem, adding small fixes in three different modules, so don't try it to combine with the previous patches submitted here.

You will at least need to apply the patch in http://drupal.org/node/897850#comment-3391896

How we go about the path alias language problem is still open. It works for me with this patch http://drupal.org/node/790338, but feel free to try out #269877: path_set_alias() doesn't account for same alias in different languages



new1.28 KB
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch pathauto-aliases-lost-changed-with-i18nsync-358722-55.patch.
[ View ]

Exactly the same patch as comment #48 for D6, but in a standard form and relative to module dir instead of drupal dir.

I'm now trying this patch in combination with:

Will report on this later...

Status:Needs review» Needs work

The last submitted patch, pathauto-aliases-lost-changed-with-i18nsync-358722-55.patch, failed testing.

Subscribing to this horrible issue.









Please see: http://drupal.org/node/968300 for a proposal to fix this and other issues at the same time.

Note: The linked post is _not_ a duplicate, but only related, because it is much broader than just i18n and lets pathauto behave correctly for node editing + submit and node_load() + node_save() - regardless which path is used.

As a side effect (!) the i18n synchronize translations issue is also solved in the proper way. (See this duplicate why: http://drupal.org/node/726964)

The patch in the linked post is at the moment for 6.x-1.x-dev as I only use stable branch. However the idea should also apply to 6.x-2.x-dev and 7.x-*-dev.

Best Wishes,

Fabian (LionsAd)


Update: If you want to solve this issue the easiest solution is to install:


This fixes the issue by saving the state of the "use automatic alias" checkbox to the database and loads it when it is not defined by the form.

After discussion with Dave Reid:

- Re-calculation of the pathauto_perform_alias has the disadvantage of performance considerations with bulk-operations.
- 6.x-1.x-dev will NOT be changed so using the pathauto_persist module or applying a patch is the only option there.

Not doing anything on node_save also could in certain cases break modules (see: #936222: Rethink if we should interfere on node_save() calls)

The most probable solution at the current point is that pathauto_persist will be merged into pathauto.

I tested pathauto_persist in my extended test suite and it worked perfectly.

The only culprit you could run into is:

The node needs to be saved once with pathauto_perform_alias set for pathauto_persist to work.

This however is no real issue as:

* The problem is that pathauto is overwriting alias with automatic alias when you had a manual alias set.
* When you set the manual alias you will normally do this with the node editing form and such pathauto_persist will work.

And node import scripts will need to set pathauto_perform_alias anyway ...

Note: pathauto_persistent does not yet work with user aliases, but only node entities.

Best Wishes,

Fabian (LionsAd)

Thanx for the update Fabian ;)

I honestly hope/wish this is the 'holy grail' and that it eventually gets merged in. I am tired of having to install/maintain/update all these modules + respective patches to get what I consider basic functionality for multilingual sites working.

@Dave: I guess one has to face the issue themselves in a real-life use case (...referring to the chi2011 site issue) to understand how frustrating it can be. I am glad to see that somehow considered rare cases finally surface. This means they will eventually get solved ;) Thanx for all your hard work and time spent on this one + all the other related issues.

Hello Fabian,

How does this work ? I've uploaded and activated this module, but alias are still broken every update...

Thank for your help.

Same problem with 1.5version, posted here: http://drupal.org/node/988430

I solved in a ugly way, by the moment, waiting for a patch!

ohh same with 1.5 version.
very critical for me.


! also aliases are duplicates when u saving one of the nodes.
seems like it syncing so one alieas is dissappear but current translated node duplicates its alias.

disabling Synchronize fix the problem but its still annoying with lots of cck fields and same things.

ps. sorry for my language.

I solved this problem with this module: Pathauto persistent state

i tried your module and enable synchronization of i18n.
Problem is still here: duplicates, lost pathes.

I using automatic pathaliases btw (ah yeah its pathauto), manual pathes doesnt work too.

back to disabling Synchronisation in i18n — best solution for me by the moment.


What was decided for this one Dave? Will it be handled here or by Pathauto persistent state? I am asking so we know where to focus testing.

Priority:Normal» Critical

Incredible... i found that the solution of "pathauto persistent state" work for me only for old nodes... for all new node all breaks, in this way:

1) I create a node in ENG
2) I translated it in ESP

Result: node in esp is created with correct path BUT is not part of translation with node in ENG: they are considered as "stand alone" nodes. If I click on the ENG node I found that only one language exist (ENG). The same if I click on ESP. So this two nodes are not "part of translation".

I disable synchronization but nothing happen... all is still the same.

A very serious problem... with my site

Give me a day or two to test and confirm what you report here dret.

If this does check out, I'll file a bug report in Pathauto persistent state module's queue where it really belongs. Stay tuned...

[Update] The problem indicated in #78 seems not to be related to Pathauto or Pathauto persistent state but to this module:


Disabling it all works fine again.

Issue tags:+use pathauto_persist


Just to give you all some pointers again:

If you want to solve this issue the easiest solution is to install:


See #67 for details.


After installation of this module, you need to save each path for each node at least once manually.

The new persistent alias is just created after saving the node and having the "Use automatic alias" checkbox unchecked.

This is why it seems that this module is not working and exhibiting old behavior.

@Dave: I think we need to add some update path or something for existing sites.

Best Wishes,


Sorry but this still doesn't work even with pathauto_persist installed and drupal 6.20

In pathauto I have "Create a new alias. Leave the existing alias functioning." set.

My starting position is:

section/historic-locations-northern-indian node/1642 All edit delete
section/historic-locations-northern-indian/feed node/1642/feed All edit delete

I now edit the node so that the language setting is English and what I now get is:

en/section/historic-locations-northern-indian node/1642 English edit delete
en/section/historic-locations-northern-indian/feed node/1642/feed English edit delete
**** section/historic-locations-northern-indian node/1642 English edit delete
section/historic-locations-northern-indian/feed node/1642/feed All edit delete

The 'All language' setting on the original alias has been change to "English" even though I said to leave it alone.

Same problem here. I can't use the same path alias for nodes in the same translation group. Well I add the same path alias in a translated node, it deletes other existing alias of the same path even though they are in different languages.

Tried the pathauto_persist and also disabling pathauto, neither works.

The only solution is to disable i18nsync on all fields in that content type.

Can confirm that this problem disappears when disabling i18nsync on all fields of the content type.

But disabling i18nsync is also a problem…

For me, the pathauto_persist module only solves it for differently spelled aliasses.

So when I first make /en/myalias, and then /fr/myalias, the checkbox for automatic alias will be unchecked on the english translation, but the alias itself is gone.

@screenage: that's a problem in Drupal core, not pathauto. It's solved by applying a patch from #269877: path_set_alias() doesn't account for same alias in different languages

Status:Needs work» Needs review

Status:Needs review» Needs work

+++ pathauto.module (revision 2240)
@@ -302,6 +304,9 @@
+    ¶

Remove trailing spaces.

Ayalon re: #40, please upload a patch that is formatted properly. See http://drupal.org/patch for more information.


Version:6.x-2.x-dev» 7.x-1.0

same here

It would be great to get this working...

Version:7.x-1.0» 7.x-1.x-dev
Status:Needs work» Needs review
new584 bytes
FAILED: [[SimpleTest]]: [MySQL] 294 pass(es), 10 fail(s), and 0 exception(s).
[ View ]

My first patch for the current head (f6d3f4d3e19bfc011ec839da3a88c49b72eebdf8).

It exploits the fact that when pathauto_node_update_alias() is invoked by i18n_sync, $node->path is not set.

Status:Needs review» Needs work

The last submitted patch, pathauto-aliases-lost-358722-93.patch, failed testing.

new500 bytes
PASSED: [[SimpleTest]]: [MySQL] 304 pass(es).
[ View ]

better solution

Status:Needs work» Needs review

Patch #40 works fine on Pathauto 6.x-1.6 ... it should be committed :-)

Version:7.x-1.x-dev» 7.x-1.0

If I used English like the main language and spanish as the second one. All the url become fine on english only.

article/new-article (english)
node/23 (spanish)

#95 seems to fix this issue for D7

I confirm that #95 seems to be working fine for D7. Here is a piece of code for those who want to create their own module in order to fix this problem by hooking path_auto_alias_alter:

function hook_pathauto_alias_alter(&$alias, array &$context) {
if (($context['op'] == 'update') && function_exists('i18n_sync') && !i18n_sync()) {
$alias = '';

#95 worked for me too in D7.

Status:Needs review» Needs work

Drupal Coding Standards dictate that a module should not have several functions for contrib modules:

Better solution:

Create a generic hook that i18nsync can implement.

Another possibility is to set $node->pathauto=FALSE in i18nsync.

Ok, I have used a lot of time for this, looking for solutions, in different threads, applied patched, which was not working properly - for my problem.

What have helped me:
My language was set:
Danish - standard - without any prefix,
English - domain prefix: "uk.mydomain.com"

When I created a translated content, than I have written: "uk/something-original-title" as path. I got "mydomain.com/node/320" - there was no sign of the English prefix....
But when I looked my DB, it was looking correct. The node had the correct url-alias.

So what was going wrong for me is:
uk.mydomain.com didn´t worked.
I have set the English prefix not to domain, but normal prefix: "uk"
I have changed the url path to "webshop/canvas-prints/cute-princess-blue-background" without the uk,
and now my page is working:

- Please note that Drupal is actually setting the "/uk" after the domain automatically.

HUH - I was getting nervous....... And such a dumb mistake......
BUT I hope this helps someone ;)

Cheers, and Good luck with it!

i agree that this should be fixed in i18nsync, and i've opened an issue there: #1790770: pathauto node aliases lost/changed during synchronization

in the meantime, enabling the module pathauto_persist has the side effect of working around this bug without requiring a patch. so i'm going to do that and not write a fix for now.

Don't forget #936222: Merge in pathauto_persist module functionality to prevent losing manual aliases with node_save() calls please. It's been there for two years now and could use some love.


I disagree, since as I see it, i18nsync only issues a callback where pathauto doesn't take into account what language the node being translated is in.

In my setup I have two languages, Danish and English and when I update the a node in danish the path is correctly translated into Danish using taxonomy terms, but so is the corresponding English node. So now I have to nodes with Danish paths and vice versa if I update the English node. I would prefer it if pathauto looked at the language id of the node it translated and translated it to the corresponding language.

The same goes when Im updating a danish node in english, then the path becomes english?

I might be missing something... but this is how I see it. Definitely not an issue for i18nsync - that should be clean.

Can confirm that either #95 or activating pathauto_persist fix the issue, and that the issue is still present in pathauto 7.x-1.2

Version:7.x-1.0» 7.x-1.x-dev


rather than debating whose module should work around this issue, i propose marking this a duplicate of #936222: Merge in pathauto_persist module functionality to prevent losing manual aliases with node_save() calls and putting our effort there. thoughts?

Status:Needs work» Closed (duplicate)

#936222: Merge in pathauto_persist module functionality to prevent losing manual aliases with node_save() calls is marked RTBC and will effectively solve this problem, so i'm marking this as a duplicate.

it appears to be quite weird that we're dragging with this one since 2009... anyways, #95 fixed it today on D7 for me too.