<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl.xml"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>Changes in action.php</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2025</copyright>
    <generator>Java</generator><item>
        <title>1a25f39dd1d18f916e99909728ff71c0ba821969 - Fix per-user language not applying to the JavaScript bundle</title>
        <link>http://127.0.0.1:8080/history/plugin/usersettings/action.php#1a25f39dd1d18f916e99909728ff71c0ba821969</link>
        <description>Fix per-user language not applying to the JavaScript bundlejs.php runs with NOSESSION, so it has no REMOTE_USER and the JS_SCRIPT_LISThandler (which keyed off REMOTE_USER) could never resolve the user&apos;s language-- LANG/LANG.plugins.* always shipped in the site default. The page UI followedthe user&apos;s choice while all JS strings stayed English.Carry the language through the js.php &lt;script&gt; URL instead of the session:- TPL_METAHEADER_OUTPUT appends &amp;uslang=&lt;code&gt; to the js.php src during the  authenticated page request; this also caches the bundle per language so a  stale English bundle is not reused after a switch.- JS_SCRIPT_LIST reads $INPUT-&gt;str(&apos;uslang&apos;) (survives NOSESSION), validates it  to a real inc/lang/ dir, switches $conf[&apos;lang&apos;], and keeps the datepicker  cache-key rewrite.- Capture the pre-override site default so the URL builder can compare against  it after applyUserLang has already switched $conf[&apos;lang&apos;].- Factor language validation into isValidLangCode(); the param is now  user-controllable so it is checked against [a-z0-9-] + an existing dir.Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;

            List of files:
            /plugin/usersettings/action.php</description>
        <pubDate>Wed, 03 Jun 2026 10:22:21 +0000</pubDate>
        <dc:creator>tracker-user &lt;82045103+tracker-user@users.noreply.github.com&gt;</dc:creator>
    </item>
<item>
        <title>26676c9792ddd7dcb5d1204fddef0af7fc4600e1 - Fix per-user language not applying to JS bundle</title>
        <link>http://127.0.0.1:8080/history/plugin/usersettings/action.php#26676c9792ddd7dcb5d1204fddef0af7fc4600e1</link>
        <description>Fix per-user language not applying to JS bundleJS strings (LANG, LANG.plugins.*) are built by lib/exe/js.php, which is aseparate request that never fires ACTION_ACT_PREPROCESS &#8212; so applyUserLang()never ran for it and the JS bundle always shipped in the site-default language.Hook JS_SCRIPT_LIST (BEFORE) to apply the preferred language before js.phpbuilds its cache and loads JS strings. The handler also rewrites theinc/lang/&lt;lang&gt;/jquery.ui.datepicker.js entry in the file list, becausejs.php keys its output cache on md5(serialize($files)) and that datepickerpath is the only language-dependent member &#8212; without rewriting it, two userswith different languages collide on one cached bundle.Shared lang-resolution logic extracted to resolvePreferredLang() so bothACTION_ACT_PREPROCESS and JS_SCRIPT_LIST handlers stay DRY.Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

            List of files:
            /plugin/usersettings/action.php</description>
        <pubDate>Wed, 03 Jun 2026 09:48:36 +0000</pubDate>
        <dc:creator>tracker-user &lt;82045103+tracker-user@users.noreply.github.com&gt;</dc:creator>
    </item>
<item>
        <title>49b74e0a20d271d13e295d5f68707f57e70072a5 - Review: fix lock collision, lazy lang-apply, endonyms, null-guards, namespacing</title>
        <link>http://127.0.0.1:8080/history/plugin/usersettings/action.php#49b74e0a20d271d13e295d5f68707f57e70072a5</link>
        <description>Review: fix lock collision, lazy lang-apply, endonyms, null-guards, namespacing- helper: use a distinct lock key ($file.&apos;.lock&apos;) in setPreferences() so  the outer read-modify-write lock does not collide with io_saveFile()&apos;s  own internal lock &#8212; previously caused a ~3 s CPU spin on every save- action: applyUserLang() reads the stored &apos;lang&apos; record directly via  getRecord() instead of getPreference(), avoiding the REGISTER event  (and inc/lang/ glob) on every logged-in request; the toggle registry is  now built after $conf[&apos;lang&apos;] is updated, so toggle labels resolve in  the user&apos;s language. Add [a-z0-9-] charset guard on the stored code.  Remove the now-moot $this-&gt;localised/$this-&gt;lang cache reset.- action: getAvailableLanguages() returns native endonyms via languageName()  (covers all 78 DokuWiki lang dirs; unknown codes fall back to bare code)- admin: ?? &apos;&apos; null-guard on $userData[&apos;name&apos;] in two places- All three files: migrate to namespaced base classes  (dokuwiki\Extension\{Plugin,ActionPlugin,AdminPlugin,EventHandler,Event})- plugin.info.txt: bump date to 2026-06-01Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

            List of files:
            /plugin/usersettings/action.php</description>
        <pubDate>Mon, 01 Jun 2026 02:29:31 +0000</pubDate>
        <dc:creator>tracker-user &lt;82045103+tracker-user@users.noreply.github.com&gt;</dc:creator>
    </item>
<item>
        <title>f51fe07cd1ae2d1dfd14f525b27faf57a788b46f - Review: fix JSON encoding, error message, locale cache, add translations</title>
        <link>http://127.0.0.1:8080/history/plugin/usersettings/action.php#f51fe07cd1ae2d1dfd14f525b27faf57a788b46f</link>
        <description>Review: fix JSON encoding, error message, locale cache, add translations- helper.php: add JSON_UNESCAPED_UNICODE to json_encode flags- lang/en: add %s placeholder to adminsavefail for consistency with adminsaved- action.php: reset plugin locale cache after applying user language override,  so the settings page renders in the user&apos;s chosen language rather than the  site default- Add de, ru, ja translations- plugin.info.txt: update dateCo-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

            List of files:
            /plugin/usersettings/action.php</description>
        <pubDate>Thu, 28 May 2026 19:58:06 +0000</pubDate>
        <dc:creator>tracker-user &lt;82045103+tracker-user@users.noreply.github.com&gt;</dc:creator>
    </item>
<item>
        <title>cc98f4d1e5f0c930e495939174b11819e96464f3 - Add a built-in interface language toggle</title>
        <link>http://127.0.0.1:8080/history/plugin/usersettings/action.php#cc98f4d1e5f0c930e495939174b11819e96464f3</link>
        <description>Add a built-in interface language toggle

            List of files:
            /plugin/usersettings/action.php</description>
        <pubDate>Sat, 23 May 2026 01:00:30 +0000</pubDate>
        <dc:creator>tracker-user &lt;82045103+tracker-user@users.noreply.github.com&gt;</dc:creator>
    </item>
<item>
        <title>1ab406139ae52af26e6f9eaacaf1646e58521679 - Initial commit, made with Claude Opus 4.7</title>
        <link>http://127.0.0.1:8080/history/plugin/usersettings/action.php#1ab406139ae52af26e6f9eaacaf1646e58521679</link>
        <description>Initial commit, made with Claude Opus 4.7

            List of files:
            /plugin/usersettings/action.php</description>
        <pubDate>Fri, 22 May 2026 18:11:01 +0000</pubDate>
        <dc:creator>tracker-user &lt;82045103+tracker-user@users.noreply.github.com&gt;</dc:creator>
    </item>
</channel>
</rss>
