gpt4 book ai didi

Thymeleaf - 手动处理模板和国际化?

转载 作者:行者123 更新时间:2023-12-05 07:43:28 26 4
gpt4 key购买 nike

我能够手动处理模板(无需 Spring Boot),传入变量,然后使用 Thymeleaf 模板将结果输出为 PDF。然而,消息(文本)没有得到翻译,而且似乎没有什么解决办法。

这是我当前的代码:

    ByteOutputStream os = new ByteOutputStream();
ITextRenderer renderer = new ITextRenderer();

Random rand = new Random();
Integer positiveRandInt = rand.nextInt(Integer.MAX_VALUE) + 1;

final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
StandardMessageResolver messageResolver = new StandardMessageResolver();

messageResolver.getDefaultMessages();

TenantDTO tenantDTO = operatorService.getOperatorInfo(saleService.getOperatorId(TenantContext.getCurrentTenant()));
DisplayTransactionDetailsDTO receipt = saleService.getsReceiptForPassenger(transactionNumber);
ReceiptConfig receiptProperties = operatorService.getOperatorProperty();
Operator operator = operatorService.getOperatorAddress();

templateResolver.setPrefix("templates/PDF_Receipt_Template/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");

TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
templateEngine.setMessageResolver(messageResolver);

Context ctx = new Context();

ctx.setVariable("locale", locale);
ctx.setVariable("lang", "en");

ctx.setVariable("receipt", receipt);
ctx.setVariable("receiptItems", receipt.getSalesTransactionItems());
ctx.setVariable("receiptPayments", receipt.getSalesTransactionPayments());
ctx.setVariable("receiptPromos", receipt.getSalesTransactionPromos());
ctx.setVariable("receiptTaxes", receipt.getSalesTransactionTaxSummaries());
ctx.setVariable("tenant", tenantDTO);
ctx.setVariable("operator", operator);
ctx.setVariable("receiptProperties", receiptProperties);

String htmlContent = templateEngine.process("pdf_template", ctx);

renderer.setDocumentFromString(htmlContent);
renderer.layout();
renderer.createPDF(os);
renderer.finishPDF();

byte[] pdfAsBytes = os.getBytes();
os.close();

FileOutputStream fos = new FileOutputStream(new File(positiveRandInt.toString() + "_receipt.pdf"));
fos.write(pdfAsBytes);
fos.close();

有没有办法在没有 Spring 的情况下访问 Spring Boots 消息(资源包)?通过指定位置或来自 TemplateEngine 的资源?然后将从以下位置加载正确的值:

  • 消息.properties
  • messages_en.properties
  • messages_fr.properties

最佳答案

MessageSourceResourceBundle.getBundle from org.springframework.context.support

使用指定的基本名称和语言环境以及调用者的类加载器获取资源包。

@param baseName - 资源包的基本名称,一个完全限定的类名

@param locale - 需要资源包的区域

@return 给定基本名称和语言环境的资源包

public static final ResourceBundle getBundle(String baseName,
Locale locale)

关于Thymeleaf - 手动处理模板和国际化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43667010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com