sftpgo汉化处理

问题描述

官方提供的sftpgo webui的默认语言为英文, 没有待中文的语言包。实际上中文语言包已经翻译完毕,本文介绍一种在不重新编译的情况下为sftpgo的webui增加中文包的方法。

准备

  1. (已完成安装的跳过) 安装sftpgo的官方安装包, 这里例子中使用的是: sftpgo_v2.6.6_windows_portable.zip 具体下载地址: https://github.com/drakkan/sftpgo/releases
  2. 下载已经汉化的中文资源,其实际上是一个json文件, 可以参考这个:https://gitee.com/chenbichao/sftpgo-ryan/blob/master/static/locales/zh/translation.json
  3. sftpgo服务已可以正常使用

原理

webui的前端资源都已经在sftpgo的可执行文件的同级目录下存在,分别是template文件夹下的页面展示信息 和 static文件夹下的资源。通过直接修改template中的js代码可以增加页面中的语言选项,并在用户点击是自动下载该资源。资源数据下载后存储在浏览器的localstorage中,可能存在缓存。可能需要清理localstorage中该网址下的i18next开头的项。

操作步骤

  1. 修改 template/common/base.html
    搜索 Italiano 字样, 原始数据如下:
const lngs ={ en:{ nativeName:'English'}, it:{ nativeName:'Italiano'}};

将这部分修改为

const lngs ={ en:{ nativeName:'English'}, it:{ nativeName:'Italiano'}, zh:{ nativeName:'简体中文'}};

然后搜索 supportedLngs 字段, 原始数据如下:

supportedLngs:["en","it"],

将这部分修改为:

supportedLngs:["en","it","zh"],

完成上述两处修改后保存文件

  1. 增加 static/locales/zh/translation.json 文件
    把下载得到的translation.json文件 存放至 static/locales/zh/ 目录下(没有该目录则创建)
  2. 清理浏览器的localstorage,并重启sftpgo服务
    避免缓存影响.

结束.

补充说明

以上过程也适用于linux等环境下的sftpgo版本.

另外一种简化版思路

直接使用中文的translation.json覆盖意大利语的 static/locales/it/translation.json, 清理localstorage中的i18next_res_it-translation项, 后续选意大利语实际上就会直接使用中文资源了.

Read more

【数据结构】·励志大厂版(复习+刷题):二叉树

【数据结构】·励志大厂版(复习+刷题):二叉树

前引:哈喽小伙伴们!经过几个月的间隔,还是逃脱不了再次复习的命运!!!本篇文章没有冗杂的闲话,全是干货教学,带你横扫二叉树的几种遍历,怎么前序、、中序、后续?如何识别?二叉树其实难得就是它的递归,代码量其实并不多,插入与遍历打印都是递归,但是本篇文章完全就是buuff加身,看完还不会二叉树的欢迎在评论区留言,小编接受检讨!~~正文开始 目录  知识点速览 树的名词解释 二叉树的四种遍历 二叉树性质: 满二叉树: 完全二叉树: 练习题(1) 练习题(2) 练习题(3) 练习总结 二叉树实现 定义结构体 初始化 新增节点 前序遍历  中序遍历  后序遍历 二叉树OJ(1) 二叉树OJ(2) 二叉树OJ(3) 二叉树OJ(4)   知识点速览 在学二叉树之前我们需要作为补充了解树的几个名词概念 树的名词解释

By Ne0inhk
Gemini cli 源码分析之工具篇-WebFetch工具

Gemini cli 源码分析之工具篇-WebFetch工具

查看完整的Gemini cli 源码分析系列课程 Gemini CLI源码启示录:AI工程师必须掌握的终端开发范式 WebFetch工具深度分析 概述 WebFetch工具 (packages/core/src/tools/web-fetch.ts) 是Gemini CLI项目中的一个核心工具,用于从URL获取和处理网页内容。该工具结合了AI能力和传统网页抓取技术,提供了智能的内容获取和处理功能。 核心架构 主要组件 WebFetchTool(主工具类) ├── WebFetchToolInvocation(工具调用实现) ├── parsePrompt(URL解析函数) └── GroundingMetadata(引用和元数据接口) 继承关系 * WebFetchTool 继承自 BaseDeclarativeTool<WebFetchToolParams, ToolResult> * WebFetchToolInvocation 继承自 BaseToolInvocation<WebFetchToolParams, ToolResult> 核心功能分析

By Ne0inhk
前端安全问题深度剖析与防护策略

前端安全问题深度剖析与防护策略

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_ZEEKLOG博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》 文章目录 * * 摘要 * 一、引言 * 二、常见前端安全问题及原理 * 2.1 跨站脚本攻击(Cross-Site Scripting,XSS) * 2.2 跨站请求伪造(Cross-Site Request Forgery,CSRF) * 2.3 点击劫持(Clickjacking) * 2.4 不安全的依赖引入 * 2.5 敏感信息泄露

By Ne0inhk
排序--数据结构初阶(4)(C/C++)

排序--数据结构初阶(4)(C/C++)

文章目录 * 前言 * 理论部分: * 1.直接插入排序 * 2.希尔排序 * 3.直接选择排序 * 4.堆排序 * 5.冒泡排序 * 6.快速排序 * 归并排序 * 非比较排序 * 计数排序 * 作业部分 前言 这是数据结构初阶的最后一期,虽然来说在C++的库函数里面有sort函数可以代替这里所有的方法,并且时间复杂度也是优于他们的,但是sort函数是由他们写出来的,因此,还是是有必要学习一下的 理论部分: 这里的代码实现都是按升序来的 排序的话建议先写单趟再写整体 这些排序在两数相等的时候一般是不进行操作的(一般这么写) 1.直接插入排序 就是目前在最后的那个数跟前面每个数比,看看要插哪 时间复杂度:O(n2) 最好的情况下是O(n) 在小段小段有序时有极大的优势(相对于选择排序跟冒泡排序) 代码实现: void InsertSort(int* a, int n)

By Ne0inhk