git: 55d43c8efb29 - main - obs-studio: add BROWSER option to enable CEF framework

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Fri, 16 Oct 2026 02:08:21 UTC
The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=55d43c8efb2911c674a76ed5e3a7816f142f701a

commit 55d43c8efb2911c674a76ed5e3a7816f142f701a
Author:     Martin Filla <freebsd@sysctl.cz>
AuthorDate: 2026-10-12 18:29:35 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2026-10-16 02:08:19 +0000

    obs-studio: add BROWSER option to enable CEF framework
    
    OBS studio can now display a web browser in it's streaming setup..
    
    - The BROWSER option works now: it depends on www/cef and points the
      build at it (CEF_ROOT_DIR=${LOCALBASE}/lib/cef). It is on by default
      on amd64 and not offered where www/cef does not build.
    - Use the CMake switch obs-browser actually reads (ENABLE_BROWSER) and
      turn off the What's New dialog, which has no FreeBSD code path.
    - obs-browser: FreeBSD support in its CMake files and __linux__ code
      paths; load libcef.so from the CEF directory (RPATH) instead of
      copying CEF into lib/obs-plugins, and let CEF find its own locales;
      build with C++20 as the CEF 152 headers require; include
      <netinet/in.h> for sockaddr_in.
    
    PR:     299341
---
 multimedia/obs-studio/Makefile                     | 19 ++++--
 .../files/patch-cmake_finders_FindCEF.cmake        | 11 ++++
 .../files/patch-cmake_linux_helpers.cmake          | 11 ++++
 .../obs-studio/files/patch-plugins_CMakeLists.txt  | 15 ++++-
 .../files/patch-plugins_obs-browser_CMakeLists.txt | 19 ++++++
 .../patch-plugins_obs-browser_cmake_os-linux.cmake | 22 +++++++
 ...ch-plugins_obs-browser_deps_ip-string-posix.cpp | 11 ++++
 ...atch-plugins_obs-browser_obs-browser-plugin.cpp | 20 ++++++
 ...atch-plugins_obs-browser_obs-browser-source.cpp | 29 +++++++++
 ...gins_obs-browser_panel_browser-panel-client.cpp | 11 ++++
 ...ns_obs-browser_panel_browser-panel-internal.hpp | 11 ++++
 ...tch-plugins_obs-browser_panel_browser-panel.cpp | 20 ++++++
 multimedia/obs-studio/pkg-plist                    | 71 ++++++++++++++++++++++
 13 files changed, 262 insertions(+), 8 deletions(-)

diff --git a/multimedia/obs-studio/Makefile b/multimedia/obs-studio/Makefile
index fe7c9579b297..5748d144497a 100644
--- a/multimedia/obs-studio/Makefile
+++ b/multimedia/obs-studio/Makefile
@@ -1,5 +1,6 @@
 PORTNAME=	obs-studio
 DISTVERSION=	32.2.2
+PORTREVISION=	1
 CATEGORIES=	multimedia
 MASTER_SITES=	https://github.com/obsproject/obs-studio/releases/download/${DISTVERSION}/
 DISTFILES=	OBS-Studio-${DISTVERSION}-Sources${EXTRACT_SUFX}
@@ -52,7 +53,7 @@ LIB_DEPENDS=	libasound.so:audio/alsa-lib \
 		libuuid.so:misc/libuuid \
 		libva.so:multimedia/libva
 
-USES=		cmake compiler:c++17-lang desktop-file-utils gl gnome kde:6 lua luajit \
+USES=		cmake compiler:c++17-lang desktop-file-utils localbase gl gnome kde:6 lua luajit \
 		pkgconfig python qt:6 xorg
 USE_QT=		base svg tools:build
 USE_KDE=	ecm:build
@@ -77,16 +78,24 @@ WRKSRC=		${WRKDIR}/${PORTNAME}-${PORTVERSION}-sources
 
 OPTIONS_DEFINE=		BROWSER NVENC PIPEWIRE VLC VST WAYLAND
 OPTIONS_DEFAULT=	PIPEWIRE VLC VST WAYLAND
-OPTIONS_DEFAULT_amd64=	NVENC
+OPTIONS_DEFAULT_amd64=	BROWSER NVENC
+# www/cef (Chromium) is only available on amd64 and aarch64
+.for _arch in armv7 i386 powerpc powerpc64 powerpc64le riscv64
+OPTIONS_EXCLUDE_${_arch}=	BROWSER
+.endfor
 OPTIONS_MULTI=		AUDIO
 OPTIONS_MULTI_AUDIO=	JACK PULSEAUDIO SNDIO
 OPTIONS_DEFAULT+=	${OPTIONS_MULTI_AUDIO}
 OPTIONS_SUB=		yes
 AUDIO_DESC=		Audio backends
 
-BROWSER_DESC=		Build OSB browser
-BROWSER_CMAKE_BOOL=	BUILD_BROWSER # this also requires an additional git submodule
-BROWSER_BROKEN=		Needs CEF (Chromium Embedded Framework) which isn't yet ported
+BROWSER_DESC=		Browser source and docks (Chromium Embedded Framework)
+BROWSER_LIB_DEPENDS=	libcef.so:www/cef
+BROWSER_CMAKE_BOOL=	ENABLE_BROWSER
+# The What's New dialog has no FreeBSD code path (see
+# frontend/cmake/feature-whatsnew.cmake).
+BROWSER_CMAKE_ON=	-DCEF_ROOT_DIR:PATH=${LOCALBASE}/lib/cef \
+			-DENABLE_WHATSNEW:BOOL=OFF
 
 JACK_LIB_DEPENDS=	libjack.so:audio/jack
 JACK_CMAKE_ON=		-DENABLE_JACK=TRUE
diff --git a/multimedia/obs-studio/files/patch-cmake_finders_FindCEF.cmake b/multimedia/obs-studio/files/patch-cmake_finders_FindCEF.cmake
new file mode 100644
index 000000000000..96b7fe378472
--- /dev/null
+++ b/multimedia/obs-studio/files/patch-cmake_finders_FindCEF.cmake
@@ -0,0 +1,11 @@
+--- cmake/finders/FindCEF.cmake.orig	2026-08-14 22:07:04 UTC
++++ cmake/finders/FindCEF.cmake
+@@ -154,7 +154,7 @@ elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL D
+     PATHS "${CEF_ROOT_DIR}/build/libcef_dll/Debug" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Debug"
+     DOC "Chromium Embedded Framework static library wrapper (debug)."
+   )
+-elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux)
++elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD")
+   find_library(
+     CEF_LIBRARY_RELEASE
+     NAMES libcef.so
diff --git a/multimedia/obs-studio/files/patch-cmake_linux_helpers.cmake b/multimedia/obs-studio/files/patch-cmake_linux_helpers.cmake
new file mode 100644
index 000000000000..0e4d6f1556f2
--- /dev/null
+++ b/multimedia/obs-studio/files/patch-cmake_linux_helpers.cmake
@@ -0,0 +1,11 @@
+--- cmake/linux/helpers.cmake.orig	2026-08-14 22:07:04 UTC
++++ cmake/linux/helpers.cmake
+@@ -161,7 +161,7 @@ function(set_target_properties_obs targe
+       )
+     elseif(${target} STREQUAL obs-browser)
+       message(DEBUG "Add Chromium Embedded Framework to project for obs-browser plugin...")
+-      if(TARGET CEF::Library)
++      if(TARGET CEF::Library AND NOT OS_FREEBSD)
+         get_target_property(imported_location CEF::Library IMPORTED_LOCATION_RELEASE)
+ 
+         if(imported_location)
diff --git a/multimedia/obs-studio/files/patch-plugins_CMakeLists.txt b/multimedia/obs-studio/files/patch-plugins_CMakeLists.txt
index 3abe06b98b69..72158b190ce8 100644
--- a/multimedia/obs-studio/files/patch-plugins_CMakeLists.txt
+++ b/multimedia/obs-studio/files/patch-plugins_CMakeLists.txt
@@ -1,6 +1,15 @@
---- plugins/CMakeLists.txt.orig	2025-09-26 21:04:14 UTC
+--- plugins/CMakeLists.txt.orig	2026-08-14 22:07:04 UTC
 +++ plugins/CMakeLists.txt
-@@ -61,7 +61,7 @@ add_obs_plugin(obs-libfdk)
+@@ -10,7 +10,7 @@ endif()
+ set_property(GLOBAL APPEND PROPERTY OBS_FEATURES_ENABLED "Plugin Support")
+ 
+ macro(check_obs_browser)
+-  if((OS_WINDOWS AND CMAKE_VS_PLATFORM_NAME MATCHES "(ARM64|x64)") OR OS_MACOS OR OS_LINUX)
++  if((OS_WINDOWS AND CMAKE_VS_PLATFORM_NAME MATCHES "(ARM64|x64)") OR OS_MACOS OR OS_LINUX OR OS_FREEBSD)
+     if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/obs-browser/CMakeLists.txt")
+       message(FATAL_ERROR "Required submodule 'obs-browser' not available.")
+     else()
+@@ -77,7 +77,7 @@ check_obs_browser()
  add_obs_plugin(obs-ffmpeg)
  add_obs_plugin(obs-filters)
  add_obs_plugin(obs-libfdk)
@@ -9,7 +18,7 @@
  add_obs_plugin(obs-outputs)
  add_obs_plugin(
      obs-qsv11
-@@ -72,7 +72,7 @@ add_obs_plugin(
+@@ -88,7 +88,7 @@ add_obs_plugin(obs-text PLATFORMS WINDOW
  add_obs_plugin(obs-transitions)
  add_obs_plugin(
      obs-vst
diff --git a/multimedia/obs-studio/files/patch-plugins_obs-browser_CMakeLists.txt b/multimedia/obs-studio/files/patch-plugins_obs-browser_CMakeLists.txt
new file mode 100644
index 000000000000..e75d44479e0e
--- /dev/null
+++ b/multimedia/obs-studio/files/patch-plugins_obs-browser_CMakeLists.txt
@@ -0,0 +1,19 @@
+--- plugins/obs-browser/CMakeLists.txt.orig	2026-08-14 22:07:07 UTC
++++ plugins/obs-browser/CMakeLists.txt
+@@ -42,14 +42,14 @@ target_sources(
+ 
+ target_include_directories(obs-browser PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/deps")
+ 
+-target_compile_features(obs-browser PRIVATE cxx_std_17)
++target_compile_features(obs-browser PRIVATE cxx_std_20)
+ target_link_libraries(obs-browser PRIVATE OBS::libobs OBS::frontend-api OBS::websocket-api nlohmann_json::nlohmann_json)
+ 
+ if(OS_WINDOWS)
+   include(cmake/os-windows.cmake)
+ elseif(OS_MACOS)
+   include(cmake/os-macos.cmake)
+-elseif(OS_LINUX)
++elseif(OS_LINUX OR OS_FREEBSD)
+   include(cmake/os-linux.cmake)
+ endif()
+ 
diff --git a/multimedia/obs-studio/files/patch-plugins_obs-browser_cmake_os-linux.cmake b/multimedia/obs-studio/files/patch-plugins_obs-browser_cmake_os-linux.cmake
new file mode 100644
index 000000000000..4e96f3e8838e
--- /dev/null
+++ b/multimedia/obs-studio/files/patch-plugins_obs-browser_cmake_os-linux.cmake
@@ -0,0 +1,22 @@
+--- plugins/obs-browser/cmake/os-linux.cmake.orig	2026-08-14 22:07:07 UTC
++++ plugins/obs-browser/cmake/os-linux.cmake
+@@ -20,6 +20,7 @@ target_include_directories(browser-helpe
+                                                   "${CMAKE_CURRENT_SOURCE_DIR}/obs-browser-page")
+ 
+ target_link_libraries(browser-helper PRIVATE CEF::Wrapper CEF::Library)
++target_compile_features(browser-helper PRIVATE cxx_std_20)
+ 
+ target_sources(obs-browser PRIVATE deps/ip-string-posix.cpp)
+ 
+@@ -34,3 +35,11 @@ set_target_properties_obs(
+              PREFIX ""
+              OUTPUT_NAME obs-browser-page)
+ # cmake-format: on
++
++if(OS_FREEBSD)
++  cmake_path(GET CEF_LIBRARY_RELEASE PARENT_PATH cef_library_dir)
++  set_target_properties(obs-browser PROPERTIES BUILD_RPATH "$ORIGIN/;${cef_library_dir}"
++                                               INSTALL_RPATH "$ORIGIN/;${cef_library_dir}")
++  set_target_properties(browser-helper PROPERTIES BUILD_RPATH "$ORIGIN/;${cef_library_dir}"
++                                                  INSTALL_RPATH "$ORIGIN/;${cef_library_dir}")
++endif()
diff --git a/multimedia/obs-studio/files/patch-plugins_obs-browser_deps_ip-string-posix.cpp b/multimedia/obs-studio/files/patch-plugins_obs-browser_deps_ip-string-posix.cpp
new file mode 100644
index 000000000000..8c9b077a82a3
--- /dev/null
+++ b/multimedia/obs-studio/files/patch-plugins_obs-browser_deps_ip-string-posix.cpp
@@ -0,0 +1,11 @@
+--- plugins/obs-browser/deps/ip-string-posix.cpp.orig	2026-08-14 22:07:07 UTC
++++ plugins/obs-browser/deps/ip-string-posix.cpp
+@@ -17,6 +17,8 @@
+ 
+ #include "ip-string.hpp"
+ 
++#include <sys/socket.h>
++#include <netinet/in.h>
+ #include <arpa/inet.h>
+ #include <stdio.h>
+ 
diff --git a/multimedia/obs-studio/files/patch-plugins_obs-browser_obs-browser-plugin.cpp b/multimedia/obs-studio/files/patch-plugins_obs-browser_obs-browser-plugin.cpp
new file mode 100644
index 000000000000..8bef0718f035
--- /dev/null
+++ b/multimedia/obs-studio/files/patch-plugins_obs-browser_obs-browser-plugin.cpp
@@ -0,0 +1,20 @@
+--- plugins/obs-browser/obs-browser-plugin.cpp.orig	2026-08-14 22:07:07 UTC
++++ plugins/obs-browser/obs-browser-plugin.cpp
+@@ -315,7 +315,7 @@ static void BrowserInit(void)
+ 	settings.multi_threaded_message_loop = false;
+ #endif
+ 
+-#if !defined(_WIN32) && !defined(__APPLE__)
++#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__FreeBSD__)
+ 	// Override locale path from OBS binary path to plugin binary path
+ 	string locales = obs_get_module_binary_path(obs_current_module());
+ 	locales = locales.substr(0, locales.find_last_of('/') + 1);
+@@ -686,7 +686,7 @@ static void check_hwaccel_support(void)
+ 		}
+ 	}
+ }
+-#elif __linux__
++#elif defined(__linux__) || defined(__FreeBSD__)
+ static void check_hwaccel_support(void)
+ {
+ 	/* NOTE: GL_VERSION returns a string that contains the driver vendor */
diff --git a/multimedia/obs-studio/files/patch-plugins_obs-browser_obs-browser-source.cpp b/multimedia/obs-studio/files/patch-plugins_obs-browser_obs-browser-source.cpp
new file mode 100644
index 000000000000..bacc2af12533
--- /dev/null
+++ b/multimedia/obs-studio/files/patch-plugins_obs-browser_obs-browser-source.cpp
@@ -0,0 +1,29 @@
+--- plugins/obs-browser/obs-browser-source.cpp.orig	2026-08-14 22:07:07 UTC
++++ plugins/obs-browser/obs-browser-source.cpp
+@@ -28,7 +28,7 @@
+ #include <thread>
+ #include <mutex>
+ 
+-#ifdef __linux__
++#if defined(__linux__) || defined(__FreeBSD__)
+ #include "linux-keyboard-helpers.hpp"
+ #endif
+ 
+@@ -314,7 +314,7 @@ void BrowserSource::SendKeyClick(const s
+ 		return;
+ 
+ 	std::string text = event->text;
+-#ifdef __linux__
++#if defined(__linux__) || defined(__FreeBSD__)
+ 	uint32_t native_vkey = KeyboardCodeFromXKeysym(event->native_vkey);
+ 	uint32_t modifiers = event->native_modifiers;
+ #elif defined(_WIN32) || defined(__APPLE__)
+@@ -348,7 +348,7 @@ void BrowserSource::SendKeyClick(const s
+ 			cefBrowser->GetHost()->SendKeyEvent(e);
+ 			if (!text.empty() && !key_up) {
+ 				e.type = KEYEVENT_CHAR;
+-#ifdef __linux__
++#if defined(__linux__) || defined(__FreeBSD__)
+ 				e.windows_key_code = KeyboardCodeFromXKeysym(e.character);
+ #elif defined(_WIN32)
+ 				e.windows_key_code = e.character;
diff --git a/multimedia/obs-studio/files/patch-plugins_obs-browser_panel_browser-panel-client.cpp b/multimedia/obs-studio/files/patch-plugins_obs-browser_panel_browser-panel-client.cpp
new file mode 100644
index 000000000000..3044bdd198eb
--- /dev/null
+++ b/multimedia/obs-studio/files/patch-plugins_obs-browser_panel_browser-panel-client.cpp
@@ -0,0 +1,11 @@
+--- plugins/obs-browser/panel/browser-panel-client.cpp.orig	2026-08-14 22:07:07 UTC
++++ plugins/obs-browser/panel/browser-panel-client.cpp
+@@ -87,7 +87,7 @@ void QCefBrowserClient::OnTitleChange(Ce
+ 		CefWindowHandle handl = browser->GetHost()->GetWindowHandle();
+ 		std::wstring str_title = newTitle;
+ 		SetWindowTextW((HWND)handl, str_title.c_str());
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ 		CefWindowHandle handl = browser->GetHost()->GetWindowHandle();
+ 		XStoreName(cef_get_xdisplay(), handl, newTitle.ToString().c_str());
+ #endif
diff --git a/multimedia/obs-studio/files/patch-plugins_obs-browser_panel_browser-panel-internal.hpp b/multimedia/obs-studio/files/patch-plugins_obs-browser_panel_browser-panel-internal.hpp
new file mode 100644
index 000000000000..42bd8779437d
--- /dev/null
+++ b/multimedia/obs-studio/files/patch-plugins_obs-browser_panel_browser-panel-internal.hpp
@@ -0,0 +1,11 @@
+--- plugins/obs-browser/panel/browser-panel-internal.hpp.orig	2026-08-14 22:07:07 UTC
++++ plugins/obs-browser/panel/browser-panel-internal.hpp
+@@ -54,7 +54,7 @@ public:
+ 	void finishCloseBrowser();
+ 	void Resize();
+ 
+-#ifdef __linux__
++#if defined(__linux__) || defined(__FreeBSD__)
+ private:
+ 	bool needsDeleteXdndProxy = true;
+ 	void unsetToplevelXdndProxy();
diff --git a/multimedia/obs-studio/files/patch-plugins_obs-browser_panel_browser-panel.cpp b/multimedia/obs-studio/files/patch-plugins_obs-browser_panel_browser-panel.cpp
new file mode 100644
index 000000000000..e90bf9a7861b
--- /dev/null
+++ b/multimedia/obs-studio/files/patch-plugins_obs-browser_panel_browser-panel.cpp
@@ -0,0 +1,20 @@
+--- plugins/obs-browser/panel/browser-panel.cpp.orig	2026-08-14 22:07:07 UTC
++++ plugins/obs-browser/panel/browser-panel.cpp
+@@ -233,7 +233,7 @@ void QCefWidgetInternal::closeBrowser()
+ 	cefBrowser = nullptr;
+ }
+ 
+-#ifdef __linux__
++#if defined(__linux__) || defined(__FreeBSD__)
+ static bool XWindowHasAtom(Display *display, Window w, Atom a)
+ {
+ 	Atom type;
+@@ -341,7 +341,7 @@ void QCefWidgetInternal::Init()
+ 								       cefBrowserSettings,
+ 								       CefRefPtr<CefDictionaryValue>(), rqc);
+ 
+-#ifdef __linux__
++#if defined(__linux__) || defined(__FreeBSD__)
+ 			QueueCEFTask([this]() { unsetToplevelXdndProxy(); });
+ #endif
+ 		});
diff --git a/multimedia/obs-studio/pkg-plist b/multimedia/obs-studio/pkg-plist
index 08759deb3658..0f48c0a03dec 100644
--- a/multimedia/obs-studio/pkg-plist
+++ b/multimedia/obs-studio/pkg-plist
@@ -113,6 +113,8 @@ lib/obs-plugins/linux-capture.so
 %%PIPEWIRE%%lib/obs-plugins/linux-pipewire.so
 %%PULSEAUDIO%%lib/obs-plugins/linux-pulseaudio.so
 lib/obs-plugins/linux-v4l2.so
+%%BROWSER%%lib/obs-plugins/obs-browser-page
+%%BROWSER%%lib/obs-plugins/obs-browser.so
 lib/obs-plugins/obs-ffmpeg.so
 lib/obs-plugins/obs-filters.so
 %%NVENC%%lib/obs-plugins/obs-nvenc.so
@@ -609,6 +611,75 @@ share/obs/obs-plugins/linux-v4l2/locale/ur-PK.ini
 share/obs/obs-plugins/linux-v4l2/locale/vi-VN.ini
 share/obs/obs-plugins/linux-v4l2/locale/zh-CN.ini
 share/obs/obs-plugins/linux-v4l2/locale/zh-TW.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/error.html
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/af-ZA.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/ar-SA.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/az-AZ.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/ba-RU.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/be-BY.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/bg-BG.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/bn-BD.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/ca-ES.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/cs-CZ.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/da-DK.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/de-DE.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/el-GR.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/en-GB.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/en-US.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/eo-UY.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/es-ES.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/et-EE.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/eu-ES.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/fa-IR.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/fi-FI.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/fil-PH.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/fr-FR.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/gd-GB.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/gl-ES.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/he-IL.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/hi-IN.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/hr-HR.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/hu-HU.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/hy-AM.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/id-ID.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/it-IT.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/ja-JP.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/ka-GE.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/kaa.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/kab-KAB.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/kmr-TR.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/ko-KR.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/lo-LA.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/lt-LT.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/mn-MN.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/ms-MY.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/nb-NO.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/nl-NL.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/nn-NO.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/oc-FR.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/pl-PL.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/pt-BR.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/pt-PT.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/ro-RO.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/ru-RU.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/si-LK.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/sk-SK.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/sl-SI.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/sq-AL.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/sr-CS.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/sr-SP.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/sv-SE.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/szl-PL.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/ta-IN.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/th-TH.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/tr-TR.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/tt-RU.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/ug-CN.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/uk-UA.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/ur-PK.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/vi-VN.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/zh-CN.ini
+%%BROWSER%%share/obs/obs-plugins/obs-browser/locale/zh-TW.ini
 share/obs/obs-plugins/obs-ffmpeg/locale/af-ZA.ini
 share/obs/obs-plugins/obs-ffmpeg/locale/ar-SA.ini
 share/obs/obs-plugins/obs-ffmpeg/locale/az-AZ.ini