Answer
Crystal's framework looks for the .rpt layout file inside a language-specific subfolder of OpenReportPath, matching whichever language code the user picks in the print dialog — for example, an 'en' selection looks in OpenReportPath\en, while a 'zh' selection looks in OpenReportPath\zh. This is deliberately how the framework is designed, so you can maintain a separate .rpt file per language, each in its own language-coded folder, rather than one layout trying to handle every language internally. For any translated text that's actually generated by the underlying report-server logic (rather than static text baked into the .rpt itself), add the corresponding translations to that report's .rdf logic as well.