function JSONTranslator.ObserveFormatByKey(P,x,e)assert(P~=JSONTranslator,"\067\111\110\115\116\114\117\099\116 \097 \110\101\119 \118\101\114\115\105\111\110 \111\102 \116\104\105\115 \099\108\097\115\115 \116\111 \117\115\101 \105\116")assert(type(x)=="\115\116\114\105\110\103","\075\101\121 \109\117\115\116 \098\101 \097 \115\116\114\105\110\103")local S if e then local x={}for e,P in pairs(e)do x[e]=Blend.toPropertyObservable(P)or Rx.of(P)end S=Rx.combineLatest(x)else S=nil end return Observable.new(function(e)local j=Maid.new()j:GivePromise(P._promiseTranslator:Then(function()if S then j:GiveTask(S:Subscribe(function(S)e:Fire(P:FormatByKey(x,S))end))else e:Fire(P:FormatByKey(x,nil))end end))return j end)end
--[=[
	Observes the translated value
	@param key string
	@param argData table? -- May have observables (or convertable to observables) in it.
	@return Observable<string>
]=]
function JSONTranslator:ObserveFormatByKey(key, argData)
	assert(self ~= JSONTranslator, "Construct a new version of this class to use it")
	assert(type(key) == "string", "Key must be a string")

	local argObservable
	if argData then
		local args = {}
		for argKey, value in pairs(argData) do
			args[argKey] = Blend.toPropertyObservable(value) or Rx.of(value)
		end

		argObservable = Rx.combineLatest(args)
	else
		argObservable = nil
	end

	return Observable.new(function(sub)
		local maid = Maid.new()

		maid:GivePromise(self._promiseTranslator:Then(function()
			if argObservable then
				maid:GiveTask(argObservable:Subscribe(function(args)
					sub:Fire(self:FormatByKey(key, args))
				end))
			else
				sub:Fire(self:FormatByKey(key, nil))
			end
		end))

		return maid
	end)
end
