A couple responses here point to creating a Live Copy, but you had requested a Language Copy. What I believe you want to do is mimic the behavior in AEM where you `Create Translation` → `Structure Only` which will create the Language Copy page with all of the source page’s current components/content, updating any path references to the path of the tree you’re creating (in your case from `/en/*` to `/de/*`.
The code that performs a translation/language copy in AEM is buried in a Workflow, and there’s no reasonable way to execute that code other than triggering the workflow (I was literally looking into this just last week on one of my projects).
The code to trigger the translation workflow for “structure only” is as follows:
Page sourcePage = pageManager.getPage("/content/project/language-master/en/home/mypage/test1")
WorkflowSession wfSession = Objects.requireNonNull(resolver.adaptTo(WorkflowSession.class));
WorkflowModel wfModel = wfSession.getModel("/var/workflow/models/wcm-translation/create_language_copy");
WorkflowData wfData = wfSession.newWorkflowData(Constants.TYPE_JCR_PATH, sourcePage.getPath());
Map<String, Object> wfMetaData = new HashMap<>();
wfMetaData.put("language", "de");
wfMetaData.put("projectType", "add_structure_only");
wfMetaData.put("workflowTitle", "Copy Structure \"" + sourcePage.getPath() + "\"");
wfSession.startWorkflow(wfModel, wfData, wfMetaData);