Translate the source project, not the zip. A SCORM package is published output, a zip of HTML, JavaScript, media and an imsmanifest.xml file that describes the rest12, so the clean route is to translate the course in its authoring tool and publish one package per language34. If the source is gone, unzip the package, translate the text files and the titles in the manifest with a translation tool, leave identifiers and file names alone, and zip the contents again with imsmanifest.xml at the root25. Then test the new package before a learner opens it6.
Moodle's FAQ names 2 errors your rebuilt zip can cause: Incorrect file package, when Moodle cannot find the manifest, and File not found, when a file the manifest lists is missing or in the wrong folder1.
Can you translate the SCORM zip itself?
Yes, but treat it as the fallback. ADL's packaging rules put a course in a transferable ZIP file called the Package Interchange Format7, and SCORM.com says every file the course needs should sit inside it and be listed in the manifest2.
With the source, Storyline 360 exports the course text to XLIFF or Word and imports the translation into a copy of the project3; Rise 360 exports XLIFF 1.2 from a duplicate of the course4. You then publish that copy for your LMS84.
Before you settle for the zip, ask whoever published the package for the project file. If the package sits in a Moodle course, you may be able to download it from there: Moodle's Protect package downloads setting is disabled by default, which Moodle's docs say means packages can always be downloaded9.
Which files inside a SCORM package hold text to translate?
Start with the titles in the manifest, then the HTML pages. SCORM.com's SCORM 2004 manifest reference requires a title on the organization, often used as the title for the whole course, and one on every item5; Moodle's sample manifest shows both1. The pages read for this guide do not walk through a SCORM 1.2 manifest element by element, so open your manifest and check.
Moodle's FAQ lists what else a package holds: HTML, XML and multimedia files and the JavaScript for the SCORM API1. The tool that published your package decides which files hold the learner's words. None of the pages read for this guide maps that for any tool, so you find out by searching.
| Part of the package | What it holds | Translate it? | Source |
|---|---|---|---|
imsmanifest.xml, organization <title> | Often used as the title for the entire course | Yes | 5 |
imsmanifest.xml, item <title> | The title of each activity | Yes | 51 |
| Metadata: title, description, keywords | Descriptive text, each in LangString elements that can hold versions in several languages | Yes, and update the <language> codes | 10 |
identifier, identifierref, href, <file href> | Pointers between items, resources and files | Leave as is | 51 |
| .xsd and .dtd files | The XML grammar of the manifest | Leave as is | 2 |
| HTML pages | Page content and markup | Yes, through an HTML filter | 111 |
| Other XML files and JavaScript | Files the manifest lists; Moodle names JavaScript for the SCORM API | Only strings you can prove are learner text | 1 |
| Images and video | Words baked into pixels | Rebuild them; as of 6 October 2026, Articulate's own AI translation does not translate this text | 12 |
Metadata can sit inline in the manifest or in a separate file the manifest points to through adlcp:location25. Search your package for that second XML file before you call the manifest done.
SCORM.com's metadata reference has a <language> element for the language the learning object uses to communicate with the learner, and another for the language of the typical learner10. If you translate the titles, change those codes in the same pass.
Which route should you take?
Use the source whenever you can get it, the unzipped package when you cannot, and a translation provider when you lack the hours or the tools.
| Route | When | What you need | Hours (author's estimate) | What breaks | Source |
|---|---|---|---|---|---|
| Republish from the source | You have the project file | The authoring tool and license, a translator | 2 to 4 author hours, plus translation | Storyline: the XLIFF and Word export cannot translate captions, trigger conditions, player labels or variable names. Rise: manual XLIFF cannot translate code blocks, survey blocks or question banks | 34 |
| Translate the unzipped package | The source is gone | A zip tool, a translation tool with HTML and ZIP filters, a test account | 3 to 7 hours of file work and testing, plus translation | Translated identifiers or file names, translated drop-down values, text left in JavaScript or images, a zipped folder | 511113 |
| A translation provider | No time or tools | The zip or the source, a test account | 1 to 2 hours to brief and test | Whatever their route breaks; the test is still yours | 6 |
The hours are the author's working estimates for a short, single activity course, not figures from any source.
On the source route, the authoring tool packages for you, and the gaps in the table come from Articulate's own pages34. The Storyline and Rise translation guide has the full workflow, and Word or XLIFF settles the export.
memoQ, the one translation tool whose help pages were read for this guide, imports a zip directly: patterns such as *.xml choose which files inside it to import, and the contents arrive as a folder structure13. memoQ cannot import nested zips, bilingual files such as XLIFF, multilingual XML or Excel files, or CSV and TSV files found inside the package13.
memoQ's HTML filter imports HTML that contains scripts, honors the HTML 5 translate attribute, and on export changes the lang attribute of imported elements to the target language, unless that attribute did not match the project's source language11. For quizzes, note the setting Ignore content of drop-down lists: program code may expect a drop-down value, which is lost when it is translated11.
Neither memoQ page says the filter translates strings inside JavaScript, or that the export hands back a zip. Plan to rebuild the zip yourself.
If you use a translation provider, ask which of these routes they run.
What has to stay the same when you rebuild the zip?
The structure. The manifest has to sit at the top of your zip under its exact name. Every pointer in it has to land on a file that still exists under the name it lists.
The manifest file must always exist at the root of the content.
SCORM.com (Rustici Software), "SCORM Content Packaging", page modified 31 January 20232
Moodle's FAQ says people usually break that rule by compressing the course folder instead of its contents, which leaves imsmanifest.xml 2 directories deep1. Moodle's fix is to go inside the exported folder, select every file and compress the selection. On Linux servers the name must also be all lowercase, imsmanifest.xml and not IMSmanifest.xml1.
In a SCORM 2004 manifest, items point at resources through identifierref, resources name their launch file in href, and each resource should list every file it needs in <file> elements with a relative location5. Translate one of those strings and the pointer stops matching, which is what Moodle's File not found error reports: a listed file is missing, misnamed or in the wrong folder1.
If a file and its manifest entry do not match, Moodle's FAQ says to change the manifest, not the file name, because the files also reference one another1. Leave the .xsd and .dtd schema files alone; they describe the manifest's XML grammar2.
memoQ's help says imported HTML is unreadable when memoQ cannot recognize the code page, and it offers a separate export code page when the source is not Unicode and the target language uses a different script11. Open a translated page in a browser before you zip.
One package per language, or one package with a language switch?
One package per language is the plain choice, and the only one the zip route gives you. In the pages read for this guide, a language switch inside one package is an authoring tool's publish option.
Articulate Localization offers both. For LMS output, Storyline 360 builds either a single package containing the selected languages, where learners choose their language at launch, or separate packages, one subfolder per language whose contents you upload or zip14. Rise 360's separate option downloads one zip holding one zip per language; you unzip the outer file and upload each language zip15.
Your LMS sees a language code, if it stores one. Storyline 360 reports the learner's chosen language in both package types: cmi.student_preference.language for SCORM 1.2 and cmi.learner_preference.language for SCORM 200414.
Articulate adds that the SCORM 1.2 field is not mandatory, so some LMSs might not support it14. SCORM.com describes both fields as the preferred language for SCOs with multilingual capability16.
Articulate's FAQ says that in an LMS, a learner's progress must be reset before they can choose another language, because saved progress includes the language12. Storyline's Prompt to resume player setting lets a learner choose Restart; Rise 360 currently does not let learners reset, so your LMS admin may have to12.
Separate packages are separate uploads to your LMS1415, so decide before launch which one your compliance report counts.
SCORM also lets one manifest hold several organizations of the same content, for example for different audiences25. That sounds like a language switch. None of the pages read for this guide says how an LMS lets a learner pick one, so test your own LMS before you build on it.
If you use Moodle, add the translated package as a new activity instead of uploading it over the original. Moodle's FAQ says that when you upload a package over a previous one and the item identifier differs, the tracking data for that package is deleted1.
How do you test the translated package?
Upload the translated package to a test account before your LMS. SCORM Cloud from Rustici Software offers free testing: you import the course, launch it in a sandbox, and read completion, pass or fail, score and time, with debug logs when something goes wrong6.
Rustici says SCORM Cloud does not check for strict technical conformance, and that ADL's Conformance Test Suite is the only definitive proof6. Rustici's Storyline walkthrough says to test in SCORM Cloud or your LMS8; for a translation, do both.
Then click through every screen with someone who reads the language. Look for English in buttons, feedback and quiz answers, text overflowing its box, and the course title in your catalog. Free sample SCORM packages walks through a SCORM Cloud test and a Moodle test.
What about longer text, right-to-left languages and audio?
Articulate warns that some languages use longer words and phrases and may need more room or a smaller font3. If the source is gone, you make every fix for overflowing text in the published files.
Text growth, voiceover and captions are in how to translate a training course into Spanish, and right-to-left languages in how to translate an Articulate Storyline or Rise course. If you are republishing from the source, SCORM 1.2 vs SCORM 2004 covers which version to export.
How to do it yourself
This is the route for a package with no source. You need the zip, any zip tool, a text or XML editor, a translation tool with HTML and ZIP filters (memoQ is the one documented here1311) and a free SCORM Cloud trial account6. The pages read for this guide give no price for the translation tool, and Rustici's page gives no length for the free trial, so check both before you start.
- Look for the source first. Ask whoever published the package for the project file, and get the zip from your LMS if that is all there is.
- Copy the zip and unzip the copy into an empty folder. Keep the original as your fallback.
- Open imsmanifest.xml and note the organization and item titles, any metadata file named in
adlcp:location, and the SCORM version, which a SCORM 2004 manifest records in<schemaversion>5. - Find the strings. Pick a sentence you can see on screen and search every HTML, XML and JavaScript file for it. The files where it turns up hold this package's text.
- Import the files into your translation tool. In memoQ, the ZIP filter's patterns choose files: a pattern such as
*.xmlpicks every file of that type, so*.htmlshould pick the HTML pages13. Mark anything code reads as non-translatable and check the drop-down setting before you start11. - Translate the manifest titles and metadata in an XML editor, and change the
<language>codes10. Leave everyidentifier,identifierrefandhrefexactly as it was5. - Export the translated files over a clean copy of the unzipped folder, keeping every file name and folder.
- Zip the contents, not the folder. Open the folder, select all files and compress them, then open the new zip and confirm imsmanifest.xml sits at the top in lowercase21.
- Test in SCORM Cloud, then in your LMS as a new activity61.
- Click through every screen with someone who reads the language.
| Task | Who | Rough time |
|---|---|---|
| Steps 1 to 4 | You | 1 to 2 hours |
| Steps 5 to 7 | You and the translator | 1 to 3 hours of file work, plus the translation itself |
| Step 8 | You | 15 minutes |
| Steps 9 and 10 | You and a reviewer | 1 to 2 hours, plus the course's seat time |
These are working estimates for a short, single activity course, not figures from any source.
The 5 mistakes that cost the most
- Zipping the folder. The manifest ends up 2 directories deep and Moodle reports it missing1.
- Translating identifiers or file names. The pointers in the manifest stop matching, and pages come back File not found51.
- Translating drop-down values. Program code that expects the original value loses it11.
- Uploading over the original activity in Moodle. A different item identifier deletes the tracking data1.
- Forgetting what is not text. Words inside images and video stay in the source language; as of 6 October 2026, Articulate's own AI translation does not translate them either12.
Questions people also ask
Can you translate a SCORM file without the authoring tool? Yes, as a fallback, if the text sits in files you can open. Unzip the package, translate the HTML pages and the manifest titles with a translation tool, and zip the contents again with imsmanifest.xml at the root21.
Do you need a separate SCORM package for each language? Not always. Through Articulate Localization, Storyline 360 and Rise 360 can publish one LMS package with several languages, where learners pick at launch1415. Rise 360's manual XLIFF route cannot4, and on the zip route one package per language is what you get.
What is imsmanifest.xml? The XML file that describes a SCORM package: its resources, the organization of its items and its metadata2. It must sit at the root of the package, and Moodle reports an error when it cannot find it there1.
Which SCORM version should the translated package use? The one the original used. A SCORM 2004 manifest records it in <schemaversion>5; the pages read for this guide do not show where a SCORM 1.2 manifest records it. If you are republishing from the source, you can choose again.
Moodle Docs 5.3, "SCORM FAQ", page last edited 16 April 2024; the sections cited were read in the Internet Archive capture of the Moodle 4.5 copy of 6 November 2024, on 9 October 2026. https://docs.moodle.org/503/en/SCORM_FAQ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
SCORM.com (Rustici Software), "SCORM Content Packaging", page modified 31 January 2023, read 9 October 2026. https://scorm.com/scorm-explained/technical-scorm/content-packaging/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Articulate, "Storyline 360: Translating Courses", article last updated 10 September 2026, read 9 October 2026. https://www.articulatesupport.com/article/Storyline-360-Translating-Courses ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Articulate, "Rise 360: Manually Translate Your Content", article last updated 24 September 2026, read 9 October 2026. https://www.articulatesupport.com/article/Rise-360-Manually-Translate-Your-Content ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
SCORM.com (Rustici Software), "SCORM 2004 Manifest Structure", page modified 27 November 2018, read 9 October 2026. https://scorm.com/scorm-explained/technical-scorm/content-packaging/manifest-structure/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Rustici Software, "SCORM Cloud Testing: The Solution for Testing SCORM Content", read 9 October 2026. https://rusticisoftware.com/resources/test-scorm/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
ADL, "Sharable Content Object Reference Model (SCORM)", read 9 October 2026 in the Internet Archive capture of 13 December 2025, because adlnet.gov refused connections that day. https://web.archive.org/web/20251213072258/https://www.adlnet.gov/past-projects/scorm/ ↩︎
Rustici Software, "How to create a SCORM package with Articulate Storyline 360", read 9 October 2026. https://rusticisoftware.com/resources/how-to-create-a-scorm-package-with-articulate-storyline/ ↩︎ ↩︎
Moodle Docs 5.3, "SCORM settings", page last edited 14 August 2025, read 9 October 2026. https://docs.moodle.org/503/en/SCORM_settings ↩︎
SCORM.com (Rustici Software), "SCORM 2004 Metadata Structure", page modified 27 November 2018, read 9 October 2026. https://scorm.com/scorm-explained/technical-scorm/content-packaging/metadata-structure/ ↩︎ ↩︎ ↩︎
memoQ, "HTML documents", help topic for memoQ 12.5, read 9 October 2026. https://docs.memoq.com/current/en/Workspace/html-documents.html ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Articulate, "Articulate 360 AI FAQs: Articulate Localization", article last updated 6 October 2026, read 9 October 2026. https://www.articulatesupport.com/article/Articulate-360-FAQs-Articulate-Localization ↩︎ ↩︎ ↩︎ ↩︎
memoQ, "ZIP files", help topic for memoQ 12.5, read 9 October 2026. https://docs.memoq.com/current/en/Workspace/zip-files.html ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Articulate, "Articulate Localization: Publish Multi-Language Storyline Projects", article last updated 10 September 2026, read 9 October 2026. https://www.articulatesupport.com/article/Articulate-Localization-Publish-Multi-Language-Storyline-Projects ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Articulate, "Articulate Localization: Publish Multi-Language Rise 360 Courses", article last updated 24 September 2026, read 9 October 2026. https://www.articulatesupport.com/article/Articulate-Localization-Publish-Multi-Language-Rise-360-Courses ↩︎ ↩︎ ↩︎
SCORM.com (Rustici Software), "SCORM Run-Time Reference Guide", read 9 October 2026. https://scorm.com/scorm-explained/technical-scorm/run-time/run-time-reference/ ↩︎