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 rest, so the clean route is to translate the course in its authoring tool and publish one package per language. 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 root. Then test the new package before a learner opens it.
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 folder.
Can you translate a SCORM package as a zip?
Yes, but treat it as the fallback. ADL's packaging rules put a course in a transferable ZIP file called the Package Interchange Format, and SCORM.com says every file the course needs should sit inside it and be listed in the manifest.
With the source, Storyline 360 exports the course text to XLIFF or Word and imports the translation into a copy of the project; Rise 360 exports XLIFF 1.2 from a duplicate of the course. You then publish that copy for your LMS.
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 downloaded.
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 item; Moodle's sample manifest shows both. 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 API. 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? |
|---|---|---|
imsmanifest.xml, organization <title> | Often used as the title for the entire course | Yes |
imsmanifest.xml, item <title> | The title of each activity | Yes |
| Metadata: title, description, keywords | Descriptive text, each in LangString elements that can hold versions in several languages | Yes, and update the <language> codes |
identifier, identifierref, href, <file href> | Pointers between items, resources and files | Leave as is |
| .xsd and.dtd files | The XML grammar of the manifest | Leave as is |
| HTML pages | Page content and markup | Yes, through an HTML filter |
| Other XML files and JavaScript | Files the manifest lists; Moodle names JavaScript for the SCORM API | Only strings you can prove are learner text |
| Images and video | Words baked into pixels | Rebuild them; as of 6 October 2026, Articulate's own AI translation does not translate this text |
Metadata can sit inline in the manifest or in a separate file the manifest points to through adlcp:location. 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 learner. If you translate the titles, change those codes in the same pass.
Should you work from the source, the zip or a provider?
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 |
|---|---|---|---|---|
| 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 |
| 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 |
| 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 |
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 pages. 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 structure. memoQ cannot import nested zips, bilingual files such as XLIFF, multilingual XML or Excel files, or CSV and TSV files found inside the package.
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 language. 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 translated.
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.
How do you package the translated course?

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 2023
Moodle's FAQ says people usually break that rule by compressing the course folder instead of its contents, which leaves imsmanifest.xml 2 directories deep. 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.xml.
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 location. 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 folder.
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 another. Leave the.xsd and.dtd schema files alone; they describe the manifest's XML grammar.
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 script. Open a translated page in a browser before you zip.
Should each language get its own package?
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 zip. Rise 360's separate option downloads one zip holding one zip per language; you unzip the outer file and upload each language zip.
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 2004.
Articulate adds that the SCORM 1.2 field is not mandatory, so some LMSs might not support it. SCORM.com describes both fields as the preferred language for SCOs with multilingual capability.
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 language. 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 to.
Separate packages are separate uploads to your LMS, 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 audiences. 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 deleted.
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 wrong.
Rustici says SCORM Cloud does not check for strict technical conformance, and that ADL's Conformance Test Suite is the only definitive proof. Rustici's Storyline walkthrough says to test in SCORM Cloud or your LMS; 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 and audio?
Articulate warns that some languages use longer words and phrases and may need more room or a smaller font. 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 do you translate a SCORM zip with no source?
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 here) and a free SCORM Cloud trial account. 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>. - 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 pages. Mark anything code reads as non-translatable and check the drop-down setting before you start. - Translate the manifest titles and metadata in an XML editor, and change the
<language>codes. Leave everyidentifier,identifierrefandhrefexactly as it was. - 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 lowercase.
- Test in SCORM Cloud, then in your LMS as a new activity.
- 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.
What goes wrong most often in a zip translation?
- Zipping the folder. The manifest ends up 2 directories deep and Moodle reports it missing.
- Translating identifiers or file names. The pointers in the manifest stop matching, and pages come back File not found.
- Translating drop-down values. Program code that expects the original value loses it.
- Uploading over the original activity in Moodle. A different item identifier deletes the tracking data.
- 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 either.
Need your course in another language? We build in English, Spanish, French, Arabic, Russian and German. We build the first lesson free from your own material, then give you a fixed price for the rest. Get your free first lesson.
Other questions about translating SCORM packages
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 root.
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 launch. Rise 360's manual XLIFF route cannot, 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 metadata. It must sit at the root of the package, and Moodle reports an error when it cannot find it there.
Which SCORM version should the translated package use?
The one the original used. A SCORM 2004 manifest records it in <schemaversion>; 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.
