强迫症患者来解决office文档中文字体和本地化显示的问题

环境:
win11实体机 hyper-v安装虚拟机 Ubuntu 22.04,然后在Ubuntu 中直接部署 Seafile +docker版的onlyoffice。
安装docker版的onlyoffice
下载最新版镜像

sudo docker pull onlyoffice/documentserver

一、解决每次启动都要修改jwt秘钥问题
启动OnlyOffice容器

sudo docker run -i -t -d \
--name OnlyOffice \
--restart=always \
--env JWT_SECRET=你的秘钥 \
-e export LANG="zh_CN.UTF-8" \
-e TZ=UTC+8 \
-p 9000:80 \
-p 9443:443 \
-v /etc/localtime:/etc/localtime \
-v /opt/onlyoffice/log:/var/log/onlyoffice  \
-v /opt/onlyoffice/data:/var/www/onlyoffice/Data  \
-v /opt/onlyoffice/lib:/var/lib/onlyoffice \
-v /opt/onlyoffice/db:/var/lib/postgresql \
-d onlyoffice/documentserver

修改/opt/seafile/conf/seahub_settings.py文件ONLYOFFICE_JWT_SECRET = ‘你们的秘钥’
这个秘钥你要是不用知道怎么来的可以在用之前的秘钥,两个地方统一即可。我的是svM7pctcd7ODIN2tpYII

二、给OnlyOffice容器安装中文字体
进入容器

sudo docker exec -it OnlyOffice /bin/bash

(容器内操作)删除自带字体 (此处自行选择删除)

cd /usr/share/fonts/
rm -rf *

到宿主机下向docker内复制字体宿主机/opt/cnfonts/目录内存放中文常用字体

sudo docker cp OnlyOffice:/usr/share/fonts/ /opt/cnfonts/

再次进入容器并进入/usr/share/fonts/目录

sudo docker exec -it OnlyOffice /bin/bash

fc-list :lang=zh

fc-cache -fv

返回Ubuntu 重启OnlyOffice容器

sudo docker restart OnlyOffice

清除浏览器缓存,刷新页面,就可以看见中文字体了

三、解决office文档本地化显示问题
打开office文档时经常是汉字下面带着红杠杠,应该是拼写检查的提示,很不爽,每次都需要手动在“设置文本语言”和“设置文档语言”改成中文才能正常,无意之中翻看onlyoffice的api说明,经过尝试后发现可以如下解决。
使用editplus之类的编辑软件打开安装目录/seahub/seahub/templates/view_file_onlyoffice.html文件

   var config = {
        "type": window.screen.width < 992 ? 'mobile' : 'desktop',
        "document": {
            "fileType": "{{ file_type }}",
            "key": "{{ doc_key }}",
            "title": "{{ doc_title|escapejs }}",
            "url": "{{ doc_url }}",
            "permissions": {
                "download": {% if can_download %}true{% else %}false{% endif %},
                "edit": {% if can_edit %}true{% else %}false{% endif %},
                "print": {% if can_download %}true{% else %}false{% endif %},
                "review": true
            }
        },
        "documentType": "{{ document_type }}", // 'text' | 'spreadsheet' | 'presentation',
        {% if onlyoffice_jwt_token %}
        "token": "{{ onlyoffice_jwt_token }}",
        {% endif %}
        "editorConfig": {
            "callbackUrl": "{{ callback_url }}",
            "lang": "{{ LANGUAGE_CODE }}",
             //下面添加location和region两个参数,可以直接赋值"zh"或"zh-CN",为了国际化参照lang参数直接使用Seafile的LANGUAGE_CODE变量,
             //需要强调的是,以上两个参数设置"zh-cn”时显示“中文(简体)”,设置为"zh"时显示“中文(中华人民共和国)”
            "location": "{{ LANGUAGE_CODE }}",
            "region": "{{ LANGUAGE_CODE }}",
            "mode": {% if can_edit %}"edit"{% else %}"view"{% endif %},
            "customization": {
                "forcesave": {% if onlyoffice_force_save %}true{% else %}false{% endif %},
                {% if not request.user.is_authenticated %}
                "anonymous": {
                    "request": true,
                    "label": "Guest"
                },
                {% endif %}
            },
            {% if request.user.is_authenticated %}
            "user": {
                "id": "{{ username|escapejs }}",
                "name": "{{ username|email2nickname|escapejs }}"
            }
            {% endif %}
        }
    };
    var docEditor = new DocsAPI.DocEditor("placeholder", config);

修改完成后替换回去,删除浏览器缓存即可。